RangeNotSatisfiable, InternalServerError, NotImplemented)
from pithos.api.short_url import encode_url
from pithos.api.settings import (BACKEND_DB_MODULE, BACKEND_DB_CONNECTION,
- BACKEND_BLOCK_MODULE, BACKEND_BLOCK_PATH,
- BACKEND_BLOCK_UMASK,
- BACKEND_QUEUE_MODULE, BACKEND_QUEUE_CONNECTION,
- BACKEND_QUOTA, BACKEND_VERSIONING,
- AUTHENTICATION_URL, AUTHENTICATION_USERS,
- SERVICE_TOKEN, COOKIE_NAME)
+ BACKEND_BLOCK_MODULE, BACKEND_BLOCK_PATH,
+ BACKEND_BLOCK_UMASK,
+ BACKEND_QUEUE_MODULE, BACKEND_QUEUE_CONNECTION,
+ BACKEND_QUOTA, BACKEND_VERSIONING,
+ AUTHENTICATION_URL, AUTHENTICATION_USERS,
+ SERVICE_TOKEN, COOKIE_NAME)
from pithos.backends import connect_backend
from pithos.backends.base import NotAllowedError, QuotaError, ItemNotExists, VersionNotExists
if request.serialization == 'json':
return json.dumps(l)
+
+from pithos.backends.util import PithosBackendPool
+POOL_SIZE = 5
+
+
+_pithos_backend_pool = PithosBackendPool(size=POOL_SIZE,
+ db_module=BACKEND_DB_MODULE,
+ db_connection=BACKEND_DB_CONNECTION,
+ block_module=BACKEND_BLOCK_MODULE,
+ block_path=BACKEND_BLOCK_PATH,
+ block_umask=BACKEND_BLOCK_UMASK,
+ queue_module=BACKEND_QUEUE_MODULE,
+ queue_connection=BACKEND_QUEUE_CONNECTION)
+
+
def get_backend():
- backend = connect_backend(db_module=BACKEND_DB_MODULE,
- db_connection=BACKEND_DB_CONNECTION,
- block_module=BACKEND_BLOCK_MODULE,
- block_path=BACKEND_BLOCK_PATH,
- block_umask=BACKEND_BLOCK_UMASK,
- queue_module=BACKEND_QUEUE_MODULE,
- queue_connection=BACKEND_QUEUE_CONNECTION)
+ backend = _pithos_backend_pool.pool_get()
backend.default_policy['quota'] = BACKEND_QUOTA
backend.default_policy['versioning'] = BACKEND_VERSIONING
+ backend.messages = []
return backend
+
def update_request_headers(request):
# Handle URL-encoded keys and values.
meta = dict([(k, v) for k, v in request.META.iteritems() if k.startswith('HTTP_')])
return 'text'
+
def api_method(http_method=None, format_allowed=False, user_required=True):
"""Decorator function for views that implement an API method."""
update_response_headers(request, response)
return response
except Fault, fault:
+ if fault.code >= 500:
+ logger.exception("API Fault")
return render_fault(request, fault)
except BaseException, e:
logger.exception('Unexpected error: %s' % e)