diff --git a/pyproject.toml b/pyproject.toml index b7961f89..2f9ee178 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ dependencies = [ "pyOpenSSL>=24.0.0", "pytz>=2019.3", "signxml>=4.0.0", + "typing-extensions>=4.0.1", ] requires-python = ">=3.8, <3.11" authors = [ diff --git a/requirements.in b/requirements.in index 809cd12d..3161a3f3 100644 --- a/requirements.in +++ b/requirements.in @@ -19,3 +19,4 @@ pydantic==2.10.4 pyOpenSSL==24.3.0 pytz==2024.2 signxml==4.0.3 +typing-extensions==4.12.2 diff --git a/requirements.txt b/requirements.txt index f1082336..69b4e98c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -81,6 +81,7 @@ sqlparse==0.5.0 # via django typing-extensions==4.12.2 # via + # -r requirements.in # annotated-types # asgiref # pydantic diff --git a/src/cl_sii/dte/data_models.py b/src/cl_sii/dte/data_models.py index 673bf92c..aca2aaa8 100644 --- a/src/cl_sii/dte/data_models.py +++ b/src/cl_sii/dte/data_models.py @@ -24,6 +24,7 @@ from typing import Mapping, Optional, Sequence import pydantic +from typing_extensions import Self import cl_sii.contribuyente.constants import cl_sii.rut.constants @@ -854,7 +855,7 @@ def validate_referencias_numero_linea_ref_order(cls, v: object) -> object: @pydantic.model_validator(mode='after') def validate_referencias_rut_otro_is_consistent_with_tipo_dte( self, info: pydantic.ValidationInfo - ) -> DteXmlData: + ) -> Self: referencias = self.referencias tipo_dte = self.tipo_dte @@ -880,7 +881,7 @@ def validate_referencias_rut_otro_is_consistent_with_tipo_dte( @pydantic.model_validator(mode='after') def validate_referencias_rut_otro_is_consistent_with_emisor_rut( self, info: pydantic.ValidationInfo - ) -> DteXmlData: + ) -> Self: referencias = self.referencias emisor_rut = self.emisor_rut @@ -900,7 +901,7 @@ def validate_referencias_rut_otro_is_consistent_with_emisor_rut( return self @pydantic.model_validator(mode='after') - def validate_referencias_codigo_ref_is_consistent_with_tipo_dte(self) -> DteXmlData: + def validate_referencias_codigo_ref_is_consistent_with_tipo_dte(self) -> Self: referencias = self.referencias tipo_dte = self.tipo_dte diff --git a/src/cl_sii/rcv/data_models.py b/src/cl_sii/rcv/data_models.py index f9fc3b3b..0278e312 100644 --- a/src/cl_sii/rcv/data_models.py +++ b/src/cl_sii/rcv/data_models.py @@ -12,6 +12,7 @@ from typing import ClassVar, Optional import pydantic +from typing_extensions import Self import cl_sii.dte.data_models from cl_sii.base.constants import SII_OFFICIAL_TZ @@ -174,7 +175,7 @@ def validate_datetime_tz(cls, v: object) -> object: return v @pydantic.model_validator(mode='after') - def validate_rcv_kind_is_consistent_with_rc_estado_contable(self) -> RcvDetalleEntry: + def validate_rcv_kind_is_consistent_with_rc_estado_contable(self) -> Self: rcv_kind = self.RCV_KIND rc_estado_contable = self.RC_ESTADO_CONTABLE diff --git a/src/cl_sii/rtc/data_models.py b/src/cl_sii/rtc/data_models.py index 9ef42bd4..3342a299 100644 --- a/src/cl_sii/rtc/data_models.py +++ b/src/cl_sii/rtc/data_models.py @@ -24,6 +24,7 @@ from typing import ClassVar, Mapping, Optional import pydantic +from typing_extensions import Self from cl_sii.base.constants import SII_OFFICIAL_TZ from cl_sii.dte import data_models as dte_data_models @@ -508,7 +509,7 @@ def validate_monto_cedido(cls, v: object) -> object: return v @pydantic.model_validator(mode='after') - def validate_monto_cedido_does_not_exceed_dte_monto_total(self) -> CesionL1: + def validate_monto_cedido_does_not_exceed_dte_monto_total(self) -> Self: monto_cedido = self.monto_cedido dte_monto_total = self.dte_monto_total @@ -705,7 +706,7 @@ def validate_contribuyente_razon_social(cls, v: object) -> object: return v @pydantic.model_validator(mode='after') - def validate_dte_data_l2(self) -> CesionL2: + def validate_dte_data_l2(self) -> Self: dte_key = self.dte_key try: # Note: Delegate some validation to 'dte_data_models.DteDataL2'. diff --git a/src/cl_sii/rtc/data_models_aec.py b/src/cl_sii/rtc/data_models_aec.py index 94481e57..643d5992 100644 --- a/src/cl_sii/rtc/data_models_aec.py +++ b/src/cl_sii/rtc/data_models_aec.py @@ -10,6 +10,7 @@ from typing import ClassVar, Mapping, Optional, Sequence, Tuple import pydantic +from typing_extensions import Self from cl_sii.base.constants import SII_OFFICIAL_TZ from cl_sii.dte import data_models as dte_data_models @@ -342,7 +343,7 @@ def validate_datetime_tz(cls, v: object) -> object: return v @pydantic.model_validator(mode='after') - def validate_fecha_cesion_dt_is_consistent_with_dte(self) -> CesionAecXml: + def validate_fecha_cesion_dt_is_consistent_with_dte(self) -> Self: fecha_cesion_dt = self.fecha_cesion_dt dte = self.dte @@ -352,7 +353,7 @@ def validate_fecha_cesion_dt_is_consistent_with_dte(self) -> CesionAecXml: return self @pydantic.model_validator(mode='after') - def validate_monto_cesion_does_not_exceed_dte_monto_total(self) -> CesionAecXml: + def validate_monto_cesion_does_not_exceed_dte_monto_total(self) -> Self: monto_cesion = self.monto_cesion dte = self.dte @@ -365,7 +366,7 @@ def validate_monto_cesion_does_not_exceed_dte_monto_total(self) -> CesionAecXml: return self @pydantic.model_validator(mode='after') - def validate_fecha_ultimo_vencimiento_is_consistent_with_dte(self) -> CesionAecXml: + def validate_fecha_ultimo_vencimiento_is_consistent_with_dte(self) -> Self: fecha_ultimo_vencimiento = self.fecha_ultimo_vencimiento dte = self.dte @@ -732,7 +733,7 @@ def validate_cesiones_seq_order(cls, v: object) -> object: # return v @pydantic.model_validator(mode='after') - def validate_dte_matches_cesiones_dtes(self) -> AecXml: + def validate_dte_matches_cesiones_dtes(self) -> Self: dte = self.dte cesiones = self.cesiones @@ -751,7 +752,7 @@ def validate_dte_matches_cesiones_dtes(self) -> AecXml: return self @pydantic.model_validator(mode='after') - def validate_last_cesion_matches_some_fields(self) -> AecXml: + def validate_last_cesion_matches_some_fields(self) -> Self: field_validations: Sequence[Tuple[str, str]] = [ # (AecXml field, CesionAecXml field): # Even though it seems reasonable to expect that the date in `fecha_firma_dt` @@ -784,7 +785,7 @@ def validate_last_cesion_matches_some_fields(self) -> AecXml: @pydantic.model_validator(mode='after') def validate_signature_value_and_signature_x509_cert_der_may_only_be_none_together( self, - ) -> AecXml: + ) -> Self: signature_value = self.signature_value signature_x509_cert_der = self.signature_x509_cert_der