Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/in_memory.py
Show First 20 Lines • Show All 1,214 Lines • ▼ Show 20 Lines | def origin_visit_update(self, origin, visit_id, status=None, | ||||
return | return | ||||
if status: | if status: | ||||
visit['status'] = status | visit['status'] = status | ||||
if metadata: | if metadata: | ||||
visit['metadata'] = metadata | visit['metadata'] = metadata | ||||
if snapshot: | if snapshot: | ||||
visit['snapshot'] = snapshot | visit['snapshot'] = snapshot | ||||
def origin_visit_upsert(self, visits): | |||||
"""Add a origin_visits with a specific id and with all its data. | |||||
If there is already an origin_visit with the same | |||||
`(origin_id, visit_id)`, updates it instead of inserting a new one. | |||||
Args: | |||||
visits: iterable of dicts with keys: | |||||
origin: Visited Origin id | |||||
visit: origin visit id | |||||
date: timestamp of such visit | |||||
status: Visit's new status | |||||
metadata: Data associated to the visit | |||||
snapshot (sha1_git): identifier of the snapshot to add to | |||||
the visit | |||||
""" | |||||
if self.journal_writer: | |||||
for visit in visits: | |||||
visit = visit.copy() | |||||
visit['origin'] = self.origin_get([{'id': visit['origin']}])[0] | |||||
del visit['origin']['id'] | |||||
self.journal_writer.write_addition('origin_visit', visit) | |||||
for visit in visits: | |||||
origin_id = visit['origin'] | |||||
visit_id = visit['visit'] | |||||
if isinstance(visit['date'], str): | |||||
visit['date'] = dateutil.parser.parse(visit['date']) | |||||
while len(self._origin_visits[origin_id-1]) < visit_id: | |||||
self._origin_visits[origin_id-1].append(None) | |||||
visit = self._origin_visits[origin_id-1][visit_id-1] = visit | |||||
def origin_visit_get(self, origin, last_visit=None, limit=None): | def origin_visit_get(self, origin, last_visit=None, limit=None): | ||||
"""Retrieve all the origin's visit's information. | """Retrieve all the origin's visit's information. | ||||
Args: | Args: | ||||
origin (int): the origin's identifier | origin (int): the origin's identifier | ||||
last_visit (int): visit's id from which listing the next ones, | last_visit (int): visit's id from which listing the next ones, | ||||
default to None | default to None | ||||
limit (int): maximum number of results to return, | limit (int): maximum number of results to return, | ||||
default to None | default to None | ||||
Yields: | Yields: | ||||
List of visits. | List of visits. | ||||
""" | """ | ||||
if origin <= len(self._origin_visits): | if origin <= len(self._origin_visits): | ||||
visits = self._origin_visits[origin-1] | visits = self._origin_visits[origin-1] | ||||
if last_visit is not None: | if last_visit is not None: | ||||
visits = visits[last_visit:] | visits = visits[last_visit:] | ||||
if limit is not None: | if limit is not None: | ||||
visits = visits[:limit] | visits = visits[:limit] | ||||
for visit in visits: | for visit in visits: | ||||
if not visit: | |||||
continue | |||||
visit_id = visit['visit'] | visit_id = visit['visit'] | ||||
yield copy.deepcopy(self._origin_visits[origin-1][visit_id-1]) | yield copy.deepcopy(self._origin_visits[origin-1][visit_id-1]) | ||||
def origin_visit_get_by(self, origin, visit): | def origin_visit_get_by(self, origin, visit): | ||||
"""Retrieve origin visit's information. | """Retrieve origin visit's information. | ||||
Args: | Args: | ||||
origin (int): the origin's identifier | origin (int): the origin's identifier | ||||
▲ Show 20 Lines • Show All 251 Lines • Show Last 20 Lines |