|
|
@@ -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: |
|
|
|
''' |
|
|
|