From a361fe54e581610e99991121c1fcaf226aa94ad6 Mon Sep 17 00:00:00 2001 From: JustAnotherArchivist Date: Fri, 10 Mar 2023 13:20:28 +0000 Subject: [PATCH] Add a metadata version field --- codearchiver/core.py | 11 +++++++++++ codearchiver/modules/git.py | 1 + 2 files changed, 12 insertions(+) diff --git a/codearchiver/core.py b/codearchiver/core.py index badcbcf..f5ba43c 100644 --- a/codearchiver/core.py +++ b/codearchiver/core.py @@ -88,6 +88,7 @@ class Metadata(list[tuple[str, str]]): fields: tuple[MetadataField] = ( MetadataField('codearchiver version', required = True, repeatable = False), MetadataField('Module', required = True, repeatable = False), + MetadataField('Metadata version', required = True, repeatable = False), MetadataField('ID', required = True, repeatable = False), MetadataField('Input URL', required = True, repeatable = False), MetadataField('Filename', required = True, repeatable = False), @@ -96,6 +97,9 @@ class Metadata(list[tuple[str, str]]): ) '''The fields for this metadata collection''' + version: int = 0 + '''Version, incremented on every backward-incompatible change''' + _allFieldsCache: typing.Optional[tuple[MetadataField]] = None def append(self, *args): @@ -394,6 +398,13 @@ class Module(metaclass = ModuleMeta): idx = type(self).MetadataClass() idx.append('codearchiver version', codearchiver.version.__version__) idx.append('Module', type(self).name) + metadataVersions = [] + for cls in reversed(type(self).MetadataClass.mro()): + version = cls.__dict__.get('version') + if version is None: + continue + metadataVersions.append(f'{cls.__module__}.{cls.__qualname__}/{version}') + idx.append('Metadata version', ' '.join(metadataVersions)) idx.append('ID', self._id) idx.append('Input URL', self._url) idx.append('Filename', filename) diff --git a/codearchiver/modules/git.py b/codearchiver/modules/git.py index 323d480..b6bfc50 100644 --- a/codearchiver/modules/git.py +++ b/codearchiver/modules/git.py @@ -20,6 +20,7 @@ class GitMetadata(codearchiver.core.Metadata): codearchiver.core.MetadataField(key = 'Root commit', required = True, repeatable = True), codearchiver.core.MetadataField(key = 'Commit', required = False, repeatable = True), ) + version = 0 class Git(codearchiver.core.Module):