Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / settings.py @ fda50d75

History | View | Annotate | Download (8.3 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 fda50d75 Chrysostomos Nanakos
# Archipelago Configuration File
142 fda50d75 Chrysostomos Nanakos
BACKEND_ARCHIPELAGO_CONF = getattr(
143 fda50d75 Chrysostomos Nanakos
        settings, 'PITHOS_BACKEND_ARCHIPELAGO_CONF',
144 fda50d75 Chrysostomos Nanakos
        '/etc/archipelago/archipelago.conf')
145 fda50d75 Chrysostomos Nanakos
146 a7dff008 Antony Chazapis
# Queue for billing.
147 29148653 Sofia Papagiannaki
BACKEND_QUEUE_MODULE = getattr(settings, 'PITHOS_BACKEND_QUEUE_MODULE', None)
148 29148653 Sofia Papagiannaki
# Example: 'pithos.backends.lib.rabbitmq'
149 29148653 Sofia Papagiannaki
150 29148653 Sofia Papagiannaki
BACKEND_QUEUE_HOSTS = getattr(settings, 'PITHOS_BACKEND_QUEUE_HOSTS', None)
151 29148653 Sofia Papagiannaki
# Example: "['amqp://guest:guest@localhost:5672']"
152 29148653 Sofia Papagiannaki
153 29148653 Sofia Papagiannaki
BACKEND_QUEUE_EXCHANGE = getattr(settings, 'PITHOS_BACKEND_QUEUE_EXCHANGE',
154 29148653 Sofia Papagiannaki
                                 'pithos')
155 a7dff008 Antony Chazapis
156 a7dff008 Antony Chazapis
# Default setting for new accounts.
157 19ddd41b Sofia Papagiannaki
BACKEND_ACCOUNT_QUOTA = getattr(
158 19ddd41b Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_ACCOUNT_QUOTA', 50 * 1024 * 1024 * 1024)
159 19ddd41b Sofia Papagiannaki
BACKEND_CONTAINER_QUOTA = getattr(
160 c72c19e4 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_CONTAINER_QUOTA', 0)
161 a7dff008 Antony Chazapis
BACKEND_VERSIONING = getattr(settings, 'PITHOS_BACKEND_VERSIONING', 'auto')
162 29148653 Sofia Papagiannaki
BACKEND_FREE_VERSIONING = getattr(settings, 'PITHOS_BACKEND_FREE_VERSIONING',
163 29148653 Sofia Papagiannaki
                                  True)
164 a7dff008 Antony Chazapis
165 74cbb94a Sofia Papagiannaki
# Enable backend pooling
166 74cbb94a Sofia Papagiannaki
BACKEND_POOL_ENABLED = getattr(settings, 'PITHOS_BACKEND_POOL_ENABLED', True)
167 74cbb94a Sofia Papagiannaki
168 61c5b615 Sofia Papagiannaki
# Default backend pool size
169 61c5b615 Sofia Papagiannaki
BACKEND_POOL_SIZE = getattr(settings, 'PITHOS_BACKEND_POOL_SIZE', 5)
170 61c5b615 Sofia Papagiannaki
171 591e1df0 Sofia Papagiannaki
# Update object checksums.
172 591e1df0 Sofia Papagiannaki
UPDATE_MD5 = getattr(settings, 'PITHOS_UPDATE_MD5', False)
173 8efd183f Antony Chazapis
174 47462eda Filippos Giannakos
RADOS_STORAGE = getattr(settings, 'PITHOS_RADOS_STORAGE', False)
175 29148653 Sofia Papagiannaki
RADOS_POOL_BLOCKS = getattr(settings, 'PITHOS_RADOS_POOL_BLOCKS', 'blocks')
176 47462eda Filippos Giannakos
RADOS_POOL_MAPS = getattr(settings, 'PITHOS_RADOS_POOL_MAPS', 'maps')
177 61ae9b74 Sofia Papagiannaki
178 61ae9b74 Sofia Papagiannaki
# This enables a ui compatibility layer for the introduction of UUIDs in
179 61ae9b74 Sofia Papagiannaki
# identity management.  WARNING: Setting to True will break your installation.
180 61ae9b74 Sofia Papagiannaki
TRANSLATE_UUIDS = getattr(settings, 'PITHOS_TRANSLATE_UUIDS', False)
181 61ae9b74 Sofia Papagiannaki
182 29148653 Sofia Papagiannaki
# Set how many random bytes to use for constructing the URL
183 29148653 Sofia Papagiannaki
# of Pithos public files
184 29148653 Sofia Papagiannaki
PUBLIC_URL_SECURITY = getattr(settings, 'PITHOS_PUBLIC_URL_SECURITY', 16)
185 4a105ce2 Sofia Papagiannaki
# Set the alphabet to use for constructing the URL of Pithos public files
186 29148653 Sofia Papagiannaki
PUBLIC_URL_ALPHABET = getattr(
187 56f3c759 Sofia Papagiannaki
    settings,
188 56f3c759 Sofia Papagiannaki
    'PITHOS_PUBLIC_URL_ALPHABET',
189 29148653 Sofia Papagiannaki
    '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
190 3bdb9222 Sofia Papagiannaki
191 3bdb9222 Sofia Papagiannaki
# The maximum number or items returned by the listing api methods
192 3bdb9222 Sofia Papagiannaki
API_LIST_LIMIT = getattr(settings, 'PITHOS_API_LIST_LIMIT', 10000)
193 369a7b41 Sofia Papagiannaki
194 369a7b41 Sofia Papagiannaki
# The backend block size
195 369a7b41 Sofia Papagiannaki
BACKEND_BLOCK_SIZE = getattr(
196 369a7b41 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_BLOCK_SIZE', 4 * 1024 * 1024)
197 369a7b41 Sofia Papagiannaki
198 369a7b41 Sofia Papagiannaki
# The backend block hash algorithm
199 369a7b41 Sofia Papagiannaki
BACKEND_HASH_ALGORITHM = getattr(
200 369a7b41 Sofia Papagiannaki
    settings, 'PITHOS_BACKEND_HASH_ALGORITHM', 'sha256')
201 14569c60 Sofia Papagiannaki
202 6f65ba13 Sofia Papagiannaki
# Set the credentials (client identifier, client secret) issued for
203 6f65ba13 Sofia Papagiannaki
# authenticating the views with astakos during the resource access token
204 6f65ba13 Sofia Papagiannaki
# generation procedure
205 fe7d0186 Sofia Papagiannaki
OAUTH2_CLIENT_CREDENTIALS = getattr(settings,
206 fe7d0186 Sofia Papagiannaki
                                    'PITHOS_OAUTH2_CLIENT_CREDENTIALS',
207 fe7d0186 Sofia Papagiannaki
                                    (None, None))
208 46662ee6 Kostas Papadimitriou
209 46662ee6 Kostas Papadimitriou
# Set domain to restrict requests of pithos object contents serve endpoint or
210 46662ee6 Kostas Papadimitriou
# None for no domain restriction
211 4bf0ab85 Sofia Papagiannaki
UNSAFE_DOMAIN = getattr(settings, 'PITHOS_UNSAFE_DOMAIN', None)