Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/in_memory.py
Show First 20 Lines • Show All 923 Lines • ▼ Show 20 Lines | def object_find_by_sha1_git(self, ids, db=None, cur=None): | ||||
'object_id': id_, | 'object_id': id_, | ||||
} for obj in objs] | } for obj in objs] | ||||
return ret | return ret | ||||
def origin_get(self, origins): | def origin_get(self, origins): | ||||
"""Return origins, either all identified by their ids or all | """Return origins, either all identified by their ids or all | ||||
identified by tuples (type, url). | identified by tuples (type, url). | ||||
If the url is given and the type is omitted, one of the origins with | |||||
that url is returned. | |||||
Args: | Args: | ||||
origin: a list of dictionaries representing the individual | origin: a list of dictionaries representing the individual | ||||
origins to find. | origins to find. | ||||
These dicts have either the keys type and url: | These dicts have either the key url (and optionally type): | ||||
- type (FIXME: enum TBD): the origin type ('git', 'wget', ...) | - type (FIXME: enum TBD): the origin type ('git', 'wget', ...) | ||||
- url (bytes): the url the origin points to | - url (bytes): the url the origin points to | ||||
or the id: | or the id: | ||||
- id (int): the origin's identifier | - id (int): the origin's identifier | ||||
Show All 15 Lines | def origin_get(self, origins): | ||||
else: | else: | ||||
return_single = False | return_single = False | ||||
# Sanity check to be error-compatible with the pgsql backend | # Sanity check to be error-compatible with the pgsql backend | ||||
if any('id' in origin for origin in origins) \ | if any('id' in origin for origin in origins) \ | ||||
and not all('id' in origin for origin in origins): | and not all('id' in origin for origin in origins): | ||||
raise ValueError( | raise ValueError( | ||||
'Either all origins or none at all should have an "id".') | 'Either all origins or none at all should have an "id".') | ||||
if any('type' in origin and 'url' in origin for origin in origins) \ | if any('url' in origin for origin in origins) \ | ||||
and not all('type' in origin and 'url' in origin | and not all('url' in origin for origin in origins): | ||||
for origin in origins): | |||||
raise ValueError( | raise ValueError( | ||||
'Either all origins or none at all should have a ' | 'Either all origins or none at all should have ' | ||||
'"type" and an "url".') | 'an "url" key.') | ||||
results = [] | results = [] | ||||
for origin in origins: | for origin in origins: | ||||
if 'id' in origin: | if 'id' in origin: | ||||
origin_id = origin['id'] | origin_id = origin['id'] | ||||
elif 'type' in origin and 'url' in origin: | elif 'url' in origin: | ||||
origin_id = self._origin_id(origin) | origin_id = self._origin_id(origin) | ||||
else: | else: | ||||
raise ValueError( | raise ValueError( | ||||
'Origin must have either id or (type and url).') | 'Origin must have either id or (type and url).') | ||||
origin = None | origin = None | ||||
# self._origin_id can return None | # self._origin_id can return None | ||||
if origin_id is not None and origin_id <= len(self._origins): | if origin_id is not None and origin_id <= len(self._origins): | ||||
origin = copy.deepcopy(self._origins[origin_id-1]) | origin = copy.deepcopy(self._origins[origin_id-1]) | ||||
▲ Show 20 Lines • Show All 520 Lines • ▼ Show 20 Lines | def metadata_provider_get_by(self, provider, db=None, cur=None): | ||||
key = self._metadata_provider_key({ | key = self._metadata_provider_key({ | ||||
'name': provider['provider_name'], | 'name': provider['provider_name'], | ||||
'url': provider['provider_url']}) | 'url': provider['provider_url']}) | ||||
return self._metadata_providers.get(key) | return self._metadata_providers.get(key) | ||||
def _origin_id(self, origin): | def _origin_id(self, origin): | ||||
origin_id = None | origin_id = None | ||||
for stored_origin in self._origins: | for stored_origin in self._origins: | ||||
if stored_origin['type'] == origin['type'] and \ | if stored_origin['url'] == origin['url'] \ | ||||
stored_origin['url'] == origin['url']: | and ('type' not in origin | ||||
or stored_origin['type'] == origin['type']): | |||||
origin_id = stored_origin['id'] | origin_id = stored_origin['id'] | ||||
break | break | ||||
return origin_id | return origin_id | ||||
def _person_add(self, person): | def _person_add(self, person): | ||||
"""Add a person in storage. | """Add a person in storage. | ||||
Note: Private method, do not use outside of this class. | Note: Private method, do not use outside of this class. | ||||
Show All 29 Lines |