Skip to content

Commit a43a231

Browse files
fix: 🐛 sort and deduplicate issues before raising error (#206)
# Description This PR moves issue sorting and deduplication before raising an error (when `error=True`). Otherwise, the error message has unsorted, potentially repeated errors. Needs a quick review. ## Checklist - [x] Formatted Markdown - [x] Ran `just run-all` --------- Co-authored-by: Luke W. Johnston <lwjohnst86@users.noreply.github.com>
1 parent 0d93390 commit a43a231

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/check_datapackage/check.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,12 @@ class for more details, especially about the default values.
8989
issues = _check_object_against_json_schema(properties, schema)
9090
issues += apply_extensions(properties, config.extensions)
9191
issues = exclude(issues, config.exclusions, properties)
92+
issues = sorted(set(issues))
9293

9394
if error and issues:
9495
raise DataPackageError(issues)
9596

96-
return sorted(set(issues))
97+
return issues
9798

9899

99100
def _set_should_fields_to_required(schema: dict[str, Any]) -> dict[str, Any]:

tests/test_check.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
example_resource_properties,
1111
)
1212
from check_datapackage.exclusion import Exclusion
13-
from check_datapackage.extensions import Extensions
13+
from check_datapackage.extensions import Extensions, RequiredCheck
1414
from check_datapackage.internals import _map
1515
from tests.test_extensions import lowercase_check
1616

@@ -636,3 +636,19 @@ def test_error_as_true():
636636

637637
with raises(DataPackageError):
638638
check(properties, error=True)
639+
640+
641+
def test_error_true_no_duplicate_issues():
642+
resources_required = RequiredCheck(
643+
jsonpath="$.resources",
644+
message="'resources' is a required property",
645+
)
646+
647+
with raises(DataPackageError) as error:
648+
check(
649+
{},
650+
error=True,
651+
config=Config(extensions=Extensions(required_checks=[resources_required])),
652+
)
653+
654+
assert str(error).count(resources_required.message) == 1

0 commit comments

Comments
 (0)