diff --git a/swh/journal/serializers.py b/swh/journal/serializers.py --- a/swh/journal/serializers.py +++ b/swh/journal/serializers.py @@ -12,9 +12,12 @@ from swh.model.model import ( Content, Directory, + MetadataAuthority, + MetadataFetcher, Origin, OriginVisit, OriginVisitStatus, + RawExtrinsicMetadata, Release, Revision, SkippedContent, @@ -24,9 +27,12 @@ ModelObject = Union[ Content, Directory, + MetadataAuthority, + MetadataFetcher, Origin, OriginVisit, OriginVisitStatus, + RawExtrinsicMetadata, Release, Revision, SkippedContent, @@ -54,7 +60,14 @@ @overload def object_key( - object_type: str, object_: Union[OriginVisit, OriginVisitStatus] + object_type: str, + object_: Union[ + MetadataAuthority, + MetadataFetcher, + OriginVisit, + OriginVisitStatus, + RawExtrinsicMetadata, + ], ) -> Dict[str, str]: ... @@ -79,6 +92,26 @@ "visit": str(object_.visit), "date": str(object_.date), } + elif object_type == "metadata_authority": + return { + "type": object_.type.value, + "url": object_.url, + } + elif object_type == "metadata_fetcher": + return { + "name": object_.name, + "version": object_.version, + } + elif object_type == "raw_extrinsic_metadata": + return { + "type": object_.type.value, + "id": str(object_.id), + "authority_type": object_.authority.type.value, + "authority_url": object_.authority.url, + "discovery_date": str(object_.discovery_date), + "fetcher_name": object_.fetcher.name, + "fetcher_version": object_.fetcher.version, + } else: raise ValueError("Unknown object type: %s." % object_type) diff --git a/swh/journal/tests/journal_data.py b/swh/journal/tests/journal_data.py --- a/swh/journal/tests/journal_data.py +++ b/swh/journal/tests/journal_data.py @@ -9,18 +9,24 @@ import attr -from swh.model.hashutil import MultiHash, hash_to_bytes +from swh.model.hashutil import MultiHash, hash_to_bytes, hash_to_hex from swh.journal.serializers import ModelObject +from swh.model.identifiers import SWHID from swh.model.model import ( Content, Directory, DirectoryEntry, + MetadataAuthority, + MetadataAuthorityType, + MetadataFetcher, + MetadataTargetType, ObjectType, Origin, OriginVisit, OriginVisitStatus, Person, + RawExtrinsicMetadata, Release, Revision, RevisionType, @@ -288,12 +294,47 @@ ] +METADATA_AUTHORITIES = [ + MetadataAuthority( + type=MetadataAuthorityType.FORGE, url="http://example.org/", metadata={}, + ), +] + +METADATA_FETCHERS = [ + MetadataFetcher(name="test-fetcher", version="1.0.0", metadata={},) +] + +RAW_EXTRINSIC_METADATA = [ + RawExtrinsicMetadata( + type=MetadataTargetType.ORIGIN, + id="http://example.org/foo.git", + discovery_date=datetime.datetime(2020, 7, 30, 17, 8, 20, tzinfo=UTC), + authority=attr.evolve(METADATA_AUTHORITIES[0], metadata=None), + fetcher=attr.evolve(METADATA_FETCHERS[0], metadata=None), + format="json", + metadata=b'{"foo": "bar"}', + ), + RawExtrinsicMetadata( + type=MetadataTargetType.CONTENT, + id=SWHID(object_type="content", object_id=hash_to_hex(CONTENTS[0].sha1_git)), + discovery_date=datetime.datetime(2020, 7, 30, 17, 8, 20, tzinfo=UTC), + authority=attr.evolve(METADATA_AUTHORITIES[0], metadata=None), + fetcher=attr.evolve(METADATA_FETCHERS[0], metadata=None), + format="json", + metadata=b'{"foo": "bar"}', + ), +] + + TEST_OBJECTS: Dict[str, Sequence[ModelObject]] = { "content": CONTENTS, "directory": DIRECTORIES, + "metadata_authority": METADATA_AUTHORITIES, + "metadata_fetcher": METADATA_FETCHERS, "origin": ORIGINS, "origin_visit": ORIGIN_VISITS, "origin_visit_status": ORIGIN_VISIT_STATUSES, + "raw_extrinsic_metadata": RAW_EXTRINSIC_METADATA, "release": RELEASES, "revision": REVISIONS, "snapshot": SNAPSHOTS, diff --git a/swh/journal/tests/test_pytest_plugin.py b/swh/journal/tests/test_pytest_plugin.py --- a/swh/journal/tests/test_pytest_plugin.py +++ b/swh/journal/tests/test_pytest_plugin.py @@ -54,9 +54,12 @@ "object_types": { "content", "directory", + "metadata_authority", + "metadata_fetcher", "origin", "origin_visit", "origin_visit_status", + "raw_extrinsic_metadata", "release", "revision", "snapshot",