From fb8af13c15ee99f0ae95dfb13784cedf286d2ce2 Mon Sep 17 00:00:00 2001 From: JustAnotherArchivist Date: Fri, 10 Mar 2023 11:41:09 +0000 Subject: [PATCH] Return all metadata validation errors at the same time --- codearchiver/core.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) 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: '''