Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / settings.py @ 8c7e1398

History | View | Annotate | Download (8.2 kB)

1 91884d63 Giorgos Korfiatis
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2 91884d63 Giorgos Korfiatis
#
3 91884d63 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 91884d63 Giorgos Korfiatis
# without modification, are permitted provided that the following
5 91884d63 Giorgos Korfiatis
# conditions are met:
6 91884d63 Giorgos Korfiatis
#
7 91884d63 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 91884d63 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 91884d63 Giorgos Korfiatis
#      disclaimer.
10 91884d63 Giorgos Korfiatis
#
11 91884d63 Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 91884d63 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 91884d63 Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 91884d63 Giorgos Korfiatis
#      provided with the distribution.
15 91884d63 Giorgos Korfiatis
#
16 91884d63 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 91884d63 Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 91884d63 Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 91884d63 Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 91884d63 Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 91884d63 Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 91884d63 Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 91884d63 Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 91884d63 Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 91884d63 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 91884d63 Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 91884d63 Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 91884d63 Giorgos Korfiatis
#
29 91884d63 Giorgos Korfiatis
# The views and conclusions contained in the software and
30 91884d63 Giorgos Korfiatis
# documentation are those of the authors and should not be
31 91884d63 Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 91884d63 Giorgos Korfiatis
# or implied, of GRNET S.A.
33 91884d63 Giorgos Korfiatis
34 cf441bae Antony Chazapis
#coding=utf8
35 74c62d99 Ilias Tsitsimpis
import logging
36 74c62d99 Ilias Tsitsimpis
37 a7dff008 Antony Chazapis
from django.conf import settings
38 a30e4fff Kostas Papadimitriou
from synnefo.lib import parse_base_url, join_urls
39 f759041f Ilias Tsitsimpis
from synnefo.lib.services import fill_endpoints
40 f759041f Ilias Tsitsimpis
from synnefo.util.keypath import get_path
41 4080a1df Georgios D. Tsoukalas
from pithos.api.services import pithos_services as vanilla_pithos_services
42 f759041f Ilias Tsitsimpis
from astakosclient import AstakosClient
43 4080a1df Georgios D. Tsoukalas
44 4080a1df Georgios D. Tsoukalas
from copy import deepcopy
45 e3ff6830 Georgios D. Tsoukalas
46 f759041f Ilias Tsitsimpis
47 74c62d99 Ilias Tsitsimpis
logger = logging.getLogger(__name__)
48 74c62d99 Ilias Tsitsimpis
49 f759041f Ilias Tsitsimpis
# --------------------------------------------------------------------
50 f759041f Ilias Tsitsimpis
# Process Pithos settings
51 f759041f Ilias Tsitsimpis
52 e3ff6830 Georgios D. Tsoukalas
# Top-level URL for Pithos. Must set.
53 e3ff6830 Georgios D. Tsoukalas
BASE_URL = getattr(settings, 'PITHOS_BASE_URL',
54 2a54b2dd Georgios D. Tsoukalas
                   "https://object-store.example.synnefo.org/pithos/")
55 f759041f Ilias Tsitsimpis
# Service Token acquired by identity provider.
56 f759041f Ilias Tsitsimpis
SERVICE_TOKEN = getattr(settings, 'PITHOS_SERVICE_TOKEN', '')
57 e3ff6830 Georgios D. Tsoukalas
58 e3ff6830 Georgios D. Tsoukalas
BASE_HOST, BASE_PATH = parse_base_url(BASE_URL)
59 e3ff6830 Georgios D. Tsoukalas
60 fe4ad54f Georgios D. Tsoukalas
pithos_services = deepcopy(vanilla_pithos_services)
61 fe4ad54f Georgios D. Tsoukalas
fill_endpoints(pithos_services, BASE_URL)
62 2a54b2dd Georgios D. Tsoukalas
PITHOS_PREFIX = get_path(pithos_services, 'pithos_object-store.prefix')
63 2a54b2dd Georgios D. Tsoukalas
PUBLIC_PREFIX = get_path(pithos_services, 'pithos_public.prefix')
64 2a54b2dd Georgios D. Tsoukalas
UI_PREFIX = get_path(pithos_services, 'pithos_ui.prefix')
65 8f2eb016 Sofia Papagiannaki
VIEW_PREFIX = join_urls(UI_PREFIX, 'view')
66 2a54b2dd Georgios D. Tsoukalas
67 2a54b2dd Georgios D. Tsoukalas
68 f759041f Ilias Tsitsimpis
# --------------------------------------------------------------------
69 f759041f Ilias Tsitsimpis
# Process Astakos settings
70 2a54b2dd Georgios D. Tsoukalas
71 f759041f Ilias Tsitsimpis
ASTAKOS_AUTH_URL = getattr(
72 f759041f Ilias Tsitsimpis
    settings, 'ASTAKOS_AUTH_URL',
73 6ce03057 Giorgos Korfiatis
    'https://accounts.example.synnefo.org/astakos/identity/v2.0')
74 f759041f Ilias Tsitsimpis
75 f759041f Ilias Tsitsimpis
ASTAKOSCLIENT_POOLSIZE = \
76 f759041f Ilias Tsitsimpis
    getattr(settings, 'PITHOS_ASTAKOSCLIENT_POOLSIZE', 200)
77 f759041f Ilias Tsitsimpis
78 f759041f Ilias Tsitsimpis
79 f759041f Ilias Tsitsimpis
# --------------------------------------
80 f759041f Ilias Tsitsimpis
# Define a LazyAstakosUrl
81 74c62d99 Ilias Tsitsimpis
# This is used to define ASTAKOS_ACCOUNT_URL and
82 74c62d99 Ilias Tsitsimpis
# ASTAKOS_UI_URL and should never be used as is.
83 f759041f Ilias Tsitsimpis
class LazyAstakosUrl(object):
84 f759041f Ilias Tsitsimpis
    def __init__(self, endpoints_name):
85 f759041f Ilias Tsitsimpis
        self.endpoints_name = endpoints_name
86 f759041f Ilias Tsitsimpis
87 f759041f Ilias Tsitsimpis
    def __str__(self):
88 f759041f Ilias Tsitsimpis
        if not hasattr(self, 'str'):
89 f759041f Ilias Tsitsimpis
            try:
90 f759041f Ilias Tsitsimpis
                astakos_client = \
91 f759041f Ilias Tsitsimpis
                    AstakosClient(SERVICE_TOKEN, ASTAKOS_AUTH_URL)
92 f759041f Ilias Tsitsimpis
                self.str = getattr(astakos_client, self.endpoints_name)
93 74c62d99 Ilias Tsitsimpis
            except Exception as excpt:
94 74c62d99 Ilias Tsitsimpis
                logger.exception(
95 74c62d99 Ilias Tsitsimpis
                    "Could not retrieve endpoints from Astakos url %s: %s",
96 74c62d99 Ilias Tsitsimpis
                    ASTAKOS_AUTH_URL, excpt)
97 74c62d99 Ilias Tsitsimpis
                return ""
98 f759041f Ilias Tsitsimpis
        return self.str
99 f759041f Ilias Tsitsimpis
100 f759041f Ilias Tsitsimpis
# --------------------------------------
101 f759041f Ilias Tsitsimpis
# Define ASTAKOS_ACCOUNT_URL and ASTAKOS_UR_URL as LazyAstakosUrl
102 74c62d99 Ilias Tsitsimpis
# These are used to define the proxy paths.
103 74c62d99 Ilias Tsitsimpis
# These have to be resolved lazily (by the proxy function) so
104 74c62d99 Ilias Tsitsimpis
# they should not be used as is.
105 f759041f Ilias Tsitsimpis
ASTAKOS_ACCOUNT_URL = LazyAstakosUrl('account_url')
106 f759041f Ilias Tsitsimpis
ASTAKOS_UI_URL = LazyAstakosUrl('ui_url')
107 f759041f Ilias Tsitsimpis
108 f759041f Ilias Tsitsimpis
# --------------------------------------
109 f759041f Ilias Tsitsimpis
# Define Astakos prefixes
110 f759041f Ilias Tsitsimpis
ASTAKOS_PROXY_PREFIX = getattr(settings, 'PITHOS_PROXY_PREFIX', '_astakos')
111 f759041f Ilias Tsitsimpis
ASTAKOS_AUTH_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'identity')
112 f759041f Ilias Tsitsimpis
ASTAKOS_ACCOUNT_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'account')
113 f759041f Ilias Tsitsimpis
ASTAKOS_UI_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'ui')
114 f759041f Ilias Tsitsimpis
115 f759041f Ilias Tsitsimpis
# --------------------------------------
116 f759041f Ilias Tsitsimpis
# Define Astakos proxy paths
117 f759041f Ilias Tsitsimpis
ASTAKOS_AUTH_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_AUTH_PREFIX)
118 f759041f Ilias Tsitsimpis
ASTAKOS_ACCOUNT_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_ACCOUNT_PREFIX)
119 f759041f Ilias Tsitsimpis
ASTAKOS_UI_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_UI_PREFIX)
120 e3ff6830 Georgios D. Tsoukalas
121 f759041f Ilias Tsitsimpis
# Astakos login URL to redirect if the user information is missing
122 f759041f Ilias Tsitsimpis
LOGIN_URL = join_urls(ASTAKOS_UI_PROXY_PATH, 'login')
123 a7dff008 Antony Chazapis
124 6dd0fc7c Christos Stavrakakis
125 f759041f Ilias Tsitsimpis
# --------------------------------------------------------------------
126 f759041f Ilias Tsitsimpis
# Backend settings
127 ce2a2ef0 Antony Chazapis
128 a7dff008 Antony Chazapis
# SQLAlchemy (choose SQLite/MySQL/PostgreSQL).
129 2715ade4 Sofia Papagiannaki
BACKEND_DB_MODULE = getattr(
130 2715ade4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_DB_MODULE', 'pithos.backends.lib.sqlalchemy')
131 2715ade4 Sofia Papagiannaki
BACKEND_DB_CONNECTION = getattr(settings, 'PITHOS_BACKEND_DB_CONNECTION',
132 2715ade4 Sofia Papagiannaki
                                'sqlite:////tmp/pithos-backend.db')
133 a7dff008 Antony Chazapis
134 a7dff008 Antony Chazapis
# Block storage.
135 2715ade4 Sofia Papagiannaki
BACKEND_BLOCK_MODULE = getattr(
136 2715ade4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_BLOCK_MODULE', 'pithos.backends.lib.hashfiler')
137 2715ade4 Sofia Papagiannaki
BACKEND_BLOCK_PATH = getattr(
138 2715ade4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_BLOCK_PATH', '/tmp/pithos-data/')
139 1427ce62 Sofia Papagiannaki
BACKEND_BLOCK_UMASK = getattr(settings, 'PITHOS_BACKEND_BLOCK_UMASK', 0o022)
140 a7dff008 Antony Chazapis
141 a7dff008 Antony Chazapis
# Queue for billing.
142 29148653 Sofia Papagiannaki
BACKEND_QUEUE_MODULE = getattr(settings, 'PITHOS_BACKEND_QUEUE_MODULE', None)
143 29148653 Sofia Papagiannaki
# Example: 'pithos.backends.lib.rabbitmq'
144 29148653 Sofia Papagiannaki
145 29148653 Sofia Papagiannaki
BACKEND_QUEUE_HOSTS = getattr(settings, 'PITHOS_BACKEND_QUEUE_HOSTS', None)
146 29148653 Sofia Papagiannaki
# Example: "['amqp://guest:guest@localhost:5672']"
147 29148653 Sofia Papagiannaki
148 29148653 Sofia Papagiannaki
BACKEND_QUEUE_EXCHANGE = getattr(settings, 'PITHOS_BACKEND_QUEUE_EXCHANGE',
149 29148653 Sofia Papagiannaki
                                 'pithos')
150 a7dff008 Antony Chazapis
151 a7dff008 Antony Chazapis
# Default setting for new accounts.
152 19ddd41b Sofia Papagiannaki
BACKEND_ACCOUNT_QUOTA = getattr(
153 19ddd41b Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_ACCOUNT_QUOTA', 50 * 1024 * 1024 * 1024)
154 19ddd41b Sofia Papagiannaki
BACKEND_CONTAINER_QUOTA = getattr(
155 c72c19e4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_CONTAINER_QUOTA', 0)
156 a7dff008 Antony Chazapis
BACKEND_VERSIONING = getattr(settings, 'PITHOS_BACKEND_VERSIONING', 'auto')
157 29148653 Sofia Papagiannaki
BACKEND_FREE_VERSIONING = getattr(settings, 'PITHOS_BACKEND_FREE_VERSIONING',
158 29148653 Sofia Papagiannaki
                                  True)
159 a7dff008 Antony Chazapis
160 74cbb94a Sofia Papagiannaki
# Enable backend pooling
161 74cbb94a Sofia Papagiannaki
BACKEND_POOL_ENABLED = getattr(settings, 'PITHOS_BACKEND_POOL_ENABLED', True)
162 74cbb94a Sofia Papagiannaki
163 61c5b615 Sofia Papagiannaki
# Default backend pool size
164 61c5b615 Sofia Papagiannaki
BACKEND_POOL_SIZE = getattr(settings, 'PITHOS_BACKEND_POOL_SIZE', 5)
165 61c5b615 Sofia Papagiannaki
166 591e1df0 Sofia Papagiannaki
# Update object checksums.
167 591e1df0 Sofia Papagiannaki
UPDATE_MD5 = getattr(settings, 'PITHOS_UPDATE_MD5', False)
168 8efd183f Antony Chazapis
169 47462eda Filippos Giannakos
RADOS_STORAGE = getattr(settings, 'PITHOS_RADOS_STORAGE', False)
170 29148653 Sofia Papagiannaki
RADOS_POOL_BLOCKS = getattr(settings, 'PITHOS_RADOS_POOL_BLOCKS', 'blocks')
171 47462eda Filippos Giannakos
RADOS_POOL_MAPS = getattr(settings, 'PITHOS_RADOS_POOL_MAPS', 'maps')
172 61ae9b74 Sofia Papagiannaki
173 61ae9b74 Sofia Papagiannaki
# This enables a ui compatibility layer for the introduction of UUIDs in
174 61ae9b74 Sofia Papagiannaki
# identity management.  WARNING: Setting to True will break your installation.
175 61ae9b74 Sofia Papagiannaki
TRANSLATE_UUIDS = getattr(settings, 'PITHOS_TRANSLATE_UUIDS', False)
176 61ae9b74 Sofia Papagiannaki
177 29148653 Sofia Papagiannaki
# Set how many random bytes to use for constructing the URL
178 29148653 Sofia Papagiannaki
# of Pithos public files
179 29148653 Sofia Papagiannaki
PUBLIC_URL_SECURITY = getattr(settings, 'PITHOS_PUBLIC_URL_SECURITY', 16)
180 4a105ce2 Sofia Papagiannaki
# Set the alphabet to use for constructing the URL of Pithos public files
181 29148653 Sofia Papagiannaki
PUBLIC_URL_ALPHABET = getattr(
182 56f3c759 Sofia Papagiannaki
    settings,
183 56f3c759 Sofia Papagiannaki
    'PITHOS_PUBLIC_URL_ALPHABET',
184 29148653 Sofia Papagiannaki
    '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
185 3bdb9222 Sofia Papagiannaki
186 3bdb9222 Sofia Papagiannaki
# The maximum number or items returned by the listing api methods
187 3bdb9222 Sofia Papagiannaki
API_LIST_LIMIT = getattr(settings, 'PITHOS_API_LIST_LIMIT', 10000)
188 369a7b41 Sofia Papagiannaki
189 369a7b41 Sofia Papagiannaki
# The backend block size
190 369a7b41 Sofia Papagiannaki
BACKEND_BLOCK_SIZE = getattr(
191 369a7b41 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_BLOCK_SIZE', 4 * 1024 * 1024)
192 369a7b41 Sofia Papagiannaki
193 369a7b41 Sofia Papagiannaki
# The backend block hash algorithm
194 369a7b41 Sofia Papagiannaki
BACKEND_HASH_ALGORITHM = getattr(
195 369a7b41 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_HASH_ALGORITHM', 'sha256')
196 14569c60 Sofia Papagiannaki
197 6f65ba13 Sofia Papagiannaki
# Set the credentials (client identifier, client secret) issued for
198 6f65ba13 Sofia Papagiannaki
# authenticating the views with astakos during the resource access token
199 6f65ba13 Sofia Papagiannaki
# generation procedure
200 fe7d0186 Sofia Papagiannaki
OAUTH2_CLIENT_CREDENTIALS = getattr(settings,
201 fe7d0186 Sofia Papagiannaki
                                    'PITHOS_OAUTH2_CLIENT_CREDENTIALS',
202 fe7d0186 Sofia Papagiannaki
                                    (None, None))
203 46662ee6 Kostas Papadimitriou
204 46662ee6 Kostas Papadimitriou
# Set domain to restrict requests of pithos object contents serve endpoint or
205 46662ee6 Kostas Papadimitriou
# None for no domain restriction
206 4bf0ab85 Sofia Papagiannaki
UNSAFE_DOMAIN = getattr(settings, 'PITHOS_UNSAFE_DOMAIN', None)