def get_elements(protocol, data_type, data_scope, _id=None, **kwargs): storage = Middleware.get_middleware( protocol, data_type, data_scope, **kwargs ) storage.connect() return storage.get_elements(ids=_id) or []
def remove_elements( protocol, data_type, data_scope, _id=None, _filter=None, **kwargs ): storage = Middleware.get_middleware( protocol, data_type, data_scope, **kwargs ) storage.connect() storage.remove_elements(ids=_id, _filter=_filter)
def put_element( protocol, data_type, data_scope, _id=None, element=None, **kwargs ): storage = Middleware.get_middleware( protocol, data_type, data_scope, **kwargs ) storage.connect() if not storage.put_element(element, _id=_id): return HTTPError(500, 'Impossible to put element in storage')
def test_get_middleware(self): protocol = TestUnregisteredMiddleware.__protocol__ self.assertRaises( Middleware.Error, Middleware.get_middleware, protocol=protocol) protocol = TestRegisteredMiddleware.__protocol__ middleware = Middleware.get_middleware(protocol=protocol) self.assertEqual(type(middleware), TestRegisteredMiddleware) self.assertEqual(middleware.data_scope, DEFAULT_DATA_SCOPE) data_type = None middleware = Middleware.get_middleware( protocol=protocol, data_type=data_type) self.assertEqual(type(middleware), TestRegisteredMiddleware) self.assertEqual(middleware.data_scope, DEFAULT_DATA_SCOPE) data_scope = 'test' data_type = TestRegisteredWithDataTypeMiddleware.__datatype__ middleware = Middleware.get_middleware( protocol=protocol, data_type=data_type, data_scope=data_scope) self.assertEqual(middleware.data_scope, data_scope) self.assertEqual( type(middleware), TestRegisteredWithDataTypeMiddleware)
def find_elements( protocol, data_type, data_scope, query=None, projection=None, limit=0, skip=0, sort=None, with_count=False, **kwargs ): storage = Middleware.get_middleware( protocol, data_type, data_scope, **kwargs ) storage.connect() total = storage.count_elements(query=query) result = storage.find_elements( query=query, projection=projection, limit=limit, skip=skip, sort=sort, with_count=with_count ) return result, total
def get_middleware( self, protocol, data_type=None, data_scope=None, auto_connect=None, shared=None, sharing_scope=None, *args, **kwargs ): """ Load a middleware related to input uri. If shared, the result instance is shared among sharing_scope, protocol, data_type and data_scope. :param protocol: protocol to use :type protocol: str :param data_type: data type to use :type data_type: str :param data_scope: data scope to use :type data_scope: str :param auto_connect: middleware auto_connect parameter :type auto_connect: bool :param shared: if True, the result is a shared middleware instance among managers of the same class. If None, use self.shared. :type shared: bool :param sharing_scope: scope sharing :type sharing_scope: bool :return: middleware instance corresponding to input uri and data_scope. :rtype: Middleware """ # force data_scope to be self.data_scope if not None if self.data_scope is not None: data_scope = self.data_scope if auto_connect is None: auto_connect = self.auto_connect if shared is None: shared = self.shared if sharing_scope is None: sharing_scope = self.sharing_scope if shared: protocols = MiddlewareRegistry.__MIDDLEWARES__.setdefault(sharing_scope, {}) data_types = protocols.setdefault(protocol, {}) data_scopes = data_types.setdefault(data_type, {}) try: result = data_scopes.setdefault( data_scope, Middleware.get_middleware( protocol=protocol, data_type=data_type, data_scope=data_scope, auto_connect=auto_connect, *args, **kwargs ), ) except Exception: # clean memory in case of error if not data_scopes: del data_types[data_type] if not data_types: del protocols[protocol] if not protocols: del MiddlewareRegistry.__MIDDLEWARES__[sharing_scope] # and raise back exception raise else: # get a new middleware instance result = Middleware.get_middleware( protocol=protocol, data_type=data_type, data_scope=data_scope, auto_connect=auto_connect, *args, **kwargs ) if hasattr(result, MiddlewareRegistry.DB) and self.db is not None: result.db = self.db return result