From cff77966be71f1e82023909723effb2c367541e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Signe=20Kirk=20Br=C3=B8db=C3=A6k?= Date: Tue, 14 Oct 2025 16:31:03 +0200 Subject: [PATCH 1/7] refactor: :truck: `Rule` -> `CustomCheck` Along with general rephrasing of "rule(s)" to "check(s)". --- _quarto.yml | 2 +- docs/design/interface.qmd | 10 +++--- docs/guide/config.qmd | 37 ++++++++++---------- src/check_datapackage/__init__.py | 4 +-- src/check_datapackage/check.py | 8 ++--- src/check_datapackage/config.py | 8 ++--- src/check_datapackage/rule.py | 56 +++++++++++++++++++------------ tests/test_check.py | 8 ++--- tests/test_rule.py | 38 ++++++++++----------- 9 files changed, 91 insertions(+), 80 deletions(-) diff --git a/_quarto.yml b/_quarto.yml index 7ffc3f86..15e912c6 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -68,8 +68,8 @@ quartodoc: - name: check - name: read_json - name: Config + - name: CustomCheck - name: Exclude - - name: Rule - name: Issue - name: example_package_descriptor - name: example_resource_descriptor diff --git a/docs/design/interface.qmd b/docs/design/interface.qmd index 4152a611..ea78faa5 100644 --- a/docs/design/interface.qmd +++ b/docs/design/interface.qmd @@ -132,11 +132,11 @@ A subitem of `Config` for expressing checks to ignore. See the help documentation with `help(Exclude)` for more details. -#### {{< var wip >}} `Rule` +#### {{< var wip >}} `CustomCheck` Expresses a custom check. -See the help documentation with `help(Rule)` for more details. +See the help documentation with `help(CustomCheck)` for more details. ### {{< var wip >}} `Issue` @@ -163,7 +163,7 @@ flowchart TD read_config["read_config()"] config[/Config/] - rules[/Rules/] + custom_check[/CustomCheck/] exclude[/Exclude/] check["check()"] issues[/"list[Issue]"/] @@ -173,8 +173,8 @@ flowchart TD descriptor_file --> read_json --> descriptor config_file --> read_config --> config - rules & exclude --> config - rules & exclude -.-> config_file + custom_check & exclude --> config + custom_check & exclude -.-> config_file descriptor & config --> check --> issues --> explain --> messages ``` diff --git a/docs/guide/config.qmd b/docs/guide/config.qmd index b353be9f..14bdc7e3 100644 --- a/docs/guide/config.qmd +++ b/docs/guide/config.qmd @@ -12,7 +12,7 @@ on the descriptor. The following configuration options are available: - `version`: The version of Data Package standard to check against. Defaults to `v2`. - `exclude`: The list of checks to exclude. -- `rules`: The list of custom checks to run in addition to the checks +- `custom_checks`: The list of custom checks to run in addition to the checks defined in the standard. - `strict`: Whether to run recommended checks in addition to required ones. Defaults to `False`. @@ -90,16 +90,16 @@ the package and resource properties, and the resource `path` doesn't point to a data file. However, as we have defined exclusions for all of these, the function will flag no issues. -## Adding custom check rules +## Adding custom checks -It is possible to create custom rules in addition to the ones defined in +It is possible to create custom checks in addition to the ones defined in the Data Package standard. Let's say your organisation only accepts Data Packages licensed under -MIT. You can express this requirement in a `Rule` as follows: +MIT. You can express this requirement in a `CustomCheck` as follows: ```{python} -license_rule = cdp.Rule( +license_check = cdp.CustomCheck( type="only-mit", jsonpath="$.licenses[*].name", message=dedent(""" @@ -112,19 +112,18 @@ license_rule = cdp.Rule( Here's a breakdown of what each argument does: -- `type`: An identifier for your rule. This is what will show up in +- `type`: An identifier for your custom check. This is what will show up in error messages and what you will use if you want to exclude your - rule. Each `Rule` should have a unique `type`. -- `jsonpath`: The location of the field or fields, expressed in [JSON - path](https://en.wikipedia.org/wiki/JSONPath) notation, to which the - rule applies. This rule applies to the `name` field of all package + check. Each `CustomCheck` should have a unique `type`. +- `jsonpath`: The location of the field or fields the custom check applies to, expressed in [JSON + path](https://en.wikipedia.org/wiki/JSONPath) notation. This check applies to the `name` field of all package licenses. -- `message`: The message that is shown when the rule is violated. -- `check`: A function that expresses how compliance with the rule is - checked. It takes the value at the `jsonpath` location as input and - returns true if the rule is met, false if it isn't. +- `message`: The message that is shown when the check is violated. +- `check`: A function that expresses the custom check. + It takes the value at the `jsonpath` location as input and + returns true if the check is met, false if it isn't. -To register your custom rules with the `check()` function, you add them +To register your custom checks with the `check()` function, you add them to the `Config` object passed to the function: ```{python} @@ -149,18 +148,18 @@ package_descriptor = { ], } -config = cdp.Config(rules=[license_rule]) +config = cdp.Config(custom_checks=[license_check]) issues = cdp.check(descriptor=package_descriptor, config=config) print(issues) ``` -We can see that the custom rule was applied: `check()` returned one +We can see that the custom check was applied: `check()` returned one issue flagging the first license attached to the Data Package. ## Strict mode -The Data Package standard has both required and recommended rules. By -default, `check()` checks only required rules. Recommended rules can be +The Data Package standard has both requirements and recommendations. By +default, `check()` only checks requirements. Recommendations can be turned on by setting the `strict` argument to `True`. The example below violates the recommendation that the package `name` should contain no special characters. diff --git a/src/check_datapackage/__init__.py b/src/check_datapackage/__init__.py index 2b8b95ef..0335bdbb 100644 --- a/src/check_datapackage/__init__.py +++ b/src/check_datapackage/__init__.py @@ -6,13 +6,13 @@ from .exclude import Exclude from .issue import Issue from .read_json import read_json -from .rule import Rule +from .rule import CustomCheck __all__ = [ "Config", "Exclude", "Issue", - "Rule", + "CustomCheck", "example_package_descriptor", "example_resource_descriptor", "check", diff --git a/src/check_datapackage/check.py b/src/check_datapackage/check.py index 9ce4b64a..a2114105 100644 --- a/src/check_datapackage/check.py +++ b/src/check_datapackage/check.py @@ -17,7 +17,7 @@ ) from check_datapackage.issue import Issue from check_datapackage.read_json import read_json -from check_datapackage.rule import apply_rules +from check_datapackage.rule import apply_custom_checks def check( @@ -46,7 +46,7 @@ class for more details, especially about the default values. _add_resource_recommendations(schema) issues = _check_object_against_json_schema(descriptor, schema) - issues += apply_rules(config.rules, descriptor) + issues += apply_custom_checks(config.custom_checks, descriptor) issues = exclude(issues, config.exclude, descriptor) return sorted(set(issues)) @@ -82,9 +82,9 @@ class SchemaError: Attributes: message (str): The error message generated by `jsonschema`. type (str): The type of the error. - schema_path (str): The path to the violated rule in the JSON schema. + schema_path (str): The path to the violated check in the JSON schema. Path components are separated by '/'. - jsonpath (str): The JSON path to the field that violates the rule. + jsonpath (str): The JSON path to the field that violates the check. parent (Optional[SchemaError]): The error group the error belongs to, if any. """ diff --git a/src/check_datapackage/config.py b/src/check_datapackage/config.py index 52ccbff4..d8b7c411 100644 --- a/src/check_datapackage/config.py +++ b/src/check_datapackage/config.py @@ -2,7 +2,7 @@ from typing import Literal from check_datapackage.exclude import Exclude -from check_datapackage.rule import Rule +from check_datapackage.rule import CustomCheck @dataclass @@ -24,17 +24,17 @@ class Config: import check_datapackage as cdp exclude_required = cdp.Exclude(type="required") - license_rule = cdp.Rule( + license_check = cdp.CustomCheck( type="only-mit", jsonpath="$.licenses[*].name", message="Data Packages may only be licensed under MIT.", check=lambda license_name: license_name == "mit", ) - config = cdp.Config(exclude=[exclude_required], rules=[license_rule]) + config = cdp.Config(exclude=[exclude_required], rules=[license_check]) ``` """ exclude: list[Exclude] = field(default_factory=list) - rules: list[Rule] = field(default_factory=list) + custom_checks: list[CustomCheck] = field(default_factory=list) strict: bool = False version: Literal["v1", "v2"] = "v2" diff --git a/src/check_datapackage/rule.py b/src/check_datapackage/rule.py index 76898bd9..3c73beda 100644 --- a/src/check_datapackage/rule.py +++ b/src/check_datapackage/rule.py @@ -11,25 +11,26 @@ @dataclass -class Rule: +class CustomCheck: """A custom check to be done on a Data Package descriptor. Attributes: - jsonpath (str): The location of the field or fields, expressed in [JSON - path](https://jg-rp.github.io/python-jsonpath/syntax/) notation, to which - the rule applies (e.g., `$.resources[*].name`). - message (str): The message that is shown when the rule is violated. - check (Callable[[Any], bool]): A function that expresses how compliance with the - rule is checked. It takes the value at the `jsonpath` location as input and - returns true if the rule is met, false if it isn't. - type (str): An identifier for the rule. It will be shown in error messages and - can be used to exclude the rule. Each rule should have a unique `type`. + jsonpath (str): The location of the field or fields the custom check applies to, + expressed in [JSON path](https://jg-rp.github.io/python-jsonpath/syntax/) + notation (e.g., `$.resources[*].name`). + message (str): The message shown when the check is violated. + check (Callable[[Any], bool]): A function that expresses the custom check. + It takes the value at the `jsonpath` location as input and + returns true if the check is met, false if it isn't. + type (str): An identifier for the custom check. It will be shown in error + messages and can be used to exclude the check. Each custom check + should have a unique `type`. Examples: ```{python} import check_datapackage as cdp - license_rule = cdp.Rule( + license_check = cdp.CustomCheck( type="only-mit", jsonpath="$.licenses[*].name", message="Data Packages may only be licensed under MIT.", @@ -44,37 +45,48 @@ class Rule: type: str = "custom" -def apply_rules(rules: list[Rule], descriptor: dict[str, Any]) -> list[Issue]: - """Checks the descriptor for all rules and creates issues for fields that fail. +def apply_custom_checks( + custom_checks: list[CustomCheck], descriptor: dict[str, Any] +) -> list[Issue]: + """Checks the descriptor for all custom_checks and creates issues for fields that fail. Args: - rules: The rules to apply to the descriptor. + custom_checks: The custom checks to apply to the descriptor. descriptor: The descriptor to check. Returns: A list of `Issue`s. """ return _flat_map( - rules, - lambda rule: _apply_rule(rule, descriptor), + custom_checks, + lambda custom_check: _apply_custom_check(custom_check, descriptor), ) -def _apply_rule(rule: Rule, descriptor: dict[str, Any]) -> list[Issue]: - """Checks the descriptor against the rule and creates issues for fields that fail. +def _apply_custom_check( + custom_check: CustomCheck, descriptor: dict[str, Any] +) -> list[Issue]: + """Applies the custom check to the descriptor. + + If any fields fail the custom check, this function creates a list of issues + for those fields. Args: - rule: The rule to apply to the descriptor. + custom_check: The custom check to apply to the descriptor. descriptor: The descriptor to check. Returns: A list of `Issue`s. """ - matching_fields = _get_fields_at_jsonpath(rule.jsonpath, descriptor) - failed_fields = _filter(matching_fields, lambda field: not rule.check(field.value)) + matching_fields = _get_fields_at_jsonpath(custom_check.jsonpath, descriptor) + failed_fields = _filter( + matching_fields, lambda field: not custom_check.check(field.value) + ) return _map( failed_fields, lambda field: Issue( - jsonpath=field.jsonpath, type=rule.type, message=rule.message + jsonpath=field.jsonpath, + type=custom_check.type, + message=custom_check.message, ), ) diff --git a/tests/test_check.py b/tests/test_check.py index 40f51b70..df4163c7 100644 --- a/tests/test_check.py +++ b/tests/test_check.py @@ -7,7 +7,7 @@ example_resource_descriptor, ) from check_datapackage.exclude import Exclude -from tests.test_rule import lowercase_rule +from tests.test_rule import lowercase_check # Without recommendations @@ -147,7 +147,7 @@ def test_exclude_not_excluding_rule(): descriptor["name"] = "ALLCAPS" del descriptor["resources"] exclude_required = Exclude(type="required") - config = Config(rules=[lowercase_rule], exclude=[exclude_required]) + config = Config(custom_checks=[lowercase_check], exclude=[exclude_required]) issues = check(descriptor, config=config) @@ -158,8 +158,8 @@ def test_exclude_not_excluding_rule(): def test_exclude_excluding_rule(): descriptor = example_package_descriptor() descriptor["name"] = "ALLCAPS" - exclude_lowercase = Exclude(type=lowercase_rule.type) - config = Config(rules=[lowercase_rule], exclude=[exclude_lowercase]) + exclude_lowercase = Exclude(type=lowercase_check.type) + config = Config(custom_checks=[lowercase_check], exclude=[exclude_lowercase]) issues = check(descriptor, config=config) diff --git a/tests/test_rule.py b/tests/test_rule.py index f8330fd0..31675045 100644 --- a/tests/test_rule.py +++ b/tests/test_rule.py @@ -5,15 +5,15 @@ example_resource_descriptor, ) from check_datapackage.issue import Issue -from check_datapackage.rule import Rule +from check_datapackage.rule import CustomCheck -lowercase_rule = Rule( +lowercase_check = CustomCheck( jsonpath="$.name", message="Name must be lowercase.", check=lambda name: name.islower(), type="lowercase", ) -resource_name_rule = Rule( +resource_name_check = CustomCheck( jsonpath="$.resources[*].name", message="Resource name must start with 'woolly'.", check=lambda name: name.startswith("woolly"), @@ -24,14 +24,14 @@ def test_direct_jsonpath(): descriptor = example_package_descriptor() descriptor["name"] = "ALLCAPS" - config = Config(rules=[lowercase_rule]) + config = Config(custom_checks=[lowercase_check]) issues = check(descriptor, config=config) assert issues == [ Issue( - jsonpath=lowercase_rule.jsonpath, - type=lowercase_rule.type, - message=lowercase_rule.message, + jsonpath=lowercase_check.jsonpath, + type=lowercase_check.type, + message=lowercase_check.message, ) ] @@ -41,14 +41,14 @@ def test_indirect_jsonpath(): descriptor["resources"].append(example_resource_descriptor()) descriptor["resources"][1]["name"] = "not starting with woolly" - config = Config(rules=[resource_name_rule]) + config = Config(custom_checks=[resource_name_check]) issues = check(descriptor, config=config) assert issues == [ Issue( jsonpath="$.resources[1].name", - type=resource_name_rule.type, - message=resource_name_rule.message, + type=resource_name_check.type, + message=resource_name_check.message, ), ] @@ -58,19 +58,19 @@ def test_multiple_rules(): descriptor["name"] = "ALLCAPS" descriptor["resources"][0]["name"] = "not starting with woolly" - config = Config(rules=[lowercase_rule, resource_name_rule]) + config = Config(custom_checks=[lowercase_check, resource_name_check]) issues = check(descriptor, config=config) assert issues == [ Issue( - jsonpath=lowercase_rule.jsonpath, - type=lowercase_rule.type, - message=lowercase_rule.message, + jsonpath=lowercase_check.jsonpath, + type=lowercase_check.type, + message=lowercase_check.message, ), Issue( jsonpath="$.resources[0].name", - type=resource_name_rule.type, - message=resource_name_rule.message, + type=resource_name_check.type, + message=resource_name_check.message, ), ] @@ -79,7 +79,7 @@ def test_rules_and_default_checks(): descriptor = example_package_descriptor() descriptor["name"] = "ALLCAPS" del descriptor["resources"] - config = Config(rules=[lowercase_rule]) + config = Config(custom_checks=[lowercase_check]) issues = check(descriptor, config=config) assert [issue.type for issue in issues] == ["lowercase", "required"] @@ -87,13 +87,13 @@ def test_rules_and_default_checks(): def test_no_matching_jsonpath(): descriptor = example_package_descriptor() - rule = Rule( + rule = CustomCheck( jsonpath="$.missing", message="This check always fails.", check=lambda value: False, type="always-fail", ) - config = Config(rules=[rule]) + config = Config(custom_checks=[rule]) issues = check(descriptor, config=config) assert issues == [] From 23daa986c6871abe436da9c5df2e450bc375942f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Signe=20Kirk=20Br=C3=B8db=C3=A6k?= Date: Tue, 14 Oct 2025 16:37:59 +0200 Subject: [PATCH 2/7] refactor: :truck: rename file from rule to custom_check; fix imports --- src/check_datapackage/__init__.py | 2 +- src/check_datapackage/check.py | 2 +- src/check_datapackage/config.py | 2 +- src/check_datapackage/{rule.py => custom_check.py} | 2 +- tests/test_check.py | 2 +- tests/{test_rule.py => test_custom_check.py} | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename src/check_datapackage/{rule.py => custom_check.py} (96%) rename tests/{test_rule.py => test_custom_check.py} (98%) diff --git a/src/check_datapackage/__init__.py b/src/check_datapackage/__init__.py index 0335bdbb..80c43b14 100644 --- a/src/check_datapackage/__init__.py +++ b/src/check_datapackage/__init__.py @@ -2,11 +2,11 @@ from .check import check from .config import Config +from .custom_check import CustomCheck from .examples import example_package_descriptor, example_resource_descriptor from .exclude import Exclude from .issue import Issue from .read_json import read_json -from .rule import CustomCheck __all__ = [ "Config", diff --git a/src/check_datapackage/check.py b/src/check_datapackage/check.py index a2114105..ea24cb1d 100644 --- a/src/check_datapackage/check.py +++ b/src/check_datapackage/check.py @@ -7,6 +7,7 @@ from check_datapackage.config import Config from check_datapackage.constants import DATA_PACKAGE_SCHEMA_PATH, GROUP_ERRORS +from check_datapackage.custom_check import apply_custom_checks from check_datapackage.exclude import exclude from check_datapackage.internals import ( _add_package_recommendations, @@ -17,7 +18,6 @@ ) from check_datapackage.issue import Issue from check_datapackage.read_json import read_json -from check_datapackage.rule import apply_custom_checks def check( diff --git a/src/check_datapackage/config.py b/src/check_datapackage/config.py index d8b7c411..5177d788 100644 --- a/src/check_datapackage/config.py +++ b/src/check_datapackage/config.py @@ -1,8 +1,8 @@ from dataclasses import dataclass, field from typing import Literal +from check_datapackage.custom_check import CustomCheck from check_datapackage.exclude import Exclude -from check_datapackage.rule import CustomCheck @dataclass diff --git a/src/check_datapackage/rule.py b/src/check_datapackage/custom_check.py similarity index 96% rename from src/check_datapackage/rule.py rename to src/check_datapackage/custom_check.py index 3c73beda..389d3a69 100644 --- a/src/check_datapackage/rule.py +++ b/src/check_datapackage/custom_check.py @@ -48,7 +48,7 @@ class CustomCheck: def apply_custom_checks( custom_checks: list[CustomCheck], descriptor: dict[str, Any] ) -> list[Issue]: - """Checks the descriptor for all custom_checks and creates issues for fields that fail. + """Checks the descriptor for all custom checks and creates issues if any fail. Args: custom_checks: The custom checks to apply to the descriptor. diff --git a/tests/test_check.py b/tests/test_check.py index df4163c7..adaeb2bb 100644 --- a/tests/test_check.py +++ b/tests/test_check.py @@ -7,7 +7,7 @@ example_resource_descriptor, ) from check_datapackage.exclude import Exclude -from tests.test_rule import lowercase_check +from tests.test_custom_check import lowercase_check # Without recommendations diff --git a/tests/test_rule.py b/tests/test_custom_check.py similarity index 98% rename from tests/test_rule.py rename to tests/test_custom_check.py index 31675045..e557ab9a 100644 --- a/tests/test_rule.py +++ b/tests/test_custom_check.py @@ -1,11 +1,11 @@ from check_datapackage.check import check from check_datapackage.config import Config +from check_datapackage.custom_check import CustomCheck from check_datapackage.examples import ( example_package_descriptor, example_resource_descriptor, ) from check_datapackage.issue import Issue -from check_datapackage.rule import CustomCheck lowercase_check = CustomCheck( jsonpath="$.name", From 8eb66565b2e399074dadbf0a236e1a5252e658e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Signe=20Kirk=20Br=C3=B8db=C3=A6k?= Date: Tue, 14 Oct 2025 16:38:38 +0200 Subject: [PATCH 3/7] docs: :pencil2: fix arg in docstring example`rules` -> `custom_checks` --- src/check_datapackage/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/check_datapackage/config.py b/src/check_datapackage/config.py index 5177d788..f56e015e 100644 --- a/src/check_datapackage/config.py +++ b/src/check_datapackage/config.py @@ -30,7 +30,7 @@ class Config: message="Data Packages may only be licensed under MIT.", check=lambda license_name: license_name == "mit", ) - config = cdp.Config(exclude=[exclude_required], rules=[license_check]) + config = cdp.Config(exclude=[exclude_required], custom_checks=[license_check]) ``` """ From 19a0692ba8596e0233ab17087bf32beafe7af462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Signe=20Kirk=20Br=C3=B8db=C3=A6k?= Date: Tue, 14 Oct 2025 19:34:10 +0200 Subject: [PATCH 4/7] style: :art: format `qmd` --- docs/guide/config.qmd | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/guide/config.qmd b/docs/guide/config.qmd index 14bdc7e3..bc3fbe63 100644 --- a/docs/guide/config.qmd +++ b/docs/guide/config.qmd @@ -12,8 +12,8 @@ on the descriptor. The following configuration options are available: - `version`: The version of Data Package standard to check against. Defaults to `v2`. - `exclude`: The list of checks to exclude. -- `custom_checks`: The list of custom checks to run in addition to the checks - defined in the standard. +- `custom_checks`: The list of custom checks to run in addition to the + checks defined in the standard. - `strict`: Whether to run recommended checks in addition to required ones. Defaults to `False`. @@ -92,8 +92,8 @@ these, the function will flag no issues. ## Adding custom checks -It is possible to create custom checks in addition to the ones defined in -the Data Package standard. +It is possible to create custom checks in addition to the ones defined +in the Data Package standard. Let's say your organisation only accepts Data Packages licensed under MIT. You can express this requirement in a `CustomCheck` as follows: @@ -112,16 +112,17 @@ license_check = cdp.CustomCheck( Here's a breakdown of what each argument does: -- `type`: An identifier for your custom check. This is what will show up in - error messages and what you will use if you want to exclude your - check. Each `CustomCheck` should have a unique `type`. -- `jsonpath`: The location of the field or fields the custom check applies to, expressed in [JSON - path](https://en.wikipedia.org/wiki/JSONPath) notation. This check applies to the `name` field of all package - licenses. +- `type`: An identifier for your custom check. This is what will show + up in error messages and what you will use if you want to exclude + your check. Each `CustomCheck` should have a unique `type`. +- `jsonpath`: The location of the field or fields the custom check + applies to, expressed in [JSON + path](https://en.wikipedia.org/wiki/JSONPath) notation. This check + applies to the `name` field of all package licenses. - `message`: The message that is shown when the check is violated. -- `check`: A function that expresses the custom check. - It takes the value at the `jsonpath` location as input and - returns true if the check is met, false if it isn't. +- `check`: A function that expresses the custom check. It takes the + value at the `jsonpath` location as input and returns true if the + check is met, false if it isn't. To register your custom checks with the `check()` function, you add them to the `Config` object passed to the function: From b0c8091398a29792da6a0a9ef527613063684c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Signe=20Kirk=20Br=C3=B8db=C3=A6k?= Date: Tue, 14 Oct 2025 19:40:28 +0200 Subject: [PATCH 5/7] chore: :arrow_up: update `uv.lock` with `just run-all` --- uv.lock | 130 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/uv.lock b/uv.lock index b5164e26..70e0a799 100644 --- a/uv.lock +++ b/uv.lock @@ -747,7 +747,7 @@ wheels = [ [[package]] name = "ipykernel" -version = "7.0.0" +version = "7.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -764,9 +764,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8a/81/50e62d30cee8e3035bcd46eb1e8768366df135240c0061846c7421ffcd06/ipykernel-7.0.0.tar.gz", hash = "sha256:06aef83f27adbce00b23345aa70f749f907dc4ac6f4a41fe7bf5f780dc506225", size = 173513 } +sdist = { url = "https://files.pythonhosted.org/packages/a8/4c/9f0024c8457286c6bfd5405a15d650ec5ea36f420ef9bbc58b301f66cfc5/ipykernel-7.0.1.tar.gz", hash = "sha256:2d3fd7cdef22071c2abbad78f142b743228c5d59cd470d034871ae0ac359533c", size = 171460 } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/20/99c49012535eec8ec797d049dec4f89c1d49b6793fa2f53e6e918f4d901f/ipykernel-7.0.0-py3-none-any.whl", hash = "sha256:28793cecaa6a669e3be80eb6d24803202388b6a955929b0a4e13404d8c92062b", size = 118921 }, + { url = "https://files.pythonhosted.org/packages/b8/f7/761037905ffdec673533bfa43af8d4c31c859c778dfc3bbb71899875ec18/ipykernel-7.0.1-py3-none-any.whl", hash = "sha256:87182a8305e28954b6721087dec45b171712610111d494c17bb607befa1c4000", size = 118157 }, ] [[package]] @@ -1595,7 +1595,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.12.1" +version = "2.12.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -1603,76 +1603,76 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3c/a7/d0d7b3c128948ece6676a6a21b9036e3ca53765d35052dbcc8c303886a44/pydantic-2.12.1.tar.gz", hash = "sha256:0af849d00e1879199babd468ec9db13b956f6608e9250500c1a9d69b6a62824e", size = 815997 } +sdist = { url = "https://files.pythonhosted.org/packages/8d/35/d319ed522433215526689bad428a94058b6dd12190ce7ddd78618ac14b28/pydantic-2.12.2.tar.gz", hash = "sha256:7b8fa15b831a4bbde9d5b84028641ac3080a4ca2cbd4a621a661687e741624fd", size = 816358 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/69/ce4e60e5e67aa0c339a5dc3391a02b4036545efb6308c54dc4aa9425386f/pydantic-2.12.1-py3-none-any.whl", hash = "sha256:665931f5b4ab40c411439e66f99060d631d1acc58c3d481957b9123343d674d1", size = 460511 }, + { url = "https://files.pythonhosted.org/packages/6c/98/468cb649f208a6f1279448e6e5247b37ae79cf5e4041186f1e2ef3d16345/pydantic-2.12.2-py3-none-any.whl", hash = "sha256:25ff718ee909acd82f1ff9b1a4acfd781bb23ab3739adaa7144f19a6a4e231ae", size = 460628 }, ] [[package]] name = "pydantic-core" -version = "2.41.3" +version = "2.41.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/e9/3916abb671bffb00845408c604ff03480dc8dc273310d8268547a37be0fb/pydantic_core-2.41.3.tar.gz", hash = "sha256:cdebb34b36ad05e8d77b4e797ad38a2a775c2a07a8fa386d4f6943b7778dcd39", size = 457489 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/11/3149cae2a61ddd11c206cde9dab7598a53cfabe8e69850507876988d2047/pydantic_core-2.41.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7bdc8b70bc4b68e4d891b46d018012cac7bbfe3b981a7c874716dde09ff09fd5", size = 2098919 }, - { url = "https://files.pythonhosted.org/packages/53/64/1717c7c5b092c64e5022b0d02b11703c2c94c31d897366b6c8d160b7d1de/pydantic_core-2.41.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446361e93f4ffe509edae5862fb89a0d24cbc8f2935f05c6584c2f2ca6e7b6df", size = 1910372 }, - { url = "https://files.pythonhosted.org/packages/99/ba/0231b5dde6c1c436e0d58aed7d63f927694d92c51aff739bf692142ce6e6/pydantic_core-2.41.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9af9a9ae24b866ce58462a7de61c33ff035e052b7a9c05c29cf496bd6a16a63f", size = 1952392 }, - { url = "https://files.pythonhosted.org/packages/cd/5d/1adbfa682a56544d70b42931f19de44a4e58a4fc2152da343a2fdfd4cad5/pydantic_core-2.41.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc836eb8561f04fede7b73747463bd08715be0f55c427e0f0198aa2f1d92f913", size = 2041093 }, - { url = "https://files.pythonhosted.org/packages/7f/d3/9d14041f0b125a5d6388957cace43f9dfb80d862e56a0685dde431a20b6a/pydantic_core-2.41.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16f80f366472eb6a3744149289c263e5ef182c8b18422192166b67625fef3c50", size = 2214331 }, - { url = "https://files.pythonhosted.org/packages/5b/cd/384988d065596fafecf9baeab0c66ef31610013b26eec3b305a80ab5f669/pydantic_core-2.41.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d699904cd13d0f509bdbb17f0784abb332d4aa42df4b0a8b65932096fcd4b21", size = 2344450 }, - { url = "https://files.pythonhosted.org/packages/a3/13/1b0dd34fce51a746823a347d7f9e02c6ea09078ec91c5f656594c23d2047/pydantic_core-2.41.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485398dacc5dddb2be280fd3998367531eccae8631f4985d048c2406a5ee5ecc", size = 2070507 }, - { url = "https://files.pythonhosted.org/packages/29/a6/0f8d6d67d917318d842fe8dba2489b0c5989ce01fc1ed58bf204f80663df/pydantic_core-2.41.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6dfe0898272bf675941cd1ea701677341357b77acadacabbd43d71e09763dceb", size = 2185401 }, - { url = "https://files.pythonhosted.org/packages/e9/23/b8a82253736f2efd3b79338dfe53866b341b68868fbce7111ff6b040b680/pydantic_core-2.41.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:86ffbf5291c367a56b5718590dc3452890f2c1ac7b76d8f4a1e66df90bd717f6", size = 2131929 }, - { url = "https://files.pythonhosted.org/packages/7c/16/efe252cbf852ebfcb4978820e7681d83ae45c526cbfc0cf847f70de49850/pydantic_core-2.41.3-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:c58c5acda77802eedde3aaf22be09e37cfec060696da64bf6e6ffb2480fdabd0", size = 2307223 }, - { url = "https://files.pythonhosted.org/packages/e9/ea/7d8eba2c37769d8768871575be449390beb2452a2289b0090ea7fa63f920/pydantic_core-2.41.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40db5705aec66371ca5792415c3e869137ae2bab48c48608db3f84986ccaf016", size = 2312962 }, - { url = "https://files.pythonhosted.org/packages/02/c4/b617e33c3b6f4a99c7d252cc42df958d14627a09a1a935141fb9abe44189/pydantic_core-2.41.3-cp312-cp312-win32.whl", hash = "sha256:668fcb317a0b3c84781796891128111c32f83458d436b022014ed0ea07f66e1b", size = 1988735 }, - { url = "https://files.pythonhosted.org/packages/24/fc/05bb0249782893b52baa7732393c0bac9422d6aab46770253f57176cddba/pydantic_core-2.41.3-cp312-cp312-win_amd64.whl", hash = "sha256:248a5d1dac5382454927edf32660d0791d2df997b23b06a8cac6e3375bc79cee", size = 2032239 }, - { url = "https://files.pythonhosted.org/packages/75/1d/7637f6aaafdbc27205296bde9843096bd449192986b5523869444f844b82/pydantic_core-2.41.3-cp312-cp312-win_arm64.whl", hash = "sha256:347a23094c98b7ea2ba6fff93b52bd2931a48c9c1790722d9e841f30e4b7afcd", size = 1969072 }, - { url = "https://files.pythonhosted.org/packages/9f/a6/7533cba20b8b66e209d8d2acbb9ccc0bc1b883b0654776d676e02696ef5d/pydantic_core-2.41.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a8596700fdd3ee12b0d9c1f2395f4c32557e7ebfbfacdc08055b0bcbe7d2827e", size = 2105686 }, - { url = "https://files.pythonhosted.org/packages/84/d7/2d15cb9dfb9f94422fb4a8820cbfeb397e3823087c2361ef46df5c172000/pydantic_core-2.41.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:624503f918e472c0eed6935020c01b6a6b4bcdb7955a848da5c8805d40f15c0f", size = 1910554 }, - { url = "https://files.pythonhosted.org/packages/4c/fc/cbd1caa19e88fd64df716a37b49e5864c1ac27dbb9eb870b8977a584fa42/pydantic_core-2.41.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36388958d0c614df9f5de1a5f88f4b79359016b9ecdfc352037788a628616aa2", size = 1957559 }, - { url = "https://files.pythonhosted.org/packages/3b/fe/da942ae51f602173556c627304dc24b9fa8bd04423bce189bf397ba0419e/pydantic_core-2.41.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c50eba144add9104cf43ef9a3d81c37ebf48bfd0924b584b78ec2e03ec91daf", size = 2051084 }, - { url = "https://files.pythonhosted.org/packages/c8/62/0abd59a7107d1ef502b9cfab68145c6bb87115c2d9e883afbf18b98fe6db/pydantic_core-2.41.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6ea2102958eb5ad560d570c49996e215a6939d9bffd0e9fd3b9e808a55008cc", size = 2218098 }, - { url = "https://files.pythonhosted.org/packages/72/b1/93a36aa119b70126f3f0d06b6f9a81ca864115962669d8a85deb39c82ecc/pydantic_core-2.41.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd0d26f1e4335d5f84abfc880da0afa080c8222410482f9ee12043bb05f55ec8", size = 2341954 }, - { url = "https://files.pythonhosted.org/packages/0f/be/7c2563b53b71ff3e41950b0ffa9eeba3d702091c6d59036fff8a39050528/pydantic_core-2.41.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41c38700094045b12c0cff35c8585954de66cf6dd63909fed1c2e6b8f38e1e1e", size = 2069474 }, - { url = "https://files.pythonhosted.org/packages/ba/ac/2394004db9f6e03712c1e52f40f0979750fa87721f6baf5f76ad92b8be46/pydantic_core-2.41.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4061cc82d7177417fdb90e23e67b27425ecde2652cfd2053b5b4661a489ddc19", size = 2190633 }, - { url = "https://files.pythonhosted.org/packages/7d/31/7b70c2d1fe41f450f8022f5523edaaea19c17a2d321fab03efd03aea1fe8/pydantic_core-2.41.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:b1d9699a4dae10a7719951cca1e30b591ef1dd9cdda9fec39282a283576c0241", size = 2137097 }, - { url = "https://files.pythonhosted.org/packages/4e/ae/f872198cffc8564f52c4ef83bcd3e324e5ac914e168c6b812f5ce3f80aab/pydantic_core-2.41.3-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:d5099f1b97e79f0e45cb6a236a5bd1a20078ed50b1b28f3d17f6c83ff3585baa", size = 2316771 }, - { url = "https://files.pythonhosted.org/packages/23/50/f0fce3a9a7554ced178d943e1eada58b15fca896e9eb75d50244fc12007c/pydantic_core-2.41.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:b5ff0467a8c1b6abb0ab9c9ea80e2e3a9788592e44c726c2db33fdaf1b5e7d0b", size = 2319449 }, - { url = "https://files.pythonhosted.org/packages/15/1f/86a6948408e8388604c02ffde651a2e39b711bd1ab6eeaff376094553a10/pydantic_core-2.41.3-cp313-cp313-win32.whl", hash = "sha256:edfe9b4cee4a91da7247c25732f24504071f3e101c050694d18194b7d2d320bf", size = 1995352 }, - { url = "https://files.pythonhosted.org/packages/1f/4b/6dac37c3f62684dc459a31623d8ae97ee433fd68bb827e5c64dd831a5087/pydantic_core-2.41.3-cp313-cp313-win_amd64.whl", hash = "sha256:44af3276c0c2c14efde6590523e4d7e04bcd0e46e0134f0dbef1be0b64b2d3e3", size = 2031894 }, - { url = "https://files.pythonhosted.org/packages/fd/75/3d9ba041a3fcb147279fbb37d2468efe62606809fec97b8de78174335ef4/pydantic_core-2.41.3-cp313-cp313-win_arm64.whl", hash = "sha256:59aeed341f92440d51fdcc82c8e930cfb234f1843ed1d4ae1074f5fb9789a64b", size = 1974036 }, - { url = "https://files.pythonhosted.org/packages/50/68/45842628ccdb384df029f884ef915306d195c4f08b66ca4d99867edc6338/pydantic_core-2.41.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ef37228238b3a280170ac43a010835c4a7005742bc8831c2c1a9560de4595dbe", size = 1876856 }, - { url = "https://files.pythonhosted.org/packages/99/73/336a82910c6a482a0ba9a255c08dcc456ebca9735df96d7a82dffe17626a/pydantic_core-2.41.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cb19f36253152c509abe76c1d1b185436e0c75f392a82934fe37f4a1264449", size = 1884665 }, - { url = "https://files.pythonhosted.org/packages/34/87/ec610a7849561e0ef7c25b74ef934d154454c3aac8fb595b899557f3c6ab/pydantic_core-2.41.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91be4756e05367ce19a70e1db3b77f01f9e40ca70d26fb4cdfa993e53a08964a", size = 2043067 }, - { url = "https://files.pythonhosted.org/packages/db/b4/5f2b0cf78752f9111177423bd5f2bc0815129e587c13401636b8900a417e/pydantic_core-2.41.3-cp313-cp313t-win_amd64.whl", hash = "sha256:ce7d8f4353f82259b55055bd162bbaf599f6c40cd0c098e989eeb95f9fdc022f", size = 1996799 }, - { url = "https://files.pythonhosted.org/packages/49/7f/07e7f19a6a44a52abd48846e348e11fa1b3de5ed7c0231d53f055ffb365f/pydantic_core-2.41.3-cp313-cp313t-win_arm64.whl", hash = "sha256:f06a9e81da60e5a0ef584f6f4790f925c203880ae391bf363d97126fd1790b21", size = 1969574 }, - { url = "https://files.pythonhosted.org/packages/f1/d8/db32fbced75853c1d8e7ada8cb2b837ade99b2f281de569908de3e29f0bf/pydantic_core-2.41.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:0c77e8e72344e34052ea26905fa7551ecb75fc12795ca1a8e44f816918f4c718", size = 2103383 }, - { url = "https://files.pythonhosted.org/packages/de/28/5bcb3327b3777994633f4cb459c5dc34a9cbe6cf0ac449d3e8f1e74bdaaa/pydantic_core-2.41.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32be442a017e82a6c496a52ef5db5f5ac9abf31c3064f5240ee15a1d27cc599e", size = 1904974 }, - { url = "https://files.pythonhosted.org/packages/71/8d/c9d8cad7c02d63869079fb6fb61b8ab27adbeeda0bf130c684fe43daa126/pydantic_core-2.41.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af10c78f0e9086d2d883ddd5a6482a613ad435eb5739cf1467b1f86169e63d91", size = 1956879 }, - { url = "https://files.pythonhosted.org/packages/15/b1/8a84b55631a45375a467df288d8f905bec0abadb1e75bce3b32402b49733/pydantic_core-2.41.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6212874118704e27d177acee5b90b83556b14b2eb88aae01bae51cd9efe27019", size = 2051787 }, - { url = "https://files.pythonhosted.org/packages/c3/97/a84ea9cb7ba4dbfd43865e5dd536b22c78ee763d82d501c6f6a553403c00/pydantic_core-2.41.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6a24c82674a3a8e7f7306e57e98219e5c1cdfc0f57bc70986930dda136230b2", size = 2217830 }, - { url = "https://files.pythonhosted.org/packages/1a/2c/64233c77410e314dbb7f2e8112be7f56de57cf64198a32d8ab3f7b74adf4/pydantic_core-2.41.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e0c81dc047c18059410c959a437540abcefea6a882d6e43b9bf45c291eaacd9", size = 2341131 }, - { url = "https://files.pythonhosted.org/packages/23/3d/915b90eb0de93bd522b293fd1a986289f5d576c72e640f3bb426b496d095/pydantic_core-2.41.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0d7e1a9f80f00a8180b9194ecef66958eb03f3c3ae2d77195c9d665ac0a61e", size = 2063797 }, - { url = "https://files.pythonhosted.org/packages/4d/25/a65665caa86e496e19feef48e6bd9263c1a46f222e8f9b0818f67bd98dc3/pydantic_core-2.41.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2868fabfc35ec0738539ce0d79aab37aeffdcb9682b9b91f0ac4b0ba31abb1eb", size = 2193041 }, - { url = "https://files.pythonhosted.org/packages/cd/46/a7f7e17f99ee691a7d93a53aa41bf7d1b1d425945b6e9bc8020498a413e1/pydantic_core-2.41.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:cb4f40c93307e1c50996e4edcddf338e1f3f1fb86fb69b654111c6050ae3b081", size = 2136119 }, - { url = "https://files.pythonhosted.org/packages/5f/92/c27c1f3edd06e04af71358aa8f4d244c8bc6726e3fb47e00157d3dffe66f/pydantic_core-2.41.3-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:287cbcd3407a875eaf0b1efa2e5288493d5b79bfd3629459cf0b329ad8a9071a", size = 2317223 }, - { url = "https://files.pythonhosted.org/packages/51/6c/20aabe3c32888fb13d4726e405716fed14b1d4d1d4292d585862c1458b7b/pydantic_core-2.41.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:5253835aa145049205a67056884555a936f9b3fea7c3ce860bff62be6a1ae4d1", size = 2320425 }, - { url = "https://files.pythonhosted.org/packages/67/d2/476d4bc6b3070e151ae920167f27f26415e12f8fcc6cf5a47a613aba7267/pydantic_core-2.41.3-cp314-cp314-win32.whl", hash = "sha256:69297795efe5349156d18eebea818b75d29a1d3d1d5f26a250f22ab4220aacd6", size = 1994216 }, - { url = "https://files.pythonhosted.org/packages/16/ca/2cd8515584b3d665ca3c4d946364c2a9932d0d5648694c2a10d273cde81c/pydantic_core-2.41.3-cp314-cp314-win_amd64.whl", hash = "sha256:e1c133e3447c2f6d95e47ede58fff0053370758112a1d39117d0af8c93584049", size = 2026522 }, - { url = "https://files.pythonhosted.org/packages/77/61/c9f2791d7188594f0abdc1b7fe8ec3efc123ee2d9c553fd3b6da2d9fd53d/pydantic_core-2.41.3-cp314-cp314-win_arm64.whl", hash = "sha256:54534eecbb7a331521f832e15fc307296f491ee1918dacfd4d5b900da6ee3332", size = 1969070 }, - { url = "https://files.pythonhosted.org/packages/b5/eb/45f9a91f8c09f4cfb62f78dce909b20b6047ce4fd8d89310fcac5ad62e54/pydantic_core-2.41.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6b4be10152098b43c093a4b5e9e9da1ac7a1c954c1934d4438d07ba7b7bcf293", size = 1876593 }, - { url = "https://files.pythonhosted.org/packages/99/f8/5c9d0959e0e1f260eea297a5ecc1dc29a14e03ee6a533e805407e8403c1a/pydantic_core-2.41.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe4ebd676c158a7994253161151b476dbbef2acbd2f547cfcfdf332cf67cc29", size = 1882977 }, - { url = "https://files.pythonhosted.org/packages/8b/f4/7ab918e35f55e7beee471ba8c67dfc4c9c19a8904e4867bfda7f9c76a72e/pydantic_core-2.41.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:984ca0113b39dda1d7c358d6db03dd6539ef244d0558351806c1327239e035bf", size = 2041033 }, - { url = "https://files.pythonhosted.org/packages/a6/c8/5b12e5a36410ebcd0082ae5b0258150d72762e306f298cc3fe731b5574ec/pydantic_core-2.41.3-cp314-cp314t-win_amd64.whl", hash = "sha256:2a7dd8a6f5a9a2f8c7f36e4fc0982a985dbc4ac7176ee3df9f63179b7295b626", size = 1994462 }, - { url = "https://files.pythonhosted.org/packages/6b/f6/c6f3b7244a2a0524f4a04052e3d590d3be0ba82eb1a2f0fe5d068237701e/pydantic_core-2.41.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b387f08b378924fa82bd86e03c9d61d6daca1a73ffb3947bdcfe12ea14c41f68", size = 1973551 }, - { url = "https://files.pythonhosted.org/packages/68/e6/a41dec3d50cfbd7445334459e847f97a62c5658d2c6da268886928ffd357/pydantic_core-2.41.3-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:a6ded5abbb7391c0db9e002aaa5f0e3a49a024b0a22e2ed09ab69087fd5ab8a8", size = 2112077 }, - { url = "https://files.pythonhosted.org/packages/44/38/e136a52ae85265a07999439cd8dcd24ba4e83e23d61e40000cd74b426f19/pydantic_core-2.41.3-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:43abc869cce9104ff35cb4eff3028e9a87346c95fe44e0173036bf4d782bdc3d", size = 1920464 }, - { url = "https://files.pythonhosted.org/packages/3e/5d/a3f509f682818ded836bd006adce08d731d81c77694a26a0a1a448f3e351/pydantic_core-2.41.3-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb3c63f4014a603caee687cd5c3c63298d2c8951b7acb2ccd0befbf2e1c0b8ad", size = 1951926 }, - { url = "https://files.pythonhosted.org/packages/59/0e/cb30ad2a0147cc7763c0c805ee1c534f6ed5d5db7bc8cf8ebaf34b4c9dab/pydantic_core-2.41.3-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88461e25f62e58db4d8b180e2612684f31b5844db0a8f8c1c421498c97bc197b", size = 2139233 }, +sdist = { url = "https://files.pythonhosted.org/packages/df/18/d0944e8eaaa3efd0a91b0f1fc537d3be55ad35091b6a87638211ba691964/pydantic_core-2.41.4.tar.gz", hash = "sha256:70e47929a9d4a1905a67e4b687d5946026390568a8e952b92824118063cee4d5", size = 457557 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/81/d3b3e95929c4369d30b2a66a91db63c8ed0a98381ae55a45da2cd1cc1288/pydantic_core-2.41.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ab06d77e053d660a6faaf04894446df7b0a7e7aba70c2797465a0a1af00fc887", size = 2099043 }, + { url = "https://files.pythonhosted.org/packages/58/da/46fdac49e6717e3a94fc9201403e08d9d61aa7a770fab6190b8740749047/pydantic_core-2.41.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c53ff33e603a9c1179a9364b0a24694f183717b2e0da2b5ad43c316c956901b2", size = 1910699 }, + { url = "https://files.pythonhosted.org/packages/1e/63/4d948f1b9dd8e991a5a98b77dd66c74641f5f2e5225fee37994b2e07d391/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:304c54176af2c143bd181d82e77c15c41cbacea8872a2225dd37e6544dce9999", size = 1952121 }, + { url = "https://files.pythonhosted.org/packages/b2/a7/e5fc60a6f781fc634ecaa9ecc3c20171d238794cef69ae0af79ac11b89d7/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025ba34a4cf4fb32f917d5d188ab5e702223d3ba603be4d8aca2f82bede432a4", size = 2041590 }, + { url = "https://files.pythonhosted.org/packages/70/69/dce747b1d21d59e85af433428978a1893c6f8a7068fa2bb4a927fba7a5ff/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9f5f30c402ed58f90c70e12eff65547d3ab74685ffe8283c719e6bead8ef53f", size = 2219869 }, + { url = "https://files.pythonhosted.org/packages/83/6a/c070e30e295403bf29c4df1cb781317b6a9bac7cd07b8d3acc94d501a63c/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd96e5d15385d301733113bcaa324c8bcf111275b7675a9c6e88bfb19fc05e3b", size = 2345169 }, + { url = "https://files.pythonhosted.org/packages/f0/83/06d001f8043c336baea7fd202a9ac7ad71f87e1c55d8112c50b745c40324/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98f348cbb44fae6e9653c1055db7e29de67ea6a9ca03a5fa2c2e11a47cff0e47", size = 2070165 }, + { url = "https://files.pythonhosted.org/packages/14/0a/e567c2883588dd12bcbc110232d892cf385356f7c8a9910311ac997ab715/pydantic_core-2.41.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec22626a2d14620a83ca583c6f5a4080fa3155282718b6055c2ea48d3ef35970", size = 2189067 }, + { url = "https://files.pythonhosted.org/packages/f4/1d/3d9fca34273ba03c9b1c5289f7618bc4bd09c3ad2289b5420481aa051a99/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a95d4590b1f1a43bf33ca6d647b990a88f4a3824a8c4572c708f0b45a5290ed", size = 2132997 }, + { url = "https://files.pythonhosted.org/packages/52/70/d702ef7a6cd41a8afc61f3554922b3ed8d19dd54c3bd4bdbfe332e610827/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:f9672ab4d398e1b602feadcffcdd3af44d5f5e6ddc15bc7d15d376d47e8e19f8", size = 2307187 }, + { url = "https://files.pythonhosted.org/packages/68/4c/c06be6e27545d08b802127914156f38d10ca287a9e8489342793de8aae3c/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:84d8854db5f55fead3b579f04bda9a36461dab0730c5d570e1526483e7bb8431", size = 2305204 }, + { url = "https://files.pythonhosted.org/packages/b0/e5/35ae4919bcd9f18603419e23c5eaf32750224a89d41a8df1a3704b69f77e/pydantic_core-2.41.4-cp312-cp312-win32.whl", hash = "sha256:9be1c01adb2ecc4e464392c36d17f97e9110fbbc906bcbe1c943b5b87a74aabd", size = 1972536 }, + { url = "https://files.pythonhosted.org/packages/1e/c2/49c5bb6d2a49eb2ee3647a93e3dae7080c6409a8a7558b075027644e879c/pydantic_core-2.41.4-cp312-cp312-win_amd64.whl", hash = "sha256:d682cf1d22bab22a5be08539dca3d1593488a99998f9f412137bc323179067ff", size = 2031132 }, + { url = "https://files.pythonhosted.org/packages/06/23/936343dbcba6eec93f73e95eb346810fc732f71ba27967b287b66f7b7097/pydantic_core-2.41.4-cp312-cp312-win_arm64.whl", hash = "sha256:833eebfd75a26d17470b58768c1834dfc90141b7afc6eb0429c21fc5a21dcfb8", size = 1969483 }, + { url = "https://files.pythonhosted.org/packages/13/d0/c20adabd181a029a970738dfe23710b52a31f1258f591874fcdec7359845/pydantic_core-2.41.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:85e050ad9e5f6fe1004eec65c914332e52f429bc0ae12d6fa2092407a462c746", size = 2105688 }, + { url = "https://files.pythonhosted.org/packages/00/b6/0ce5c03cec5ae94cca220dfecddc453c077d71363b98a4bbdb3c0b22c783/pydantic_core-2.41.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7393f1d64792763a48924ba31d1e44c2cfbc05e3b1c2c9abb4ceeadd912cced", size = 1910807 }, + { url = "https://files.pythonhosted.org/packages/68/3e/800d3d02c8beb0b5c069c870cbb83799d085debf43499c897bb4b4aaff0d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94dab0940b0d1fb28bcab847adf887c66a27a40291eedf0b473be58761c9799a", size = 1956669 }, + { url = "https://files.pythonhosted.org/packages/60/a4/24271cc71a17f64589be49ab8bd0751f6a0a03046c690df60989f2f95c2c/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de7c42f897e689ee6f9e93c4bec72b99ae3b32a2ade1c7e4798e690ff5246e02", size = 2051629 }, + { url = "https://files.pythonhosted.org/packages/68/de/45af3ca2f175d91b96bfb62e1f2d2f1f9f3b14a734afe0bfeff079f78181/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:664b3199193262277b8b3cd1e754fb07f2c6023289c815a1e1e8fb415cb247b1", size = 2224049 }, + { url = "https://files.pythonhosted.org/packages/af/8f/ae4e1ff84672bf869d0a77af24fd78387850e9497753c432875066b5d622/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95b253b88f7d308b1c0b417c4624f44553ba4762816f94e6986819b9c273fb2", size = 2342409 }, + { url = "https://files.pythonhosted.org/packages/18/62/273dd70b0026a085c7b74b000394e1ef95719ea579c76ea2f0cc8893736d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1351f5bbdbbabc689727cb91649a00cb9ee7203e0a6e54e9f5ba9e22e384b84", size = 2069635 }, + { url = "https://files.pythonhosted.org/packages/30/03/cf485fff699b4cdaea469bc481719d3e49f023241b4abb656f8d422189fc/pydantic_core-2.41.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1affa4798520b148d7182da0615d648e752de4ab1a9566b7471bc803d88a062d", size = 2194284 }, + { url = "https://files.pythonhosted.org/packages/f9/7e/c8e713db32405dfd97211f2fc0a15d6bf8adb7640f3d18544c1f39526619/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7b74e18052fea4aa8dea2fb7dbc23d15439695da6cbe6cfc1b694af1115df09d", size = 2137566 }, + { url = "https://files.pythonhosted.org/packages/04/f7/db71fd4cdccc8b75990f79ccafbbd66757e19f6d5ee724a6252414483fb4/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:285b643d75c0e30abda9dc1077395624f314a37e3c09ca402d4015ef5979f1a2", size = 2316809 }, + { url = "https://files.pythonhosted.org/packages/76/63/a54973ddb945f1bca56742b48b144d85c9fc22f819ddeb9f861c249d5464/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f52679ff4218d713b3b33f88c89ccbf3a5c2c12ba665fb80ccc4192b4608dbab", size = 2311119 }, + { url = "https://files.pythonhosted.org/packages/f8/03/5d12891e93c19218af74843a27e32b94922195ded2386f7b55382f904d2f/pydantic_core-2.41.4-cp313-cp313-win32.whl", hash = "sha256:ecde6dedd6fff127c273c76821bb754d793be1024bc33314a120f83a3c69460c", size = 1981398 }, + { url = "https://files.pythonhosted.org/packages/be/d8/fd0de71f39db91135b7a26996160de71c073d8635edfce8b3c3681be0d6d/pydantic_core-2.41.4-cp313-cp313-win_amd64.whl", hash = "sha256:d081a1f3800f05409ed868ebb2d74ac39dd0c1ff6c035b5162356d76030736d4", size = 2030735 }, + { url = "https://files.pythonhosted.org/packages/72/86/c99921c1cf6650023c08bfab6fe2d7057a5142628ef7ccfa9921f2dda1d5/pydantic_core-2.41.4-cp313-cp313-win_arm64.whl", hash = "sha256:f8e49c9c364a7edcbe2a310f12733aad95b022495ef2a8d653f645e5d20c1564", size = 1973209 }, + { url = "https://files.pythonhosted.org/packages/36/0d/b5706cacb70a8414396efdda3d72ae0542e050b591119e458e2490baf035/pydantic_core-2.41.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ed97fd56a561f5eb5706cebe94f1ad7c13b84d98312a05546f2ad036bafe87f4", size = 1877324 }, + { url = "https://files.pythonhosted.org/packages/de/2d/cba1fa02cfdea72dfb3a9babb067c83b9dff0bbcb198368e000a6b756ea7/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a870c307bf1ee91fc58a9a61338ff780d01bfae45922624816878dce784095d2", size = 1884515 }, + { url = "https://files.pythonhosted.org/packages/07/ea/3df927c4384ed9b503c9cc2d076cf983b4f2adb0c754578dfb1245c51e46/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d25e97bc1f5f8f7985bdc2335ef9e73843bb561eb1fa6831fdfc295c1c2061cf", size = 2042819 }, + { url = "https://files.pythonhosted.org/packages/6a/ee/df8e871f07074250270a3b1b82aad4cd0026b588acd5d7d3eb2fcb1471a3/pydantic_core-2.41.4-cp313-cp313t-win_amd64.whl", hash = "sha256:d405d14bea042f166512add3091c1af40437c2e7f86988f3915fabd27b1e9cd2", size = 1995866 }, + { url = "https://files.pythonhosted.org/packages/fc/de/b20f4ab954d6d399499c33ec4fafc46d9551e11dc1858fb7f5dca0748ceb/pydantic_core-2.41.4-cp313-cp313t-win_arm64.whl", hash = "sha256:19f3684868309db5263a11bace3c45d93f6f24afa2ffe75a647583df22a2ff89", size = 1970034 }, + { url = "https://files.pythonhosted.org/packages/54/28/d3325da57d413b9819365546eb9a6e8b7cbd9373d9380efd5f74326143e6/pydantic_core-2.41.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:e9205d97ed08a82ebb9a307e92914bb30e18cdf6f6b12ca4bedadb1588a0bfe1", size = 2102022 }, + { url = "https://files.pythonhosted.org/packages/9e/24/b58a1bc0d834bf1acc4361e61233ee217169a42efbdc15a60296e13ce438/pydantic_core-2.41.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:82df1f432b37d832709fbcc0e24394bba04a01b6ecf1ee87578145c19cde12ac", size = 1905495 }, + { url = "https://files.pythonhosted.org/packages/fb/a4/71f759cc41b7043e8ecdaab81b985a9b6cad7cec077e0b92cff8b71ecf6b/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3b4cc4539e055cfa39a3763c939f9d409eb40e85813257dcd761985a108554", size = 1956131 }, + { url = "https://files.pythonhosted.org/packages/b0/64/1e79ac7aa51f1eec7c4cda8cbe456d5d09f05fdd68b32776d72168d54275/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b1eb1754fce47c63d2ff57fdb88c351a6c0150995890088b33767a10218eaa4e", size = 2052236 }, + { url = "https://files.pythonhosted.org/packages/e9/e3/a3ffc363bd4287b80f1d43dc1c28ba64831f8dfc237d6fec8f2661138d48/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6ab5ab30ef325b443f379ddb575a34969c333004fca5a1daa0133a6ffaad616", size = 2223573 }, + { url = "https://files.pythonhosted.org/packages/28/27/78814089b4d2e684a9088ede3790763c64693c3d1408ddc0a248bc789126/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31a41030b1d9ca497634092b46481b937ff9397a86f9f51bd41c4767b6fc04af", size = 2342467 }, + { url = "https://files.pythonhosted.org/packages/92/97/4de0e2a1159cb85ad737e03306717637842c88c7fd6d97973172fb183149/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a44ac1738591472c3d020f61c6df1e4015180d6262ebd39bf2aeb52571b60f12", size = 2063754 }, + { url = "https://files.pythonhosted.org/packages/0f/50/8cb90ce4b9efcf7ae78130afeb99fd1c86125ccdf9906ef64b9d42f37c25/pydantic_core-2.41.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d72f2b5e6e82ab8f94ea7d0d42f83c487dc159c5240d8f83beae684472864e2d", size = 2196754 }, + { url = "https://files.pythonhosted.org/packages/34/3b/ccdc77af9cd5082723574a1cc1bcae7a6acacc829d7c0a06201f7886a109/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:c4d1e854aaf044487d31143f541f7aafe7b482ae72a022c664b2de2e466ed0ad", size = 2137115 }, + { url = "https://files.pythonhosted.org/packages/ca/ba/e7c7a02651a8f7c52dc2cff2b64a30c313e3b57c7d93703cecea76c09b71/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b568af94267729d76e6ee5ececda4e283d07bbb28e8148bb17adad93d025d25a", size = 2317400 }, + { url = "https://files.pythonhosted.org/packages/2c/ba/6c533a4ee8aec6b812c643c49bb3bd88d3f01e3cebe451bb85512d37f00f/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6d55fb8b1e8929b341cc313a81a26e0d48aa3b519c1dbaadec3a6a2b4fcad025", size = 2312070 }, + { url = "https://files.pythonhosted.org/packages/22/ae/f10524fcc0ab8d7f96cf9a74c880243576fd3e72bd8ce4f81e43d22bcab7/pydantic_core-2.41.4-cp314-cp314-win32.whl", hash = "sha256:5b66584e549e2e32a1398df11da2e0a7eff45d5c2d9db9d5667c5e6ac764d77e", size = 1982277 }, + { url = "https://files.pythonhosted.org/packages/b4/dc/e5aa27aea1ad4638f0c3fb41132f7eb583bd7420ee63204e2d4333a3bbf9/pydantic_core-2.41.4-cp314-cp314-win_amd64.whl", hash = "sha256:557a0aab88664cc552285316809cab897716a372afaf8efdbef756f8b890e894", size = 2024608 }, + { url = "https://files.pythonhosted.org/packages/3e/61/51d89cc2612bd147198e120a13f150afbf0bcb4615cddb049ab10b81b79e/pydantic_core-2.41.4-cp314-cp314-win_arm64.whl", hash = "sha256:3f1ea6f48a045745d0d9f325989d8abd3f1eaf47dd00485912d1a3a63c623a8d", size = 1967614 }, + { url = "https://files.pythonhosted.org/packages/0d/c2/472f2e31b95eff099961fa050c376ab7156a81da194f9edb9f710f68787b/pydantic_core-2.41.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6c1fe4c5404c448b13188dd8bd2ebc2bdd7e6727fa61ff481bcc2cca894018da", size = 1876904 }, + { url = "https://files.pythonhosted.org/packages/4a/07/ea8eeb91173807ecdae4f4a5f4b150a520085b35454350fc219ba79e66a3/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:523e7da4d43b113bf8e7b49fa4ec0c35bf4fe66b2230bfc5c13cc498f12c6c3e", size = 1882538 }, + { url = "https://files.pythonhosted.org/packages/1e/29/b53a9ca6cd366bfc928823679c6a76c7a4c69f8201c0ba7903ad18ebae2f/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5729225de81fb65b70fdb1907fcf08c75d498f4a6f15af005aabb1fdadc19dfa", size = 2041183 }, + { url = "https://files.pythonhosted.org/packages/c7/3d/f8c1a371ceebcaf94d6dd2d77c6cf4b1c078e13a5837aee83f760b4f7cfd/pydantic_core-2.41.4-cp314-cp314t-win_amd64.whl", hash = "sha256:de2cfbb09e88f0f795fd90cf955858fc2c691df65b1f21f0aa00b99f3fbc661d", size = 1993542 }, + { url = "https://files.pythonhosted.org/packages/8a/ac/9fc61b4f9d079482a290afe8d206b8f490e9fd32d4fc03ed4fc698214e01/pydantic_core-2.41.4-cp314-cp314t-win_arm64.whl", hash = "sha256:d34f950ae05a83e0ede899c595f312ca976023ea1db100cd5aa188f7005e3ab0", size = 1973897 }, + { url = "https://files.pythonhosted.org/packages/c4/48/ae937e5a831b7c0dc646b2ef788c27cd003894882415300ed21927c21efa/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:4f5d640aeebb438517150fdeec097739614421900e4a08db4a3ef38898798537", size = 2112087 }, + { url = "https://files.pythonhosted.org/packages/5e/db/6db8073e3d32dae017da7e0d16a9ecb897d0a4d92e00634916e486097961/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:4a9ab037b71927babc6d9e7fc01aea9e66dc2a4a34dff06ef0724a4049629f94", size = 1920387 }, + { url = "https://files.pythonhosted.org/packages/0d/c1/dd3542d072fcc336030d66834872f0328727e3b8de289c662faa04aa270e/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4dab9484ec605c3016df9ad4fd4f9a390bc5d816a3b10c6550f8424bb80b18c", size = 1951495 }, + { url = "https://files.pythonhosted.org/packages/2b/c6/db8d13a1f8ab3f1eb08c88bd00fd62d44311e3456d1e85c0e59e0a0376e7/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8a5028425820731d8c6c098ab642d7b8b999758e24acae03ed38a66eca8335", size = 2139008 }, ] [[package]] From 3e59f179eb91602574a22b9d04ee1c2e9fe90a09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Signe=20Kirk=20Br=C3=B8db=C3=A6k?= Date: Wed, 15 Oct 2025 10:53:17 +0200 Subject: [PATCH 6/7] test: :white_check_mark: `rule` -> `custom_check` That I missed the first time around. --- tests/test_check.py | 4 ++-- tests/test_custom_check.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_check.py b/tests/test_check.py index adaeb2bb..819a0f53 100644 --- a/tests/test_check.py +++ b/tests/test_check.py @@ -142,7 +142,7 @@ def test_fails_descriptor_violating_recommendations(): } -def test_exclude_not_excluding_rule(): +def test_exclude_not_excluding_custom_check(): descriptor = example_package_descriptor() descriptor["name"] = "ALLCAPS" del descriptor["resources"] @@ -155,7 +155,7 @@ def test_exclude_not_excluding_rule(): assert issues[0].type == "lowercase" -def test_exclude_excluding_rule(): +def test_exclude_excluding_custom_check(): descriptor = example_package_descriptor() descriptor["name"] = "ALLCAPS" exclude_lowercase = Exclude(type=lowercase_check.type) diff --git a/tests/test_custom_check.py b/tests/test_custom_check.py index e557ab9a..10c8fb22 100644 --- a/tests/test_custom_check.py +++ b/tests/test_custom_check.py @@ -53,7 +53,7 @@ def test_indirect_jsonpath(): ] -def test_multiple_rules(): +def test_multiple_custom_checks(): descriptor = example_package_descriptor() descriptor["name"] = "ALLCAPS" descriptor["resources"][0]["name"] = "not starting with woolly" @@ -75,7 +75,7 @@ def test_multiple_rules(): ] -def test_rules_and_default_checks(): +def test_custom_checks_and_default_checks(): descriptor = example_package_descriptor() descriptor["name"] = "ALLCAPS" del descriptor["resources"] @@ -87,13 +87,13 @@ def test_rules_and_default_checks(): def test_no_matching_jsonpath(): descriptor = example_package_descriptor() - rule = CustomCheck( + custom_check = CustomCheck( jsonpath="$.missing", message="This check always fails.", check=lambda value: False, type="always-fail", ) - config = Config(custom_checks=[rule]) + config = Config(custom_checks=[custom_check]) issues = check(descriptor, config=config) assert issues == [] From 5058296d2e4aa1592c9f680dbb7ffe31496bdebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Signe=20Kirk=20Br=C3=B8db=C3=A6k?= Date: Wed, 15 Oct 2025 10:53:45 +0200 Subject: [PATCH 7/7] docs: :memo: `rules` -> `custom_checks` in docstring --- src/check_datapackage/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/check_datapackage/config.py b/src/check_datapackage/config.py index f56e015e..e32c51d2 100644 --- a/src/check_datapackage/config.py +++ b/src/check_datapackage/config.py @@ -12,8 +12,8 @@ class Config: Attributes: exclude (list[Exclude]): Any issues matching any of these exclusions will be ignored (i.e., removed from the output of the check function). - rules (list[Rule]): Custom checks listed here will be done in addition - to checks defined in the Data Package standard. + custom_checks (list[CustomCheck]): Custom checks listed here will be done in + addition to checks defined in the Data Package standard. strict (bool): Whether to run recommended as well as required checks. If True, recommended checks will also be run. Defaults to False. version (str): The version of the Data Package standard to check against.