Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/cassandra/converters.py
# Copyright (C) 2019-2020 The Software Heritage developers | # Copyright (C) 2019-2020 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from copy import deepcopy | from copy import deepcopy | ||||
import datetime | import datetime | ||||
import json | import json | ||||
from typing import Dict, Tuple | from typing import Dict, Tuple | ||||
import attr | import attr | ||||
from swh.model.hashutil import DEFAULT_ALGORITHMS | from swh.model.hashutil import DEFAULT_ALGORITHMS | ||||
from swh.model.model import ( | from swh.model.model import ( | ||||
CoreSWHID, | |||||
ExtendedSWHID, | |||||
MetadataAuthority, | |||||
MetadataAuthorityType, | |||||
MetadataFetcher, | |||||
ObjectType, | ObjectType, | ||||
OriginVisit, | OriginVisit, | ||||
OriginVisitStatus, | OriginVisitStatus, | ||||
RawExtrinsicMetadata, | |||||
Release, | Release, | ||||
Revision, | Revision, | ||||
RevisionType, | RevisionType, | ||||
Sha1Git, | Sha1Git, | ||||
) | ) | ||||
from ..utils import remove_keys | from ..utils import map_optional, remove_keys | ||||
from .model import OriginVisitRow, OriginVisitStatusRow, ReleaseRow, RevisionRow | from .model import ( | ||||
OriginVisitRow, | |||||
OriginVisitStatusRow, | |||||
RawExtrinsicMetadataRow, | |||||
ReleaseRow, | |||||
RevisionRow, | |||||
) | |||||
def revision_to_db(revision: Revision) -> RevisionRow: | def revision_to_db(revision: Revision) -> RevisionRow: | ||||
# we use a deepcopy of the dict because we do not want to recurse the | # we use a deepcopy of the dict because we do not want to recurse the | ||||
# Model->dict conversion (to keep Timestamp & al. entities), BUT we do not | # Model->dict conversion (to keep Timestamp & al. entities), BUT we do not | ||||
# want to modify original metadata (embedded in the Model entity), so we | # want to modify original metadata (embedded in the Model entity), so we | ||||
# non-recursively convert it as a dict but make a deep copy. | # non-recursively convert it as a dict but make a deep copy. | ||||
db_revision = deepcopy(attr.asdict(revision, recurse=False)) | db_revision = deepcopy(attr.asdict(revision, recurse=False)) | ||||
▲ Show 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | return OriginVisitStatus.from_dict( | ||||
"metadata": (json.loads(row.metadata) if row.metadata else None), | "metadata": (json.loads(row.metadata) if row.metadata else None), | ||||
} | } | ||||
) | ) | ||||
def visit_status_to_row(status: OriginVisitStatus) -> OriginVisitStatusRow: | def visit_status_to_row(status: OriginVisitStatus) -> OriginVisitStatusRow: | ||||
d = status.to_dict() | d = status.to_dict() | ||||
return OriginVisitStatusRow.from_dict({**d, "metadata": json.dumps(d["metadata"])}) | return OriginVisitStatusRow.from_dict({**d, "metadata": json.dumps(d["metadata"])}) | ||||
def row_to_raw_extrinsic_metadata(row: RawExtrinsicMetadataRow) -> RawExtrinsicMetadata: | |||||
discovery_date = row.discovery_date.replace(tzinfo=datetime.timezone.utc) | |||||
return RawExtrinsicMetadata( | |||||
target=ExtendedSWHID.from_string(row.target), | |||||
authority=MetadataAuthority( | |||||
type=MetadataAuthorityType(row.authority_type), url=row.authority_url, | |||||
), | |||||
fetcher=MetadataFetcher(name=row.fetcher_name, version=row.fetcher_version,), | |||||
discovery_date=discovery_date, | |||||
format=row.format, | |||||
metadata=row.metadata, | |||||
origin=row.origin, | |||||
visit=row.visit, | |||||
snapshot=map_optional(CoreSWHID.from_string, row.snapshot), | |||||
release=map_optional(CoreSWHID.from_string, row.release), | |||||
revision=map_optional(CoreSWHID.from_string, row.revision), | |||||
path=row.path, | |||||
directory=map_optional(CoreSWHID.from_string, row.directory), | |||||
) |