diff --git a/codearchiver/core.py b/codearchiver/core.py index 35a7d89..badcbcf 100644 --- a/codearchiver/core.py +++ b/codearchiver/core.py @@ -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: '''