diff --git a/swh/storage/cassandra/storage.py b/swh/storage/cassandra/storage.py --- a/swh/storage/cassandra/storage.py +++ b/swh/storage/cassandra/storage.py @@ -870,11 +870,10 @@ return converters.row_to_visit(min(rows, key=key)) return None - def origin_visit_get_by(self, origin: str, visit: int) -> Optional[Dict[str, Any]]: + def origin_visit_get_by(self, origin: str, visit: int) -> Optional[OriginVisit]: row = self._cql_runner.origin_visit_get_one(origin, visit) if row: - visit_ = self._format_origin_visit_row(row) - return self._origin_visit_apply_last_status(visit_) + return converters.row_to_visit(row) return None def origin_visit_get_latest( diff --git a/swh/storage/in_memory.py b/swh/storage/in_memory.py --- a/swh/storage/in_memory.py +++ b/swh/storage/in_memory.py @@ -898,14 +898,13 @@ return visit return None - def origin_visit_get_by(self, origin: str, visit: int) -> Optional[Dict[str, Any]]: + def origin_visit_get_by(self, origin: str, visit: int) -> Optional[OriginVisit]: origin_url = self._get_origin_url(origin) if origin_url in self._origin_visits and visit <= len( self._origin_visits[origin_url] ): - visit_update = self._origin_visit_get_updated(origin_url, visit) - assert visit_update is not None - return visit_update + found_visit, _ = self._origin_visit_status_get_latest(origin, visit) + return found_visit return None def origin_visit_get_latest( diff --git a/swh/storage/interface.py b/swh/storage/interface.py --- a/swh/storage/interface.py +++ b/swh/storage/interface.py @@ -832,7 +832,7 @@ ... @remote_api_endpoint("origin/visit/getby") - def origin_visit_get_by(self, origin: str, visit: int) -> Optional[Dict[str, Any]]: + def origin_visit_get_by(self, origin: str, visit: int) -> Optional[OriginVisit]: """Retrieve origin visit's information. Args: @@ -840,7 +840,7 @@ visit: visit id Returns: - The information on that particular (origin, visit) or None if + The information on that particular OriginVisit or None if it does not exist """ diff --git a/swh/storage/storage.py b/swh/storage/storage.py --- a/swh/storage/storage.py +++ b/swh/storage/storage.py @@ -913,10 +913,16 @@ @db_transaction(statement_timeout=500) def origin_visit_get_by( self, origin: str, visit: int, db=None, cur=None - ) -> Optional[Dict[str, Any]]: + ) -> Optional[OriginVisit]: row = db.origin_visit_get(origin, visit, cur) if row: - return dict(zip(db.origin_visit_get_cols, row)) + row_d = dict(zip(db.origin_visit_get_cols, row)) + return OriginVisit( + origin=row_d["origin"], + visit=row_d["visit"], + date=row_d["date"], + type=row_d["type"], + ) return None @timed diff --git a/swh/storage/tests/test_storage.py b/swh/storage/tests/test_storage.py --- a/swh/storage/tests/test_storage.py +++ b/swh/storage/tests/test_storage.py @@ -1875,35 +1875,18 @@ ] ) - expected_origin_visit = origin_visit1.to_dict() - expected_origin_visit.update( - { - "origin": origin_url, - "visit": origin_visit1.visit, - "date": sample_data.date_visit2, - "type": sample_data.type_visit2, - "metadata": visit1_metadata, - "status": "full", - "snapshot": snapshot.id, - } - ) + actual_visit = swh_storage.origin_visit_get_by(origin_url, origin_visit1.visit) - # when - actual_origin_visit1 = swh_storage.origin_visit_get_by( - origin_url, origin_visit1.visit - ) - - # then - assert actual_origin_visit1 == expected_origin_visit + assert actual_visit == origin_visit1 - def test_origin_visit_get_by__unknown_origin(self, swh_storage): - assert swh_storage.origin_visit_get_by("foo", 10) is None + def test_origin_visit_get_by__no_result(self, swh_storage, sample_data): + actual_visit = swh_storage.origin_visit_get_by("unknown", 10) # unknown origin + assert actual_visit is None - def test_origin_visit_get_by_no_result(self, swh_storage, sample_data): origin = sample_data.origin swh_storage.origin_add([origin]) - actual_origin_visit = swh_storage.origin_visit_get_by(origin.url, 999) - assert actual_origin_visit is None + actual_visit = swh_storage.origin_visit_get_by(origin.url, 999) # unknown visit + assert actual_visit is None def test_origin_visit_get_latest_none(self, swh_storage, sample_data): """Origin visit get latest on unknown objects should return nothing