Browse Source

Return all metadata validation errors at the same time

tags/v1.0
JustAnotherArchivist 1 year ago
parent
commit
fb8af13c15
1 changed files with 9 additions and 5 deletions
  1. +9
    -5
      codearchiver/core.py

+ 9
- 5
codearchiver/core.py View File

@@ -123,19 +123,23 @@ class Metadata(list[tuple[str, str]]):

permittedKeys = set(field.key for field in self._allFields)
unrecognisedKeys = keys - permittedKeys
if unrecognisedKeys:
raise MetadataValidationError(f'Unrecognised key(s): {", ".join(sorted(unrecognisedKeys))}')

requiredKeys = set(field.key for field in self._allFields if field.required)
missingRequiredKeys = requiredKeys - keys
if missingRequiredKeys:
raise MetadataValidationError(f'Missing required key(s): {", ".join(sorted(missingRequiredKeys))}')

repeatableKeys = set(field.key for field in self._allFields if field.repeatable)
repeatedKeys = set(key for key, count in keyCounts.items() if count > 1)
repeatedUnrepeatableKeys = repeatedKeys - repeatableKeys

errors = []
if unrecognisedKeys:
errors.append(f'unrecognised key(s): {", ".join(sorted(unrecognisedKeys))}')
if missingRequiredKeys:
errors.append(f'missing required key(s): {", ".join(sorted(missingRequiredKeys))}')
if repeatedUnrepeatableKeys:
raise MetadataValidationError(f'Repeated unrepeatable key(s): {", ".join(sorted(repeatedUnrepeatableKeys))}')
errors.append(f'repeated unrepeatable key(s): {", ".join(sorted(repeatedUnrepeatableKeys))}')
if errors:
raise MetadataValidationError('; '.join(errors))

def matches(self, criteria: list[tuple[str, typing.Union[str, tuple[str]]]]) -> bool:
'''


Loading…
Cancel
Save