Skip to content

Commit

Permalink
Merge pull request #728 from cordada/develop
Browse files Browse the repository at this point in the history
Deploy release v0.38.0
  • Loading branch information
fpinto-cdd authored Oct 28, 2024
2 parents e082f92 + ec4fb98 commit 7d78adf
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 5 deletions.
2 changes: 1 addition & 1 deletion .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 0.37.0
current_version = 0.38.0
commit = True
tag = False
message = chore: Bump version from {current_version} to {new_version}
Expand Down
5 changes: 5 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# History

## 0.38.0 (2024-10-28)

- (PR #725, 2024-10-28) extras: Fix generation of JSON Schema for Pydantic `Rut` type
- (PR #726, 2024-10-28) chore(deps): Update `mypy` from 1.11.2 to 1.13.0

## 0.37.0 (2024-10-25)

- (PR #721, 2024-10-11) rut: Improve type annotation; Add method to validate DV
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ bumpversion==0.5.3
coverage==7.6.1
flake8==7.1.1
isort==5.13.2
mypy==1.11.2
mypy==1.13.0
pip-tools==7.4.1
tox==4.21.0
twine==5.1.1
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ mccabe==0.7.0
# via flake8
mdurl==0.1.2
# via markdown-it-py
mypy==1.11.2
mypy==1.13.0
# via -r requirements-dev.in
mypy-extensions==1.0.0
# via
Expand Down
2 changes: 1 addition & 1 deletion src/cl_sii/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
"""

__version__ = '0.37.0'
__version__ = '0.38.0'
19 changes: 18 additions & 1 deletion src/cl_sii/extras/pydantic_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ class _RutPydanticAnnotation:
- Customizing the core schema and JSON schema:
https://docs.pydantic.dev/2.9/architecture/#customizing-the-core-schema-and-json-schema
(https://github.com/pydantic/pydantic/blob/v2.9.2/docs/architecture.md#customizing-the-core-schema-and-json-schema)
- Implementing __get_pydantic_json_schema__:
https://docs.pydantic.dev/2.9/concepts/json_schema/#implementing-__get_pydantic_json_schema__
(https://github.com/pydantic/pydantic/blob/v2.9.2/docs/concepts/json_schema.md#implementing-__get_pydantic_json_schema__-)
Examples:
Expand Down Expand Up @@ -73,6 +76,7 @@ class _RutPydanticAnnotation:
'78773510-K'
>>> example_type_adapter.dump_json(cl_sii.rut.Rut('78773510-K'))
b'"78773510-K"'
>>> example_json_schema = example_type_adapter.json_schema()
"""

RUT_CANONICAL_STRICT_REGEX: ClassVar[Pattern] = re.compile(
Expand All @@ -99,7 +103,7 @@ def validate_from_str(value: str) -> cl_sii.rut.Rut:

from_str_schema = pydantic_core.core_schema.chain_schema(
[
pydantic_core.core_schema.str_schema(pattern=cls.RUT_CANONICAL_STRICT_REGEX),
cls.str_schema(),
pydantic_core.core_schema.no_info_plain_validator_function(validate_from_str),
]
)
Expand All @@ -117,6 +121,19 @@ def validate_from_str(value: str) -> cl_sii.rut.Rut:
),
)

@classmethod
def __get_pydantic_json_schema__(
cls,
core_schema: pydantic_core.core_schema.CoreSchema,
handler: pydantic.GetJsonSchemaHandler,
) -> pydantic.json_schema.JsonSchemaValue:
core_schema = cls.str_schema()
return handler(core_schema)

@classmethod
def str_schema(cls) -> pydantic_core.core_schema.CoreSchema:
return pydantic_core.core_schema.str_schema(pattern=cls.RUT_CANONICAL_STRICT_REGEX)


Rut = Annotated[cl_sii.rut.Rut, _RutPydanticAnnotation]
"""
Expand Down
32 changes: 32 additions & 0 deletions src/tests/test_extras_pydantic_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,35 @@ def test_deserialize_invalid(self) -> None:

with self.assertRaises(pydantic.ValidationError):
self.pydantic_type_adapter.validate_json(data)

def test_json_schema_for_validation(self) -> None:
# -----Arrange-----

expected_json_schema = {
'type': 'string',
'pattern': '^(\\d{1,8})-([\\dK])$',
}

# -----Act-----

actual_json_schema = self.pydantic_type_adapter.json_schema(mode='validation')

# -----Assert-----

self.assertEqual(expected_json_schema, actual_json_schema)

def test_json_schema_for_serialization(self) -> None:
# -----Arrange-----

expected_json_schema = {
'type': 'string',
'pattern': '^(\\d{1,8})-([\\dK])$',
}

# -----Act-----

actual_json_schema = self.pydantic_type_adapter.json_schema(mode='serialization')

# -----Assert-----

self.assertEqual(expected_json_schema, actual_json_schema)

0 comments on commit 7d78adf

Please sign in to comment.