diff --git a/ci/generate_s2.sh b/ci/generate_s2.sh index a6e5142..8de62db 100755 --- a/ci/generate_s2.sh +++ b/ci/generate_s2.sh @@ -2,4 +2,4 @@ . .venv/bin/activate -datamodel-codegen --input specification/openapi.yml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output src/s2python/generated/gen_s2.py --use-one-literal-as-default --use-subclass-enum --output-datetime-class AwareDatetime --use-double-quotes +datamodel-codegen --input specification/openapi.yml --input-file-type openapi --output-model-type pydantic_v2.BaseModel --output src/s2python/generated/gen_s2.py --use-one-literal-as-default --use-subclass-enum --output-datetime-class AwareDatetime --use-double-quotes --base-class s2python.s2_base_model.S2BaseModel diff --git a/src/s2python/common/handshake.py b/src/s2python/common/handshake.py index 55e1c7d..7b1ff4b 100644 --- a/src/s2python/common/handshake.py +++ b/src/s2python/common/handshake.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import Handshake as GenHandshake from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,7 +11,6 @@ @catch_and_convert_exceptions class Handshake(GenHandshake, S2MessageComponent): - model_config = GenHandshake.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenHandshake.model_config, validate_assignment=True) - message_id: uuid.UUID = GenHandshake.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenHandshake.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/handshake_response.py b/src/s2python/common/handshake_response.py index a451e42..24060df 100644 --- a/src/s2python/common/handshake_response.py +++ b/src/s2python/common/handshake_response.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import HandshakeResponse as GenHandshakeResponse from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,7 +11,6 @@ @catch_and_convert_exceptions class HandshakeResponse(GenHandshakeResponse, S2MessageComponent): - model_config = GenHandshakeResponse.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenHandshakeResponse.model_config, validate_assignment=True) - message_id: uuid.UUID = GenHandshakeResponse.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenHandshakeResponse.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/instruction_status_update.py b/src/s2python/common/instruction_status_update.py index 73732e8..0e5495d 100644 --- a/src/s2python/common/instruction_status_update.py +++ b/src/s2python/common/instruction_status_update.py @@ -4,6 +4,8 @@ InstructionStatusUpdate as GenInstructionStatusUpdate, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -11,8 +13,7 @@ @catch_and_convert_exceptions class InstructionStatusUpdate(GenInstructionStatusUpdate, S2MessageComponent): - model_config = GenInstructionStatusUpdate.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenInstructionStatusUpdate.model_config, validate_assignment=True) - message_id: uuid.UUID = GenInstructionStatusUpdate.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - instruction_id: uuid.UUID = GenInstructionStatusUpdate.model_fields["instruction_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenInstructionStatusUpdate.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + instruction_id: uuid.UUID = copy_field(GenInstructionStatusUpdate.model_fields["instruction_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/number_range.py b/src/s2python/common/number_range.py index 5b6af75..404b136 100644 --- a/src/s2python/common/number_range.py +++ b/src/s2python/common/number_range.py @@ -1,6 +1,7 @@ from typing import Any from s2python.validate_values_mixin import ( + copy_config, S2MessageComponent, catch_and_convert_exceptions, ) @@ -9,8 +10,7 @@ @catch_and_convert_exceptions class NumberRange(GenNumberRange, S2MessageComponent): - model_config = GenNumberRange.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenNumberRange.model_config, validate_assignment=True) def __hash__(self) -> int: return hash(f"{self.start_of_range}|{self.end_of_range}") diff --git a/src/s2python/common/power_forecast.py b/src/s2python/common/power_forecast.py index 5dac5bb..89d2c63 100644 --- a/src/s2python/common/power_forecast.py +++ b/src/s2python/common/power_forecast.py @@ -4,6 +4,8 @@ from s2python.common.power_forecast_element import PowerForecastElement from s2python.generated.gen_s2 import PowerForecast as GenPowerForecast from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -11,8 +13,7 @@ @catch_and_convert_exceptions class PowerForecast(GenPowerForecast, S2MessageComponent): - model_config = GenPowerForecast.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPowerForecast.model_config, validate_assignment=True) - message_id: uuid.UUID = GenPowerForecast.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - elements: List[PowerForecastElement] = GenPowerForecast.model_fields["elements"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPowerForecast.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + elements: List[PowerForecastElement] = copy_field(GenPowerForecast.model_fields["elements"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/power_forecast_element.py b/src/s2python/common/power_forecast_element.py index 717c05f..ced8ad4 100644 --- a/src/s2python/common/power_forecast_element.py +++ b/src/s2python/common/power_forecast_element.py @@ -8,6 +8,8 @@ PowerForecastElement as GenPowerForecastElement, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -17,12 +19,11 @@ @catch_and_convert_exceptions class PowerForecastElement(GenPowerForecastElement, S2MessageComponent): - model_config = GenPowerForecastElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPowerForecastElement.model_config, validate_assignment=True) - duration: Duration = GenPowerForecastElement.model_fields["duration"] # type: ignore[assignment,reportIncompatibleVariableOverride] + duration: Duration = copy_field(GenPowerForecastElement.model_fields["duration"]) # type: ignore[assignment,reportIncompatibleVariableOverride] power_values: List[PowerForecastValue] = ( # type: ignore[reportIncompatibleVariableOverride] - GenPowerForecastElement.model_fields["power_values"] # type: ignore[assignment] + copy_field(GenPowerForecastElement.model_fields["power_values"]) # type: ignore[assignment] ) @model_validator(mode="after") diff --git a/src/s2python/common/power_forecast_value.py b/src/s2python/common/power_forecast_value.py index dbf2896..9e45c25 100644 --- a/src/s2python/common/power_forecast_value.py +++ b/src/s2python/common/power_forecast_value.py @@ -1,5 +1,6 @@ from s2python.generated.gen_s2 import PowerForecastValue as GenPowerForecastValue from s2python.validate_values_mixin import ( + copy_config, catch_and_convert_exceptions, S2MessageComponent, ) @@ -7,5 +8,4 @@ @catch_and_convert_exceptions class PowerForecastValue(GenPowerForecastValue, S2MessageComponent): - model_config = GenPowerForecastValue.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPowerForecastValue.model_config, validate_assignment=True) diff --git a/src/s2python/common/power_measurement.py b/src/s2python/common/power_measurement.py index 4a33e1f..da9e0a3 100644 --- a/src/s2python/common/power_measurement.py +++ b/src/s2python/common/power_measurement.py @@ -9,6 +9,8 @@ CommodityQuantity, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -16,11 +18,10 @@ @catch_and_convert_exceptions class PowerMeasurement(GenPowerMeasurement, S2MessageComponent): - model_config = GenPowerMeasurement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPowerMeasurement.model_config, validate_assignment=True) - message_id: uuid.UUID = GenPowerMeasurement.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - values: List[PowerValue] = GenPowerMeasurement.model_fields["values"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPowerMeasurement.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + values: List[PowerValue] = copy_field(GenPowerMeasurement.model_fields["values"]) # type: ignore[assignment,reportIncompatibleVariableOverride] @model_validator(mode="after") def validate_values_at_most_one_per_commodity_quantity(self) -> Self: diff --git a/src/s2python/common/power_range.py b/src/s2python/common/power_range.py index e9c1dd2..9358023 100644 --- a/src/s2python/common/power_range.py +++ b/src/s2python/common/power_range.py @@ -4,6 +4,7 @@ from s2python.generated.gen_s2 import PowerRange as GenPowerRange from s2python.validate_values_mixin import ( + copy_config, S2MessageComponent, catch_and_convert_exceptions, ) @@ -11,8 +12,7 @@ @catch_and_convert_exceptions class PowerRange(GenPowerRange, S2MessageComponent): - model_config = GenPowerRange.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPowerRange.model_config, validate_assignment=True) @model_validator(mode="after") def validate_start_end_order(self) -> Self: diff --git a/src/s2python/common/power_value.py b/src/s2python/common/power_value.py index cb55542..a44e9e9 100644 --- a/src/s2python/common/power_value.py +++ b/src/s2python/common/power_value.py @@ -1,5 +1,6 @@ from s2python.generated.gen_s2 import PowerValue as GenPowerValue from s2python.validate_values_mixin import ( + copy_config, catch_and_convert_exceptions, S2MessageComponent, ) @@ -7,5 +8,4 @@ @catch_and_convert_exceptions class PowerValue(GenPowerValue, S2MessageComponent): - model_config = GenPowerValue.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPowerValue.model_config, validate_assignment=True) diff --git a/src/s2python/common/reception_status.py b/src/s2python/common/reception_status.py index 12bf559..3ccfe94 100644 --- a/src/s2python/common/reception_status.py +++ b/src/s2python/common/reception_status.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import ReceptionStatus as GenReceptionStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,7 +11,6 @@ @catch_and_convert_exceptions class ReceptionStatus(GenReceptionStatus, S2MessageComponent): - model_config = GenReceptionStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenReceptionStatus.model_config, validate_assignment=True) - subject_message_id: uuid.UUID = GenReceptionStatus.model_fields["subject_message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + subject_message_id: uuid.UUID = copy_field(GenReceptionStatus.model_fields["subject_message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/resource_manager_details.py b/src/s2python/common/resource_manager_details.py index 9333fba..78753de 100644 --- a/src/s2python/common/resource_manager_details.py +++ b/src/s2python/common/resource_manager_details.py @@ -7,6 +7,8 @@ ResourceManagerDetails as GenResourceManagerDetails, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -14,12 +16,11 @@ @catch_and_convert_exceptions class ResourceManagerDetails(GenResourceManagerDetails, S2MessageComponent): - model_config = GenResourceManagerDetails.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenResourceManagerDetails.model_config, validate_assignment=True) - instruction_processing_delay: Duration = GenResourceManagerDetails.model_fields[ # type: ignore[assignment,reportIncompatibleVariableOverride] + instruction_processing_delay: Duration = copy_field(GenResourceManagerDetails.model_fields[ # type: ignore[assignment,reportIncompatibleVariableOverride] "instruction_processing_delay" - ] - message_id: uuid.UUID = GenResourceManagerDetails.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - resource_id: uuid.UUID = GenResourceManagerDetails.model_fields["resource_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - roles: List[Role] = GenResourceManagerDetails.model_fields["roles"] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) + message_id: uuid.UUID = copy_field(GenResourceManagerDetails.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + resource_id: uuid.UUID = copy_field(GenResourceManagerDetails.model_fields["resource_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + roles: List[Role] = copy_field(GenResourceManagerDetails.model_fields["roles"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/revoke_object.py b/src/s2python/common/revoke_object.py index 7fc6678..4b07908 100644 --- a/src/s2python/common/revoke_object.py +++ b/src/s2python/common/revoke_object.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import RevokeObject as GenRevokeObject from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,8 +11,7 @@ @catch_and_convert_exceptions class RevokeObject(GenRevokeObject, S2MessageComponent): - model_config = GenRevokeObject.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenRevokeObject.model_config, validate_assignment=True) - message_id: uuid.UUID = GenRevokeObject.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - object_id: uuid.UUID = GenRevokeObject.model_fields["object_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenRevokeObject.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + object_id: uuid.UUID = copy_field(GenRevokeObject.model_fields["object_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/role.py b/src/s2python/common/role.py index 7f8f253..27744fe 100644 --- a/src/s2python/common/role.py +++ b/src/s2python/common/role.py @@ -1,5 +1,6 @@ from s2python.generated.gen_s2 import Role as GenRole from s2python.validate_values_mixin import ( + copy_config, S2MessageComponent, catch_and_convert_exceptions, ) @@ -7,5 +8,4 @@ @catch_and_convert_exceptions class Role(GenRole, S2MessageComponent): - model_config = GenRole.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenRole.model_config, validate_assignment=True) diff --git a/src/s2python/common/select_control_type.py b/src/s2python/common/select_control_type.py index e8ac142..1bd40bb 100644 --- a/src/s2python/common/select_control_type.py +++ b/src/s2python/common/select_control_type.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import SelectControlType as GenSelectControlType from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,7 +11,6 @@ @catch_and_convert_exceptions class SelectControlType(GenSelectControlType, S2MessageComponent): - model_config = GenSelectControlType.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenSelectControlType.model_config, validate_assignment=True) - message_id: uuid.UUID = GenSelectControlType.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenSelectControlType.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/session_request.py b/src/s2python/common/session_request.py index b5a62a5..7a3c7ae 100644 --- a/src/s2python/common/session_request.py +++ b/src/s2python/common/session_request.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import SessionRequest as GenSessionRequest from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,7 +11,6 @@ @catch_and_convert_exceptions class SessionRequest(GenSessionRequest, S2MessageComponent): - model_config = GenSessionRequest.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenSessionRequest.model_config, validate_assignment=True) - message_id: uuid.UUID = GenSessionRequest.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenSessionRequest.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/timer.py b/src/s2python/common/timer.py index 67e226b..24e43fb 100644 --- a/src/s2python/common/timer.py +++ b/src/s2python/common/timer.py @@ -3,6 +3,8 @@ from s2python.common.duration import Duration from s2python.generated.gen_s2 import Timer as GenTimer from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -10,8 +12,7 @@ @catch_and_convert_exceptions class Timer(GenTimer, S2MessageComponent): - model_config = GenTimer.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenTimer.model_config, validate_assignment=True) - id: uuid.UUID = GenTimer.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - duration: Duration = GenTimer.model_fields["duration"] # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenTimer.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + duration: Duration = copy_field(GenTimer.model_fields["duration"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/common/transition.py b/src/s2python/common/transition.py index b43334f..36a9a7d 100644 --- a/src/s2python/common/transition.py +++ b/src/s2python/common/transition.py @@ -4,6 +4,8 @@ from s2python.common.duration import Duration from s2python.generated.gen_s2 import Transition as GenTransition from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -11,14 +13,13 @@ @catch_and_convert_exceptions class Transition(GenTransition, S2MessageComponent): - model_config = GenTransition.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenTransition.model_config, validate_assignment=True) - id: uuid.UUID = GenTransition.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - from_: uuid.UUID = GenTransition.model_fields["from_"] # type: ignore[assignment,reportIncompatibleVariableOverride] - to: uuid.UUID = GenTransition.model_fields["to"] # type: ignore[assignment,reportIncompatibleVariableOverride] - start_timers: List[uuid.UUID] = GenTransition.model_fields["start_timers"] # type: ignore[assignment,reportIncompatibleVariableOverride] - blocking_timers: List[uuid.UUID] = GenTransition.model_fields["blocking_timers"] # type: ignore[assignment,reportIncompatibleVariableOverride] - transition_duration: Optional[Duration] = GenTransition.model_fields[ # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenTransition.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + from_: uuid.UUID = copy_field(GenTransition.model_fields["from_"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + to: uuid.UUID = copy_field(GenTransition.model_fields["to"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + start_timers: List[uuid.UUID] = copy_field(GenTransition.model_fields["start_timers"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + blocking_timers: List[uuid.UUID] = copy_field(GenTransition.model_fields["blocking_timers"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + transition_duration: Optional[Duration] = copy_field(GenTransition.model_fields[ # type: ignore[assignment,reportIncompatibleVariableOverride] "transition_duration" - ] + ]) diff --git a/src/s2python/ddbc/ddbc_actuator_description.py b/src/s2python/ddbc/ddbc_actuator_description.py index a460971..59e132e 100644 --- a/src/s2python/ddbc/ddbc_actuator_description.py +++ b/src/s2python/ddbc/ddbc_actuator_description.py @@ -10,6 +10,8 @@ from s2python.common.timer import Timer from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -17,14 +19,13 @@ @catch_and_convert_exceptions class DDBCActuatorDescription(GenDDBCActuatorDescription, S2MessageComponent): - model_config = GenDDBCActuatorDescription.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCActuatorDescription.model_config, validate_assignment=True) - id: uuid.UUID = GenDDBCActuatorDescription.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - supported_commodites: List[Commodity] = GenDDBCActuatorDescription.model_fields[ + id: uuid.UUID = copy_field(GenDDBCActuatorDescription.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + supported_commodites: List[Commodity] = copy_field(GenDDBCActuatorDescription.model_fields[ "supported_commodites" - ] # type: ignore[assignment,reportIncompatibleVariableOverride] - timers: List[Timer] = GenDDBCActuatorDescription.model_fields["timers"] # type: ignore[assignment,reportIncompatibleVariableOverride] - operation_modes: List[DDBCOperationMode] = GenDDBCActuatorDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment,reportIncompatibleVariableOverride] + timers: List[Timer] = copy_field(GenDDBCActuatorDescription.model_fields["timers"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + operation_modes: List[DDBCOperationMode] = copy_field(GenDDBCActuatorDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "operation_modes" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ddbc/ddbc_actuator_status.py b/src/s2python/ddbc/ddbc_actuator_status.py index 57d2ffe..9f6566f 100644 --- a/src/s2python/ddbc/ddbc_actuator_status.py +++ b/src/s2python/ddbc/ddbc_actuator_status.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import DDBCActuatorStatus as GenDDBCActuatorStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,14 +11,13 @@ @catch_and_convert_exceptions class DDBCActuatorStatus(GenDDBCActuatorStatus, S2MessageComponent): - model_config = GenDDBCActuatorStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCActuatorStatus.model_config, validate_assignment=True) - message_id: uuid.UUID = GenDDBCActuatorStatus.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - actuator_id: uuid.UUID = GenDDBCActuatorStatus.model_fields["actuator_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - active_operation_mode_id: uuid.UUID = GenDDBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenDDBCActuatorStatus.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + actuator_id: uuid.UUID = copy_field(GenDDBCActuatorStatus.model_fields["actuator_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + active_operation_mode_id: uuid.UUID = copy_field(GenDDBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "active_operation_mode_id" - ] # type: ignore[assignment] - operation_mode_factor: float = GenDDBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + operation_mode_factor: float = copy_field(GenDDBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "operation_mode_factor" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ddbc/ddbc_average_demand_rate_forecast.py b/src/s2python/ddbc/ddbc_average_demand_rate_forecast.py index 313aadd..e693e21 100644 --- a/src/s2python/ddbc/ddbc_average_demand_rate_forecast.py +++ b/src/s2python/ddbc/ddbc_average_demand_rate_forecast.py @@ -9,6 +9,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -19,10 +21,9 @@ class DDBCAverageDemandRateForecast( GenDDBCAverageDemandRateForecast, S2MessageComponent, ): - model_config = GenDDBCAverageDemandRateForecast.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCAverageDemandRateForecast.model_config, validate_assignment=True) - message_id: uuid.UUID = GenDDBCAverageDemandRateForecast.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenDDBCAverageDemandRateForecast.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] elements: List[DDBCAverageDemandRateForecastElement] = ( # type: ignore[reportIncompatibleVariableOverride] - GenDDBCAverageDemandRateForecast.model_fields["elements"] # type: ignore[assignment] + copy_field(GenDDBCAverageDemandRateForecast.model_fields["elements"]) # type: ignore[assignment] ) diff --git a/src/s2python/ddbc/ddbc_average_demand_rate_forecast_element.py b/src/s2python/ddbc/ddbc_average_demand_rate_forecast_element.py index 8e8bdee..1e3f8d8 100644 --- a/src/s2python/ddbc/ddbc_average_demand_rate_forecast_element.py +++ b/src/s2python/ddbc/ddbc_average_demand_rate_forecast_element.py @@ -4,7 +4,12 @@ DDBCAverageDemandRateForecastElement as GenDDBCAverageDemandRateForecastElement, ) -from s2python.validate_values_mixin import catch_and_convert_exceptions, S2MessageComponent +from s2python.validate_values_mixin import ( + copy_config, + copy_field, + catch_and_convert_exceptions, + S2MessageComponent, +) @catch_and_convert_exceptions @@ -12,10 +17,9 @@ class DDBCAverageDemandRateForecastElement( GenDDBCAverageDemandRateForecastElement, S2MessageComponent, ): - model_config = GenDDBCAverageDemandRateForecastElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCAverageDemandRateForecastElement.model_config, validate_assignment=True) - duration: Duration = GenDDBCAverageDemandRateForecastElement.model_fields["duration"] # type: ignore[assignment,reportIncompatibleVariableOverride] - demand_rate_expected: float = GenDDBCAverageDemandRateForecastElement.model_fields[ + duration: Duration = copy_field(GenDDBCAverageDemandRateForecastElement.model_fields["duration"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + demand_rate_expected: float = copy_field(GenDDBCAverageDemandRateForecastElement.model_fields[ "demand_rate_expected" - ] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/ddbc/ddbc_instruction.py b/src/s2python/ddbc/ddbc_instruction.py index 2866a33..9d3ab05 100644 --- a/src/s2python/ddbc/ddbc_instruction.py +++ b/src/s2python/ddbc/ddbc_instruction.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import DDBCInstruction as GenDDBCInstruction from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,11 +11,10 @@ @catch_and_convert_exceptions class DDBCInstruction(GenDDBCInstruction, S2MessageComponent): - model_config = GenDDBCInstruction.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCInstruction.model_config, validate_assignment=True) - message_id: uuid.UUID = GenDDBCInstruction.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - actuator_id: uuid.UUID = GenDDBCInstruction.model_fields["actuator_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - operation_mode_id: uuid.UUID = GenDDBCInstruction.model_fields["operation_mode_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - operation_mode_factor: float = GenDDBCInstruction.model_fields["operation_mode_factor"] # type: ignore[assignment,reportIncompatibleVariableOverride] - abnormal_condition: bool = GenDDBCInstruction.model_fields["abnormal_condition"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenDDBCInstruction.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + actuator_id: uuid.UUID = copy_field(GenDDBCInstruction.model_fields["actuator_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + operation_mode_id: uuid.UUID = copy_field(GenDDBCInstruction.model_fields["operation_mode_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + operation_mode_factor: float = copy_field(GenDDBCInstruction.model_fields["operation_mode_factor"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + abnormal_condition: bool = copy_field(GenDDBCInstruction.model_fields["abnormal_condition"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/ddbc/ddbc_operation_mode.py b/src/s2python/ddbc/ddbc_operation_mode.py index d3ddfbd..0433908 100644 --- a/src/s2python/ddbc/ddbc_operation_mode.py +++ b/src/s2python/ddbc/ddbc_operation_mode.py @@ -7,6 +7,8 @@ from s2python.common.number_range import NumberRange from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -14,13 +16,12 @@ @catch_and_convert_exceptions class DDBCOperationMode(GenDDBCOperationMode, S2MessageComponent): - model_config = GenDDBCOperationMode.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCOperationMode.model_config, validate_assignment=True) # ? Id vs id - id: uuid.UUID = GenDDBCOperationMode.model_fields["Id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - power_ranges: List[PowerRange] = GenDDBCOperationMode.model_fields["power_ranges"] # type: ignore[assignment,reportIncompatibleVariableOverride] - supply_range: List[NumberRange] = GenDDBCOperationMode.model_fields["supply_range"] # type: ignore[assignment,reportIncompatibleVariableOverride] - abnormal_condition_only: bool = GenDDBCOperationMode.model_fields[ + id: uuid.UUID = copy_field(GenDDBCOperationMode.model_fields["Id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + power_ranges: List[PowerRange] = copy_field(GenDDBCOperationMode.model_fields["power_ranges"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + supply_range: List[NumberRange] = copy_field(GenDDBCOperationMode.model_fields["supply_range"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + abnormal_condition_only: bool = copy_field(GenDDBCOperationMode.model_fields[ "abnormal_condition_only" - ] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/ddbc/ddbc_system_description.py b/src/s2python/ddbc/ddbc_system_description.py index 007488d..c2dbcc5 100644 --- a/src/s2python/ddbc/ddbc_system_description.py +++ b/src/s2python/ddbc/ddbc_system_description.py @@ -7,6 +7,8 @@ from s2python.common.number_range import NumberRange from s2python.ddbc.ddbc_actuator_description import DDBCActuatorDescription from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -14,16 +16,15 @@ @catch_and_convert_exceptions class DDBCSystemDescription(GenDDBCSystemDescription, S2MessageComponent): - model_config = GenDDBCSystemDescription.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCSystemDescription.model_config, validate_assignment=True) - message_id: uuid.UUID = GenDDBCSystemDescription.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - actuators: List[DDBCActuatorDescription] = GenDDBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenDDBCSystemDescription.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + actuators: List[DDBCActuatorDescription] = copy_field(GenDDBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "actuators" - ] # type: ignore[assignment] - present_demand_rate: NumberRange = GenDDBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + present_demand_rate: NumberRange = copy_field(GenDDBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "present_demand_rate" - ] # type: ignore[assignment] - provides_average_demand_rate_forecast: bool = GenDDBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + provides_average_demand_rate_forecast: bool = copy_field(GenDDBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "provides_average_demand_rate_forecast" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ddbc/ddbc_timer_status.py b/src/s2python/ddbc/ddbc_timer_status.py index 2c4d95e..f5590df 100644 --- a/src/s2python/ddbc/ddbc_timer_status.py +++ b/src/s2python/ddbc/ddbc_timer_status.py @@ -3,6 +3,8 @@ from s2python.generated.gen_s2 import DDBCTimerStatus as GenDDBCTimerStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -10,9 +12,8 @@ @catch_and_convert_exceptions class DDBCTimerStatus(GenDDBCTimerStatus, S2MessageComponent): - model_config = GenDDBCTimerStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenDDBCTimerStatus.model_config, validate_assignment=True) - message_id: uuid.UUID = GenDDBCTimerStatus.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - timer_id: uuid.UUID = GenDDBCTimerStatus.model_fields["timer_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - actuator_id: uuid.UUID = GenDDBCTimerStatus.model_fields["actuator_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenDDBCTimerStatus.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + timer_id: uuid.UUID = copy_field(GenDDBCTimerStatus.model_fields["timer_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + actuator_id: uuid.UUID = copy_field(GenDDBCTimerStatus.model_fields["actuator_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_actuator_description.py b/src/s2python/frbc/frbc_actuator_description.py index f666516..9ef353d 100644 --- a/src/s2python/frbc/frbc_actuator_description.py +++ b/src/s2python/frbc/frbc_actuator_description.py @@ -12,6 +12,8 @@ FRBCActuatorDescription as GenFRBCActuatorDescription, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -19,18 +21,17 @@ @catch_and_convert_exceptions class FRBCActuatorDescription(GenFRBCActuatorDescription, S2MessageComponent): - model_config = GenFRBCActuatorDescription.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCActuatorDescription.model_config, validate_assignment=True) - id: uuid.UUID = GenFRBCActuatorDescription.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - operation_modes: List[FRBCOperationMode] = GenFRBCActuatorDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenFRBCActuatorDescription.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + operation_modes: List[FRBCOperationMode] = copy_field(GenFRBCActuatorDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "operation_modes" - ] # type: ignore[assignment] - transitions: List[Transition] = GenFRBCActuatorDescription.model_fields["transitions"] # type: ignore[assignment,reportIncompatibleVariableOverride] - timers: List[Timer] = GenFRBCActuatorDescription.model_fields["timers"] # type: ignore[assignment,reportIncompatibleVariableOverride] - supported_commodities: List[Commodity] = GenFRBCActuatorDescription.model_fields[ + ]) # type: ignore[assignment] + transitions: List[Transition] = copy_field(GenFRBCActuatorDescription.model_fields["transitions"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + timers: List[Timer] = copy_field(GenFRBCActuatorDescription.model_fields["timers"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + supported_commodities: List[Commodity] = copy_field(GenFRBCActuatorDescription.model_fields[ "supported_commodities" - ] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment,reportIncompatibleVariableOverride] @model_validator(mode="after") def validate_timers_in_transitions(self) -> Self: diff --git a/src/s2python/frbc/frbc_actuator_status.py b/src/s2python/frbc/frbc_actuator_status.py index ecf3b15..55e91ba 100644 --- a/src/s2python/frbc/frbc_actuator_status.py +++ b/src/s2python/frbc/frbc_actuator_status.py @@ -3,6 +3,8 @@ from s2python.generated.gen_s2 import FRBCActuatorStatus as GenFRBCActuatorStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -10,14 +12,13 @@ @catch_and_convert_exceptions class FRBCActuatorStatus(GenFRBCActuatorStatus, S2MessageComponent): - model_config = GenFRBCActuatorStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCActuatorStatus.model_config, validate_assignment=True) - active_operation_mode_id: uuid.UUID = GenFRBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + active_operation_mode_id: uuid.UUID = copy_field(GenFRBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "active_operation_mode_id" - ] # type: ignore[assignment] - actuator_id: uuid.UUID = GenFRBCActuatorStatus.model_fields["actuator_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - message_id: uuid.UUID = GenFRBCActuatorStatus.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - previous_operation_mode_id: Optional[uuid.UUID] = GenFRBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + actuator_id: uuid.UUID = copy_field(GenFRBCActuatorStatus.model_fields["actuator_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenFRBCActuatorStatus.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + previous_operation_mode_id: Optional[uuid.UUID] = copy_field(GenFRBCActuatorStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "previous_operation_mode_id" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/frbc/frbc_fill_level_target_profile.py b/src/s2python/frbc/frbc_fill_level_target_profile.py index f98b33a..749395e 100644 --- a/src/s2python/frbc/frbc_fill_level_target_profile.py +++ b/src/s2python/frbc/frbc_fill_level_target_profile.py @@ -8,6 +8,8 @@ FRBCFillLevelTargetProfile as GenFRBCFillLevelTargetProfile, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -15,10 +17,9 @@ @catch_and_convert_exceptions class FRBCFillLevelTargetProfile(GenFRBCFillLevelTargetProfile, S2MessageComponent): - model_config = GenFRBCFillLevelTargetProfile.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCFillLevelTargetProfile.model_config, validate_assignment=True) - elements: List[FRBCFillLevelTargetProfileElement] = GenFRBCFillLevelTargetProfile.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + elements: List[FRBCFillLevelTargetProfileElement] = copy_field(GenFRBCFillLevelTargetProfile.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "elements" - ] # type: ignore[assignment] - message_id: uuid.UUID = GenFRBCFillLevelTargetProfile.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + message_id: uuid.UUID = copy_field(GenFRBCFillLevelTargetProfile.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_fill_level_target_profile_element.py b/src/s2python/frbc/frbc_fill_level_target_profile_element.py index 3183745..fa2712c 100644 --- a/src/s2python/frbc/frbc_fill_level_target_profile_element.py +++ b/src/s2python/frbc/frbc_fill_level_target_profile_element.py @@ -9,6 +9,8 @@ FRBCFillLevelTargetProfileElement as GenFRBCFillLevelTargetProfileElement, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -16,13 +18,12 @@ @catch_and_convert_exceptions class FRBCFillLevelTargetProfileElement(GenFRBCFillLevelTargetProfileElement, S2MessageComponent): - model_config = GenFRBCFillLevelTargetProfileElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCFillLevelTargetProfileElement.model_config, validate_assignment=True) - duration: Duration = GenFRBCFillLevelTargetProfileElement.model_fields["duration"] # type: ignore[assignment,reportIncompatibleVariableOverride] - fill_level_range: NumberRange = GenFRBCFillLevelTargetProfileElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + duration: Duration = copy_field(GenFRBCFillLevelTargetProfileElement.model_fields["duration"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + fill_level_range: NumberRange = copy_field(GenFRBCFillLevelTargetProfileElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "fill_level_range" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] @model_validator(mode="after") def validate_start_end_order(self) -> Self: diff --git a/src/s2python/frbc/frbc_instruction.py b/src/s2python/frbc/frbc_instruction.py index a7693da..def6d43 100644 --- a/src/s2python/frbc/frbc_instruction.py +++ b/src/s2python/frbc/frbc_instruction.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import FRBCInstruction as GenFRBCInstruction from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,10 +11,9 @@ @catch_and_convert_exceptions class FRBCInstruction(GenFRBCInstruction, S2MessageComponent): - model_config = GenFRBCInstruction.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCInstruction.model_config, validate_assignment=True) - actuator_id: uuid.UUID = GenFRBCInstruction.model_fields["actuator_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - id: uuid.UUID = GenFRBCInstruction.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - message_id: uuid.UUID = GenFRBCInstruction.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - operation_mode: uuid.UUID = GenFRBCInstruction.model_fields["operation_mode"] # type: ignore[assignment,reportIncompatibleVariableOverride] + actuator_id: uuid.UUID = copy_field(GenFRBCInstruction.model_fields["actuator_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenFRBCInstruction.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenFRBCInstruction.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + operation_mode: uuid.UUID = copy_field(GenFRBCInstruction.model_fields["operation_mode"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_leakage_behaviour.py b/src/s2python/frbc/frbc_leakage_behaviour.py index 98c44a3..4f7721e 100644 --- a/src/s2python/frbc/frbc_leakage_behaviour.py +++ b/src/s2python/frbc/frbc_leakage_behaviour.py @@ -4,6 +4,8 @@ from s2python.frbc.frbc_leakage_behaviour_element import FRBCLeakageBehaviourElement from s2python.generated.gen_s2 import FRBCLeakageBehaviour as GenFRBCLeakageBehaviour from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -11,10 +13,9 @@ @catch_and_convert_exceptions class FRBCLeakageBehaviour(GenFRBCLeakageBehaviour, S2MessageComponent): - model_config = GenFRBCLeakageBehaviour.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCLeakageBehaviour.model_config, validate_assignment=True) - elements: List[FRBCLeakageBehaviourElement] = GenFRBCLeakageBehaviour.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + elements: List[FRBCLeakageBehaviourElement] = copy_field(GenFRBCLeakageBehaviour.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "elements" - ] # type: ignore[assignment] - message_id: uuid.UUID = GenFRBCLeakageBehaviour.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + message_id: uuid.UUID = copy_field(GenFRBCLeakageBehaviour.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_leakage_behaviour_element.py b/src/s2python/frbc/frbc_leakage_behaviour_element.py index 594c594..5f390df 100644 --- a/src/s2python/frbc/frbc_leakage_behaviour_element.py +++ b/src/s2python/frbc/frbc_leakage_behaviour_element.py @@ -8,6 +8,8 @@ FRBCLeakageBehaviourElement as GenFRBCLeakageBehaviourElement, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -15,12 +17,11 @@ @catch_and_convert_exceptions class FRBCLeakageBehaviourElement(GenFRBCLeakageBehaviourElement, S2MessageComponent): - model_config = GenFRBCLeakageBehaviourElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCLeakageBehaviourElement.model_config, validate_assignment=True) - fill_level_range: NumberRange = GenFRBCLeakageBehaviourElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + fill_level_range: NumberRange = copy_field(GenFRBCLeakageBehaviourElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "fill_level_range" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] @model_validator(mode="after") def validate_start_end_order(self) -> Self: diff --git a/src/s2python/frbc/frbc_operation_mode.py b/src/s2python/frbc/frbc_operation_mode.py index cbee3d4..ce1c4ec 100644 --- a/src/s2python/frbc/frbc_operation_mode.py +++ b/src/s2python/frbc/frbc_operation_mode.py @@ -9,6 +9,8 @@ from s2python.frbc.frbc_operation_mode_element import FRBCOperationModeElement from s2python.generated.gen_s2 import FRBCOperationMode as GenFRBCOperationMode from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -17,11 +19,10 @@ @catch_and_convert_exceptions class FRBCOperationMode(GenFRBCOperationMode, S2MessageComponent): - model_config = GenFRBCOperationMode.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCOperationMode.model_config, validate_assignment=True) - id: uuid.UUID = GenFRBCOperationMode.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - elements: List[FRBCOperationModeElement] = GenFRBCOperationMode.model_fields["elements"] # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenFRBCOperationMode.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + elements: List[FRBCOperationModeElement] = copy_field(GenFRBCOperationMode.model_fields["elements"]) # type: ignore[assignment,reportIncompatibleVariableOverride] @model_validator(mode="after") def validate_contiguous_fill_levels_operation_mode_elements(self) -> Self: diff --git a/src/s2python/frbc/frbc_operation_mode_element.py b/src/s2python/frbc/frbc_operation_mode_element.py index e22ddb7..0cb971f 100644 --- a/src/s2python/frbc/frbc_operation_mode_element.py +++ b/src/s2python/frbc/frbc_operation_mode_element.py @@ -5,6 +5,8 @@ FRBCOperationModeElement as GenFRBCOperationModeElement, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -12,16 +14,15 @@ @catch_and_convert_exceptions class FRBCOperationModeElement(GenFRBCOperationModeElement, S2MessageComponent): - model_config = GenFRBCOperationModeElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCOperationModeElement.model_config, validate_assignment=True) - fill_level_range: NumberRange = GenFRBCOperationModeElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + fill_level_range: NumberRange = copy_field(GenFRBCOperationModeElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "fill_level_range" - ] # type: ignore[assignment] - fill_rate: NumberRange = GenFRBCOperationModeElement.model_fields["fill_rate"] # type: ignore[assignment,reportIncompatibleVariableOverride] - power_ranges: List[PowerRange] = GenFRBCOperationModeElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + fill_rate: NumberRange = copy_field(GenFRBCOperationModeElement.model_fields["fill_rate"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + power_ranges: List[PowerRange] = copy_field(GenFRBCOperationModeElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_ranges" - ] # type: ignore[assignment] - running_costs: Optional[NumberRange] = GenFRBCOperationModeElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + running_costs: Optional[NumberRange] = copy_field(GenFRBCOperationModeElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "running_costs" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/frbc/frbc_storage_description.py b/src/s2python/frbc/frbc_storage_description.py index 7672d85..00a41d1 100644 --- a/src/s2python/frbc/frbc_storage_description.py +++ b/src/s2python/frbc/frbc_storage_description.py @@ -3,6 +3,8 @@ FRBCStorageDescription as GenFRBCStorageDescription, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -10,9 +12,8 @@ @catch_and_convert_exceptions class FRBCStorageDescription(GenFRBCStorageDescription, S2MessageComponent): - model_config = GenFRBCStorageDescription.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCStorageDescription.model_config, validate_assignment=True) - fill_level_range: NumberRange = GenFRBCStorageDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + fill_level_range: NumberRange = copy_field(GenFRBCStorageDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "fill_level_range" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/frbc/frbc_storage_status.py b/src/s2python/frbc/frbc_storage_status.py index 04ade4c..8e38c52 100644 --- a/src/s2python/frbc/frbc_storage_status.py +++ b/src/s2python/frbc/frbc_storage_status.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import FRBCStorageStatus as GenFRBCStorageStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,7 +11,6 @@ @catch_and_convert_exceptions class FRBCStorageStatus(GenFRBCStorageStatus, S2MessageComponent): - model_config = GenFRBCStorageStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCStorageStatus.model_config, validate_assignment=True) - message_id: uuid.UUID = GenFRBCStorageStatus.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenFRBCStorageStatus.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_system_description.py b/src/s2python/frbc/frbc_system_description.py index f1efdf8..cb63b37 100644 --- a/src/s2python/frbc/frbc_system_description.py +++ b/src/s2python/frbc/frbc_system_description.py @@ -3,6 +3,8 @@ from s2python.generated.gen_s2 import FRBCSystemDescription as GenFRBCSystemDescription from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -12,11 +14,10 @@ @catch_and_convert_exceptions class FRBCSystemDescription(GenFRBCSystemDescription, S2MessageComponent): - model_config = GenFRBCSystemDescription.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCSystemDescription.model_config, validate_assignment=True) - actuators: List[FRBCActuatorDescription] = GenFRBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + actuators: List[FRBCActuatorDescription] = copy_field(GenFRBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "actuators" - ] # type: ignore[assignment] - message_id: uuid.UUID = GenFRBCSystemDescription.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - storage: FRBCStorageDescription = GenFRBCSystemDescription.model_fields["storage"] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + message_id: uuid.UUID = copy_field(GenFRBCSystemDescription.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + storage: FRBCStorageDescription = copy_field(GenFRBCSystemDescription.model_fields["storage"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_timer_status.py b/src/s2python/frbc/frbc_timer_status.py index b374750..3596bea 100644 --- a/src/s2python/frbc/frbc_timer_status.py +++ b/src/s2python/frbc/frbc_timer_status.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import FRBCTimerStatus as GenFRBCTimerStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,9 +11,8 @@ @catch_and_convert_exceptions class FRBCTimerStatus(GenFRBCTimerStatus, S2MessageComponent): - model_config = GenFRBCTimerStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCTimerStatus.model_config, validate_assignment=True) - actuator_id: uuid.UUID = GenFRBCTimerStatus.model_fields["actuator_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - message_id: uuid.UUID = GenFRBCTimerStatus.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - timer_id: uuid.UUID = GenFRBCTimerStatus.model_fields["timer_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + actuator_id: uuid.UUID = copy_field(GenFRBCTimerStatus.model_fields["actuator_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenFRBCTimerStatus.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + timer_id: uuid.UUID = copy_field(GenFRBCTimerStatus.model_fields["timer_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_usage_forecast.py b/src/s2python/frbc/frbc_usage_forecast.py index 777d7cb..6dbe887 100644 --- a/src/s2python/frbc/frbc_usage_forecast.py +++ b/src/s2python/frbc/frbc_usage_forecast.py @@ -3,6 +3,8 @@ from s2python.generated.gen_s2 import FRBCUsageForecast as GenFRBCUsageForecast from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -11,8 +13,7 @@ @catch_and_convert_exceptions class FRBCUsageForecast(GenFRBCUsageForecast, S2MessageComponent): - model_config = GenFRBCUsageForecast.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCUsageForecast.model_config, validate_assignment=True) - elements: List[FRBCUsageForecastElement] = GenFRBCUsageForecast.model_fields["elements"] # type: ignore[assignment,reportIncompatibleVariableOverride] - message_id: uuid.UUID = GenFRBCUsageForecast.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + elements: List[FRBCUsageForecastElement] = copy_field(GenFRBCUsageForecast.model_fields["elements"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenFRBCUsageForecast.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/frbc/frbc_usage_forecast_element.py b/src/s2python/frbc/frbc_usage_forecast_element.py index c81467a..6c3cba3 100644 --- a/src/s2python/frbc/frbc_usage_forecast_element.py +++ b/src/s2python/frbc/frbc_usage_forecast_element.py @@ -4,6 +4,8 @@ FRBCUsageForecastElement as GenFRBCUsageForecastElement, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -11,7 +13,6 @@ @catch_and_convert_exceptions class FRBCUsageForecastElement(GenFRBCUsageForecastElement, S2MessageComponent): - model_config = GenFRBCUsageForecastElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenFRBCUsageForecastElement.model_config, validate_assignment=True) - duration: Duration = GenFRBCUsageForecastElement.model_fields["duration"] # type: ignore[assignment,reportIncompatibleVariableOverride] + duration: Duration = copy_field(GenFRBCUsageForecastElement.model_fields["duration"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/generated/gen_s2.py b/src/s2python/generated/gen_s2.py index 34793f1..4f41ea2 100644 --- a/src/s2python/generated/gen_s2.py +++ b/src/s2python/generated/gen_s2.py @@ -7,7 +7,9 @@ from enum import Enum from typing import List, Literal, Optional -from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel, conint, constr +from pydantic import AwareDatetime, ConfigDict, Field, RootModel, conint, constr + +from s2python.s2_base_model import S2BaseModel class Duration(RootModel[conint(ge=0)]): @@ -156,7 +158,7 @@ class ReceptionStatusValues(str, Enum): OK = "OK" -class NumberRange(BaseModel): +class NumberRange(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -164,7 +166,7 @@ class NumberRange(BaseModel): end_of_range: float = Field(..., description="Number that defines the end of the range") -class Transition(BaseModel): +class Transition(S2BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True @@ -208,7 +210,7 @@ class Transition(BaseModel): ) -class Timer(BaseModel): +class Timer(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -225,7 +227,7 @@ class Timer(BaseModel): ) -class PEBCPowerEnvelopeElement(BaseModel): +class PEBCPowerEnvelopeElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -240,7 +242,7 @@ class PEBCPowerEnvelopeElement(BaseModel): ) -class FRBCStorageDescription(BaseModel): +class FRBCStorageDescription(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -270,7 +272,7 @@ class FRBCStorageDescription(BaseModel): ) -class FRBCLeakageBehaviourElement(BaseModel): +class FRBCLeakageBehaviourElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -284,7 +286,7 @@ class FRBCLeakageBehaviourElement(BaseModel): ) -class FRBCUsageForecastElement(BaseModel): +class FRBCUsageForecastElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -321,7 +323,7 @@ class FRBCUsageForecastElement(BaseModel): ) -class FRBCFillLevelTargetProfileElement(BaseModel): +class FRBCFillLevelTargetProfileElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -332,7 +334,7 @@ class FRBCFillLevelTargetProfileElement(BaseModel): ) -class DDBCAverageDemandRateForecastElement(BaseModel): +class DDBCAverageDemandRateForecastElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -432,7 +434,7 @@ class PPBCPowerSequenceStatus(str, Enum): ABORTED = "ABORTED" -class OMBCTimerStatus(BaseModel): +class OMBCTimerStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -445,7 +447,7 @@ class OMBCTimerStatus(BaseModel): ) -class FRBCTimerStatus(BaseModel): +class FRBCTimerStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -459,7 +461,7 @@ class FRBCTimerStatus(BaseModel): ) -class DDBCTimerStatus(BaseModel): +class DDBCTimerStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -473,7 +475,7 @@ class DDBCTimerStatus(BaseModel): ) -class SelectControlType(BaseModel): +class SelectControlType(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -485,7 +487,7 @@ class SelectControlType(BaseModel): ) -class SessionRequest(BaseModel): +class SessionRequest(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -497,7 +499,7 @@ class SessionRequest(BaseModel): ) -class RevokeObject(BaseModel): +class RevokeObject(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -509,7 +511,7 @@ class RevokeObject(BaseModel): object_id: ID = Field(..., description="The ID of object that needs to be revoked") -class Handshake(BaseModel): +class Handshake(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -523,7 +525,7 @@ class Handshake(BaseModel): ) -class HandshakeResponse(BaseModel): +class HandshakeResponse(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -534,7 +536,7 @@ class HandshakeResponse(BaseModel): ) -class ReceptionStatus(BaseModel): +class ReceptionStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -547,7 +549,7 @@ class ReceptionStatus(BaseModel): ) -class InstructionStatusUpdate(BaseModel): +class InstructionStatusUpdate(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -560,7 +562,7 @@ class InstructionStatusUpdate(BaseModel): ) -class PEBCEnergyConstraint(BaseModel): +class PEBCEnergyConstraint(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -590,7 +592,7 @@ class PEBCEnergyConstraint(BaseModel): ) -class PPBCScheduleInstruction(BaseModel): +class PPBCScheduleInstruction(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -621,7 +623,7 @@ class PPBCScheduleInstruction(BaseModel): ) -class PPBCStartInterruptionInstruction(BaseModel): +class PPBCStartInterruptionInstruction(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -651,7 +653,7 @@ class PPBCStartInterruptionInstruction(BaseModel): ) -class PPBCEndInterruptionInstruction(BaseModel): +class PPBCEndInterruptionInstruction(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -682,7 +684,7 @@ class PPBCEndInterruptionInstruction(BaseModel): ) -class OMBCStatus(BaseModel): +class OMBCStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -703,7 +705,7 @@ class OMBCStatus(BaseModel): ) -class OMBCInstruction(BaseModel): +class OMBCInstruction(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -729,7 +731,7 @@ class OMBCInstruction(BaseModel): ) -class FRBCActuatorStatus(BaseModel): +class FRBCActuatorStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -753,7 +755,7 @@ class FRBCActuatorStatus(BaseModel): ) -class FRBCStorageStatus(BaseModel): +class FRBCStorageStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -762,7 +764,7 @@ class FRBCStorageStatus(BaseModel): present_fill_level: float = Field(..., description="Present fill level of the Storage") -class FRBCLeakageBehaviour(BaseModel): +class FRBCLeakageBehaviour(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -780,7 +782,7 @@ class FRBCLeakageBehaviour(BaseModel): ) -class FRBCInstruction(BaseModel): +class FRBCInstruction(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -807,7 +809,7 @@ class FRBCInstruction(BaseModel): ) -class FRBCUsageForecast(BaseModel): +class FRBCUsageForecast(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -824,7 +826,7 @@ class FRBCUsageForecast(BaseModel): ) -class FRBCFillLevelTargetProfile(BaseModel): +class FRBCFillLevelTargetProfile(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -841,7 +843,7 @@ class FRBCFillLevelTargetProfile(BaseModel): ) -class DDBCActuatorStatus(BaseModel): +class DDBCActuatorStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -865,7 +867,7 @@ class DDBCActuatorStatus(BaseModel): ) -class DDBCInstruction(BaseModel): +class DDBCInstruction(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -890,7 +892,7 @@ class DDBCInstruction(BaseModel): ) -class DDBCAverageDemandRateForecast(BaseModel): +class DDBCAverageDemandRateForecast(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -905,7 +907,7 @@ class DDBCAverageDemandRateForecast(BaseModel): ) -class PowerValue(BaseModel): +class PowerValue(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -917,7 +919,7 @@ class PowerValue(BaseModel): ) -class PowerForecastValue(BaseModel): +class PowerForecastValue(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -951,7 +953,7 @@ class PowerForecastValue(BaseModel): ) -class PowerRange(BaseModel): +class PowerRange(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -964,7 +966,7 @@ class PowerRange(BaseModel): ) -class Role(BaseModel): +class Role(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -974,7 +976,7 @@ class Role(BaseModel): commodity: Commodity = Field(..., description="Commodity the role refers to.") -class PowerForecastElement(BaseModel): +class PowerForecastElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -987,7 +989,7 @@ class PowerForecastElement(BaseModel): ) -class PEBCAllowedLimitRange(BaseModel): +class PEBCAllowedLimitRange(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1007,7 +1009,7 @@ class PEBCAllowedLimitRange(BaseModel): ) -class PEBCPowerEnvelope(BaseModel): +class PEBCPowerEnvelope(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1026,7 +1028,7 @@ class PEBCPowerEnvelope(BaseModel): ) -class PPBCPowerSequenceElement(BaseModel): +class PPBCPowerSequenceElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1039,7 +1041,7 @@ class PPBCPowerSequenceElement(BaseModel): ) -class PPBCPowerSequenceContainerStatus(BaseModel): +class PPBCPowerSequenceContainerStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1064,7 +1066,7 @@ class PPBCPowerSequenceContainerStatus(BaseModel): ) -class OMBCOperationMode(BaseModel): +class OMBCOperationMode(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1092,7 +1094,7 @@ class OMBCOperationMode(BaseModel): ) -class FRBCOperationModeElement(BaseModel): +class FRBCOperationModeElement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1116,7 +1118,7 @@ class FRBCOperationModeElement(BaseModel): ) -class DDBCOperationMode(BaseModel): +class DDBCOperationMode(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1148,7 +1150,7 @@ class DDBCOperationMode(BaseModel): ) -class ResourceManagerDetails(BaseModel): +class ResourceManagerDetails(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1201,7 +1203,7 @@ class ResourceManagerDetails(BaseModel): ) -class PowerMeasurement(BaseModel): +class PowerMeasurement(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1218,7 +1220,7 @@ class PowerMeasurement(BaseModel): ) -class PowerForecast(BaseModel): +class PowerForecast(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1235,7 +1237,7 @@ class PowerForecast(BaseModel): ) -class PEBCPowerConstraints(BaseModel): +class PEBCPowerConstraints(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1263,7 +1265,7 @@ class PEBCPowerConstraints(BaseModel): ) -class PEBCInstruction(BaseModel): +class PEBCInstruction(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1292,7 +1294,7 @@ class PEBCInstruction(BaseModel): ) -class PPBCPowerProfileStatus(BaseModel): +class PPBCPowerProfileStatus(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1306,7 +1308,7 @@ class PPBCPowerProfileStatus(BaseModel): ) -class OMBCSystemDescription(BaseModel): +class OMBCSystemDescription(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1336,7 +1338,7 @@ class OMBCSystemDescription(BaseModel): ) -class PPBCPowerSequence(BaseModel): +class PPBCPowerSequence(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1363,7 +1365,7 @@ class PPBCPowerSequence(BaseModel): ) -class FRBCOperationMode(BaseModel): +class FRBCOperationMode(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1387,7 +1389,7 @@ class FRBCOperationMode(BaseModel): ) -class DDBCActuatorDescription(BaseModel): +class DDBCActuatorDescription(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1425,7 +1427,7 @@ class DDBCActuatorDescription(BaseModel): ) -class DDBCSystemDescription(BaseModel): +class DDBCSystemDescription(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1450,7 +1452,7 @@ class DDBCSystemDescription(BaseModel): ) -class PPBCPowerSequenceContainer(BaseModel): +class PPBCPowerSequenceContainer(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1466,7 +1468,7 @@ class PPBCPowerSequenceContainer(BaseModel): ) -class FRBCActuatorDescription(BaseModel): +class FRBCActuatorDescription(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1501,7 +1503,7 @@ class FRBCActuatorDescription(BaseModel): ) -class PPBCPowerProfileDefinition(BaseModel): +class PPBCPowerProfileDefinition(S2BaseModel): model_config = ConfigDict( extra="forbid", ) @@ -1527,7 +1529,7 @@ class PPBCPowerProfileDefinition(BaseModel): ) -class FRBCSystemDescription(BaseModel): +class FRBCSystemDescription(S2BaseModel): model_config = ConfigDict( extra="forbid", ) diff --git a/src/s2python/ombc/ombc_instruction.py b/src/s2python/ombc/ombc_instruction.py index 6131916..bf66bf6 100644 --- a/src/s2python/ombc/ombc_instruction.py +++ b/src/s2python/ombc/ombc_instruction.py @@ -2,6 +2,8 @@ from s2python.generated.gen_s2 import OMBCInstruction as GenOMBCInstruction from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,11 +11,10 @@ @catch_and_convert_exceptions class OMBCInstruction(GenOMBCInstruction, S2MessageComponent): - model_config = GenOMBCInstruction.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenOMBCInstruction.model_config, validate_assignment=True) - id: uuid.UUID = GenOMBCInstruction.model_fields["id"] # type: ignore[assignment] - message_id: uuid.UUID = GenOMBCInstruction.model_fields["message_id"] # type: ignore[assignment] - abnormal_condition: bool = GenOMBCInstruction.model_fields["abnormal_condition"] # type: ignore[assignment] - operation_mode_factor: float = GenOMBCInstruction.model_fields["operation_mode_factor"] # type: ignore[assignment] - operation_mode_id: uuid.UUID = GenOMBCInstruction.model_fields["operation_mode_id"] # type: ignore[assignment] + id: uuid.UUID = copy_field(GenOMBCInstruction.model_fields["id"]) # type: ignore[assignment] + message_id: uuid.UUID = copy_field(GenOMBCInstruction.model_fields["message_id"]) # type: ignore[assignment] + abnormal_condition: bool = copy_field(GenOMBCInstruction.model_fields["abnormal_condition"]) # type: ignore[assignment] + operation_mode_factor: float = copy_field(GenOMBCInstruction.model_fields["operation_mode_factor"]) # type: ignore[assignment] + operation_mode_id: uuid.UUID = copy_field(GenOMBCInstruction.model_fields["operation_mode_id"]) # type: ignore[assignment] diff --git a/src/s2python/ombc/ombc_operation_mode.py b/src/s2python/ombc/ombc_operation_mode.py index fdc9853..1c3c6c6 100644 --- a/src/s2python/ombc/ombc_operation_mode.py +++ b/src/s2python/ombc/ombc_operation_mode.py @@ -6,6 +6,8 @@ from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -13,13 +15,12 @@ @catch_and_convert_exceptions class OMBCOperationMode(GenOMBCOperationMode, S2MessageComponent): - model_config = GenOMBCOperationMode.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenOMBCOperationMode.model_config, validate_assignment=True) - id: uuid.UUID = GenOMBCOperationMode.model_fields["id"] # type: ignore[assignment] - power_ranges: List[PowerRange] = GenOMBCOperationMode.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenOMBCOperationMode.model_fields["id"]) # type: ignore[assignment] + power_ranges: List[PowerRange] = copy_field(GenOMBCOperationMode.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_ranges" - ] # type: ignore[assignment] - abnormal_condition_only: bool = GenOMBCOperationMode.model_fields[ + ]) # type: ignore[assignment] + abnormal_condition_only: bool = copy_field(GenOMBCOperationMode.model_fields[ "abnormal_condition_only" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ombc/ombc_status.py b/src/s2python/ombc/ombc_status.py index c782c25..b2044fc 100644 --- a/src/s2python/ombc/ombc_status.py +++ b/src/s2python/ombc/ombc_status.py @@ -3,6 +3,8 @@ from s2python.generated.gen_s2 import OMBCStatus as GenOMBCStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -10,8 +12,7 @@ @catch_and_convert_exceptions class OMBCStatus(GenOMBCStatus, S2MessageComponent): - model_config = GenOMBCStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenOMBCStatus.model_config, validate_assignment=True) - message_id: uuid.UUID = GenOMBCStatus.model_fields["message_id"] # type: ignore[assignment] - operation_mode_factor: float = GenOMBCStatus.model_fields["operation_mode_factor"] # type: ignore[assignment] + message_id: uuid.UUID = copy_field(GenOMBCStatus.model_fields["message_id"]) # type: ignore[assignment] + operation_mode_factor: float = copy_field(GenOMBCStatus.model_fields["operation_mode_factor"]) # type: ignore[assignment] diff --git a/src/s2python/ombc/ombc_system_description.py b/src/s2python/ombc/ombc_system_description.py index aa9f457..c44943f 100644 --- a/src/s2python/ombc/ombc_system_description.py +++ b/src/s2python/ombc/ombc_system_description.py @@ -7,6 +7,8 @@ from s2python.common.timer import Timer from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -14,12 +16,11 @@ @catch_and_convert_exceptions class OMBCSystemDescription(GenOMBCSystemDescription, S2MessageComponent): - model_config = GenOMBCSystemDescription.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenOMBCSystemDescription.model_config, validate_assignment=True) - message_id: uuid.UUID = GenOMBCSystemDescription.model_fields["message_id"] # type: ignore[assignment] - operation_modes: List[OMBCOperationMode] = GenOMBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenOMBCSystemDescription.model_fields["message_id"]) # type: ignore[assignment] + operation_modes: List[OMBCOperationMode] = copy_field(GenOMBCSystemDescription.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "operation_modes" - ] # type: ignore[assignment] - transitions: List[Transition] = GenOMBCSystemDescription.model_fields["transitions"] # type: ignore[assignment] - timers: List[Timer] = GenOMBCSystemDescription.model_fields["timers"] # type: ignore[assignment] + ]) # type: ignore[assignment] + transitions: List[Transition] = copy_field(GenOMBCSystemDescription.model_fields["transitions"]) # type: ignore[assignment] + timers: List[Timer] = copy_field(GenOMBCSystemDescription.model_fields["timers"]) # type: ignore[assignment] diff --git a/src/s2python/ombc/ombc_timer_status.py b/src/s2python/ombc/ombc_timer_status.py index 906ea7d..7283875 100644 --- a/src/s2python/ombc/ombc_timer_status.py +++ b/src/s2python/ombc/ombc_timer_status.py @@ -3,6 +3,8 @@ from s2python.generated.gen_s2 import OMBCTimerStatus as GenOMBCTimerStatus from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -10,8 +12,7 @@ @catch_and_convert_exceptions class OMBCTimerStatus(GenOMBCTimerStatus, S2MessageComponent): - model_config = GenOMBCTimerStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenOMBCTimerStatus.model_config, validate_assignment=True) - message_id: UUID = GenOMBCTimerStatus.model_fields["message_id"] # type: ignore[assignment] - timer_id: UUID = GenOMBCTimerStatus.model_fields["timer_id"] # type: ignore[assignment] + message_id: UUID = copy_field(GenOMBCTimerStatus.model_fields["message_id"]) # type: ignore[assignment] + timer_id: UUID = copy_field(GenOMBCTimerStatus.model_fields["timer_id"]) # type: ignore[assignment] diff --git a/src/s2python/pebc/pebc_allowed_limit_range.py b/src/s2python/pebc/pebc_allowed_limit_range.py index 31dd3af..2f51fa6 100644 --- a/src/s2python/pebc/pebc_allowed_limit_range.py +++ b/src/s2python/pebc/pebc_allowed_limit_range.py @@ -6,6 +6,8 @@ ) from s2python.common import CommodityQuantity, NumberRange from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -13,18 +15,17 @@ @catch_and_convert_exceptions class PEBCAllowedLimitRange(GenPEBCAllowedLimitRange, S2MessageComponent): - model_config = GenPEBCAllowedLimitRange.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPEBCAllowedLimitRange.model_config, validate_assignment=True) - commodity_quantity: CommodityQuantity = GenPEBCAllowedLimitRange.model_fields[ + commodity_quantity: CommodityQuantity = copy_field(GenPEBCAllowedLimitRange.model_fields[ "commodity_quantity" - ] # type: ignore[assignment,reportIncompatibleVariableOverride] - limit_type: GenPEBCPowerEnvelopeLimitType = GenPEBCAllowedLimitRange.model_fields[ + ]) # type: ignore[assignment,reportIncompatibleVariableOverride] + limit_type: GenPEBCPowerEnvelopeLimitType = copy_field(GenPEBCAllowedLimitRange.model_fields[ "limit_type" - ] # type: ignore[assignment,reportIncompatibleVariableOverride] - range_boundary: NumberRange = GenPEBCAllowedLimitRange.model_fields["range_boundary"] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment,reportIncompatibleVariableOverride] + range_boundary: NumberRange = copy_field(GenPEBCAllowedLimitRange.model_fields["range_boundary"]) # type: ignore[assignment,reportIncompatibleVariableOverride] abnormal_condition_only: bool = [ - GenPEBCAllowedLimitRange.model_fields["abnormal_condition_only"] # type: ignore[assignment,reportIncompatibleVariableOverride] + copy_field(GenPEBCAllowedLimitRange.model_fields["abnormal_condition_only"]) # type: ignore[assignment,reportIncompatibleVariableOverride] ] @model_validator(mode="after") diff --git a/src/s2python/pebc/pebc_energy_constraint.py b/src/s2python/pebc/pebc_energy_constraint.py index eaf76fe..12db6f0 100644 --- a/src/s2python/pebc/pebc_energy_constraint.py +++ b/src/s2python/pebc/pebc_energy_constraint.py @@ -5,6 +5,8 @@ ) from s2python.common import CommodityQuantity from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -12,14 +14,13 @@ @catch_and_convert_exceptions class PEBCEnergyConstraint(GenPEBCEnergyConstraint, S2MessageComponent): - model_config = GenPEBCEnergyConstraint.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPEBCEnergyConstraint.model_config, validate_assignment=True) - message_id: uuid.UUID = GenPEBCEnergyConstraint.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - id: uuid.UUID = GenPEBCEnergyConstraint.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPEBCEnergyConstraint.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPEBCEnergyConstraint.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] - upper_average_power: float = GenPEBCEnergyConstraint.model_fields["upper_average_power"] # type: ignore[assignment,reportIncompatibleVariableOverride] - lower_average_power: float = GenPEBCEnergyConstraint.model_fields["lower_average_power"] # type: ignore[assignment,reportIncompatibleVariableOverride] + upper_average_power: float = copy_field(GenPEBCEnergyConstraint.model_fields["upper_average_power"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + lower_average_power: float = copy_field(GenPEBCEnergyConstraint.model_fields["lower_average_power"]) # type: ignore[assignment,reportIncompatibleVariableOverride] commodity_quantity: CommodityQuantity = [ - GenPEBCEnergyConstraint.model_fields["commodity_quantity"] # type: ignore[assignment,reportIncompatibleVariableOverride] + copy_field(GenPEBCEnergyConstraint.model_fields["commodity_quantity"]) # type: ignore[assignment,reportIncompatibleVariableOverride] ] diff --git a/src/s2python/pebc/pebc_instruction.py b/src/s2python/pebc/pebc_instruction.py index 320f931..8322737 100644 --- a/src/s2python/pebc/pebc_instruction.py +++ b/src/s2python/pebc/pebc_instruction.py @@ -6,6 +6,8 @@ ) from s2python.pebc.pebc_power_envelope import PEBCPowerEnvelope from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -13,15 +15,14 @@ @catch_and_convert_exceptions class PEBCInstruction(GenPEBCInstruction, S2MessageComponent): - model_config = GenPEBCInstruction.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPEBCInstruction.model_config, validate_assignment=True) - message_id: uuid.UUID = GenPEBCInstruction.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - id: uuid.UUID = GenPEBCInstruction.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPEBCInstruction.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPEBCInstruction.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] power_constraints_id: uuid.UUID = [ # type: ignore[reportIncompatibleVariableOverride] - GenPEBCInstruction.model_fields["power_constraints_id"] # type: ignore[assignment] + copy_field(GenPEBCInstruction.model_fields["power_constraints_id"]) # type: ignore[assignment] ] power_envelopes: List[PEBCPowerEnvelope] = [ # type: ignore[reportIncompatibleVariableOverride] - GenPEBCInstruction.model_fields["power_envelopes"] # type: ignore[assignment] + copy_field(GenPEBCInstruction.model_fields["power_envelopes"]) # type: ignore[assignment] ] - abnormal_condition: bool = GenPEBCInstruction.model_fields["abnormal_condition"] # type: ignore[assignment,reportIncompatibleVariableOverride] + abnormal_condition: bool = copy_field(GenPEBCInstruction.model_fields["abnormal_condition"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/pebc/pebc_power_constraints.py b/src/s2python/pebc/pebc_power_constraints.py index 64035e0..ecd26a7 100644 --- a/src/s2python/pebc/pebc_power_constraints.py +++ b/src/s2python/pebc/pebc_power_constraints.py @@ -12,6 +12,8 @@ ) from s2python.pebc.pebc_allowed_limit_range import PEBCAllowedLimitRange from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -19,17 +21,16 @@ @catch_and_convert_exceptions class PEBCPowerConstraints(GenPEBCPowerConstraints, S2MessageComponent): - model_config = GenPEBCPowerConstraints.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPEBCPowerConstraints.model_config, validate_assignment=True) - message_id: uuid.UUID = GenPEBCPowerConstraints.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - id: uuid.UUID = GenPEBCPowerConstraints.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - consequence_type: GenPEBCPowerEnvelopeConsequenceType = GenPEBCPowerConstraints.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPEBCPowerConstraints.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPEBCPowerConstraints.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + consequence_type: GenPEBCPowerEnvelopeConsequenceType = copy_field(GenPEBCPowerConstraints.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "consequence_type" - ] # type: ignore[assignment] - allowed_limit_ranges: List[PEBCAllowedLimitRange] = GenPEBCPowerConstraints.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + allowed_limit_ranges: List[PEBCAllowedLimitRange] = copy_field(GenPEBCPowerConstraints.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "allowed_limit_ranges" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] @model_validator(mode="after") def validate_has_one_upper_one_lower_limit_range(self) -> Self: diff --git a/src/s2python/pebc/pebc_power_envelope.py b/src/s2python/pebc/pebc_power_envelope.py index 8ac20e6..c4c6044 100644 --- a/src/s2python/pebc/pebc_power_envelope.py +++ b/src/s2python/pebc/pebc_power_envelope.py @@ -5,6 +5,8 @@ from s2python.pebc.pebc_power_envelope_element import PEBCPowerEnvelopeElement from s2python.common import CommodityQuantity from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -12,12 +14,11 @@ @catch_and_convert_exceptions class PEBCPowerEnvelope(GenPEBCPowerEnvelope, S2MessageComponent): - model_config = GenPEBCPowerEnvelope.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPEBCPowerEnvelope.model_config, validate_assignment=True) - commodity_quantity: CommodityQuantity = GenPEBCPowerEnvelope.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + commodity_quantity: CommodityQuantity = copy_field(GenPEBCPowerEnvelope.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "commodity_quantity" - ] # type: ignore[assignment] - power_envelope_elements: List[PEBCPowerEnvelopeElement] = GenPEBCPowerEnvelope.model_fields[ # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + power_envelope_elements: List[PEBCPowerEnvelopeElement] = copy_field(GenPEBCPowerEnvelope.model_fields[ # type: ignore[assignment,reportIncompatibleVariableOverride] "power_envelope_elements" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/pebc/pebc_power_envelope_element.py b/src/s2python/pebc/pebc_power_envelope_element.py index 0e9f53b..ab63015 100644 --- a/src/s2python/pebc/pebc_power_envelope_element.py +++ b/src/s2python/pebc/pebc_power_envelope_element.py @@ -2,6 +2,8 @@ PEBCPowerEnvelopeElement as GenPEBCPowerEnvelopeElement, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -9,8 +11,7 @@ @catch_and_convert_exceptions class PEBCPowerEnvelopeElement(GenPEBCPowerEnvelopeElement, S2MessageComponent): - model_config = GenPEBCPowerEnvelopeElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPEBCPowerEnvelopeElement.model_config, validate_assignment=True) - lower_limit: float = GenPEBCPowerEnvelopeElement.model_fields["lower_limit"] # type: ignore[assignment,reportIncompatibleVariableOverride] - upper_limit: float = GenPEBCPowerEnvelopeElement.model_fields["upper_limit"] # type: ignore[assignment,reportIncompatibleVariableOverride] + lower_limit: float = copy_field(GenPEBCPowerEnvelopeElement.model_fields["lower_limit"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + upper_limit: float = copy_field(GenPEBCPowerEnvelopeElement.model_fields["upper_limit"]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/ppbc/ppbc_end_interruption_instruction.py b/src/s2python/ppbc/ppbc_end_interruption_instruction.py index 1a4e3ff..d2b1c1b 100644 --- a/src/s2python/ppbc/ppbc_end_interruption_instruction.py +++ b/src/s2python/ppbc/ppbc_end_interruption_instruction.py @@ -5,6 +5,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -12,20 +14,19 @@ @catch_and_convert_exceptions class PPBCEndInterruptionInstruction(GenPPBCEndInterruptionInstruction, S2MessageComponent): - model_config = GenPPBCEndInterruptionInstruction.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCEndInterruptionInstruction.model_config, validate_assignment=True) - id: uuid.UUID = GenPPBCEndInterruptionInstruction.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - message_id: uuid.UUID = GenPPBCEndInterruptionInstruction.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - power_profile_id: uuid.UUID = GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPPBCEndInterruptionInstruction.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPPBCEndInterruptionInstruction.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + power_profile_id: uuid.UUID = copy_field(GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_profile_id" - ] # type: ignore[assignment] - sequence_container_id: uuid.UUID = GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + sequence_container_id: uuid.UUID = copy_field(GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "sequence_container_id" - ] # type: ignore[assignment] - power_sequence_id: uuid.UUID = GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + power_sequence_id: uuid.UUID = copy_field(GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_sequence_id" - ] # type: ignore[assignment] - abnormal_condition: bool = GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + abnormal_condition: bool = copy_field(GenPPBCEndInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "abnormal_condition" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ppbc/ppbc_power_profile_definition.py b/src/s2python/ppbc/ppbc_power_profile_definition.py index 53c22c8..24121db 100644 --- a/src/s2python/ppbc/ppbc_power_profile_definition.py +++ b/src/s2python/ppbc/ppbc_power_profile_definition.py @@ -6,6 +6,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -15,11 +17,10 @@ @catch_and_convert_exceptions class PPBCPowerProfileDefinition(GenPPBCPowerProfileDefinition, S2MessageComponent): - model_config = GenPPBCPowerProfileDefinition.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCPowerProfileDefinition.model_config, validate_assignment=True) - message_id: uuid.UUID = GenPPBCPowerProfileDefinition.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - id: uuid.UUID = GenPPBCPowerProfileDefinition.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPPBCPowerProfileDefinition.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPPBCPowerProfileDefinition.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] power_sequences_containers: List[PPBCPowerSequenceContainer] = ( # type: ignore[reportIncompatibleVariableOverride] - GenPPBCPowerProfileDefinition.model_fields["power_sequences_containers"] # type: ignore[assignment] + copy_field(GenPPBCPowerProfileDefinition.model_fields["power_sequences_containers"]) # type: ignore[assignment] ) diff --git a/src/s2python/ppbc/ppbc_power_profile_status.py b/src/s2python/ppbc/ppbc_power_profile_status.py index 5d7d1be..f542b92 100644 --- a/src/s2python/ppbc/ppbc_power_profile_status.py +++ b/src/s2python/ppbc/ppbc_power_profile_status.py @@ -6,6 +6,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -17,10 +19,9 @@ @catch_and_convert_exceptions class PPBCPowerProfileStatus(GenPPBCPowerProfileStatus, S2MessageComponent): - model_config = GenPPBCPowerProfileStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCPowerProfileStatus.model_config, validate_assignment=True) - message_id: uuid.UUID = GenPPBCPowerProfileStatus.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPPBCPowerProfileStatus.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] sequence_container_status: List[PPBCPowerSequenceContainerStatus] = ( # type: ignore[reportIncompatibleVariableOverride] - GenPPBCPowerProfileStatus.model_fields["sequence_container_status"] # type: ignore[assignment] + copy_field(GenPPBCPowerProfileStatus.model_fields["sequence_container_status"]) # type: ignore[assignment] ) diff --git a/src/s2python/ppbc/ppbc_power_sequence.py b/src/s2python/ppbc/ppbc_power_sequence.py index 9fc545a..ba14265 100644 --- a/src/s2python/ppbc/ppbc_power_sequence.py +++ b/src/s2python/ppbc/ppbc_power_sequence.py @@ -6,6 +6,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -16,15 +18,14 @@ @catch_and_convert_exceptions class PPBCPowerSequence(GenPPBCPowerSequence, S2MessageComponent): - model_config = GenPPBCPowerSequence.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCPowerSequence.model_config, validate_assignment=True) - id: uuid.UUID = GenPPBCPowerSequence.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - elements: List[PPBCPowerSequenceElement] = GenPPBCPowerSequence.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPPBCPowerSequence.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + elements: List[PPBCPowerSequenceElement] = copy_field(GenPPBCPowerSequence.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "elements" - ] # type: ignore[assignment] - is_interruptible: bool = GenPPBCPowerSequence.model_fields["is_interruptible"] # type: ignore[assignment,reportIncompatibleVariableOverride] - max_pause_before: Duration = GenPPBCPowerSequence.model_fields["max_pause_before"] # type: ignore[assignment,reportIncompatibleVariableOverride] - abnormal_condition_only: bool = GenPPBCPowerSequence.model_fields[ + ]) # type: ignore[assignment] + is_interruptible: bool = copy_field(GenPPBCPowerSequence.model_fields["is_interruptible"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + max_pause_before: Duration = copy_field(GenPPBCPowerSequence.model_fields["max_pause_before"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + abnormal_condition_only: bool = copy_field(GenPPBCPowerSequence.model_fields[ "abnormal_condition_only" - ] # type: ignore[assignment,reportIncompatibleVariableOverride] + ]) # type: ignore[assignment,reportIncompatibleVariableOverride] diff --git a/src/s2python/ppbc/ppbc_power_sequence_container.py b/src/s2python/ppbc/ppbc_power_sequence_container.py index c5edcf1..1af77f1 100644 --- a/src/s2python/ppbc/ppbc_power_sequence_container.py +++ b/src/s2python/ppbc/ppbc_power_sequence_container.py @@ -7,6 +7,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -16,10 +18,9 @@ @catch_and_convert_exceptions class PPBCPowerSequenceContainer(GenPPBCPowerSequenceContainer, S2MessageComponent): - model_config = GenPPBCPowerSequenceContainer.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCPowerSequenceContainer.model_config, validate_assignment=True) - id: uuid.UUID = GenPPBCPowerSequenceContainer.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - power_sequences: List[PPBCPowerSequence] = GenPPBCPowerSequenceContainer.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPPBCPowerSequenceContainer.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + power_sequences: List[PPBCPowerSequence] = copy_field(GenPPBCPowerSequenceContainer.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_sequences" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ppbc/ppbc_power_sequence_container_status.py b/src/s2python/ppbc/ppbc_power_sequence_container_status.py index 81fb48a..cc9a393 100644 --- a/src/s2python/ppbc/ppbc_power_sequence_container_status.py +++ b/src/s2python/ppbc/ppbc_power_sequence_container_status.py @@ -6,6 +6,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -13,18 +15,17 @@ @catch_and_convert_exceptions class PPBCPowerSequenceContainerStatus(GenPPBCPowerSequenceContainerStatus, S2MessageComponent): - model_config = GenPPBCPowerSequenceContainerStatus.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCPowerSequenceContainerStatus.model_config, validate_assignment=True) - power_profile_id: uuid.UUID = GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + power_profile_id: uuid.UUID = copy_field(GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_profile_id" # type: ignore[assignment] - ] - sequence_container_id: uuid.UUID = GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) + sequence_container_id: uuid.UUID = copy_field(GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "sequence_container_id" # type: ignore[assignment] - ] - selected_sequence_id: Union[uuid.UUID, None] = GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) + selected_sequence_id: Union[uuid.UUID, None] = copy_field(GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "selected_sequence_id" - ] # type: ignore[assignment] - progress: Union[uuid.UUID, None] = GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + progress: Union[uuid.UUID, None] = copy_field(GenPPBCPowerSequenceContainerStatus.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "progress" # type: ignore[assignment] - ] + ]) diff --git a/src/s2python/ppbc/ppbc_power_sequence_element.py b/src/s2python/ppbc/ppbc_power_sequence_element.py index 444bd08..0b2910d 100644 --- a/src/s2python/ppbc/ppbc_power_sequence_element.py +++ b/src/s2python/ppbc/ppbc_power_sequence_element.py @@ -5,6 +5,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -14,10 +16,9 @@ @catch_and_convert_exceptions class PPBCPowerSequenceElement(GenPPBCPowerSequenceElement, S2MessageComponent): - model_config = GenPPBCPowerSequenceElement.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCPowerSequenceElement.model_config, validate_assignment=True) - duration: Duration = GenPPBCPowerSequenceElement.model_fields["duration"] # type: ignore[assignment,reportIncompatibleVariableOverride] - power_values: List[PowerForecastValue] = GenPPBCPowerSequenceElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + duration: Duration = copy_field(GenPPBCPowerSequenceElement.model_fields["duration"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + power_values: List[PowerForecastValue] = copy_field(GenPPBCPowerSequenceElement.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_values" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ppbc/ppbc_schedule_instruction.py b/src/s2python/ppbc/ppbc_schedule_instruction.py index 2434e93..4f54856 100644 --- a/src/s2python/ppbc/ppbc_schedule_instruction.py +++ b/src/s2python/ppbc/ppbc_schedule_instruction.py @@ -4,6 +4,8 @@ PPBCScheduleInstruction as GenPPBCScheduleInstruction, ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, catch_and_convert_exceptions, S2MessageComponent, ) @@ -11,21 +13,20 @@ @catch_and_convert_exceptions class PPBCScheduleInstruction(GenPPBCScheduleInstruction, S2MessageComponent): - model_config = GenPPBCScheduleInstruction.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCScheduleInstruction.model_config, validate_assignment=True) - id: uuid.UUID = GenPPBCScheduleInstruction.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPPBCScheduleInstruction.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] - power_profile_id: uuid.UUID = GenPPBCScheduleInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + power_profile_id: uuid.UUID = copy_field(GenPPBCScheduleInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_profile_id" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] - message_id: uuid.UUID = GenPPBCScheduleInstruction.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPPBCScheduleInstruction.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] - sequence_container_id: uuid.UUID = GenPPBCScheduleInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + sequence_container_id: uuid.UUID = copy_field(GenPPBCScheduleInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "sequence_container_id" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] - power_sequence_id: uuid.UUID = GenPPBCScheduleInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + power_sequence_id: uuid.UUID = copy_field(GenPPBCScheduleInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_sequence_id" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/ppbc/ppbc_start_interruption_instruction.py b/src/s2python/ppbc/ppbc_start_interruption_instruction.py index 42ccb92..edbae6c 100644 --- a/src/s2python/ppbc/ppbc_start_interruption_instruction.py +++ b/src/s2python/ppbc/ppbc_start_interruption_instruction.py @@ -5,6 +5,8 @@ ) from s2python.validate_values_mixin import ( + copy_config, + copy_field, S2MessageComponent, catch_and_convert_exceptions, ) @@ -12,20 +14,19 @@ @catch_and_convert_exceptions class PPBCStartInterruptionInstruction(GenPPBCStartInterruptionInstruction, S2MessageComponent): - model_config = GenPPBCStartInterruptionInstruction.model_config - model_config["validate_assignment"] = True + model_config = copy_config(GenPPBCStartInterruptionInstruction.model_config, validate_assignment=True) - id: uuid.UUID = GenPPBCStartInterruptionInstruction.model_fields["id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - message_id: uuid.UUID = GenPPBCStartInterruptionInstruction.model_fields["message_id"] # type: ignore[assignment,reportIncompatibleVariableOverride] - power_profile_id: uuid.UUID = GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + id: uuid.UUID = copy_field(GenPPBCStartInterruptionInstruction.model_fields["id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + message_id: uuid.UUID = copy_field(GenPPBCStartInterruptionInstruction.model_fields["message_id"]) # type: ignore[assignment,reportIncompatibleVariableOverride] + power_profile_id: uuid.UUID = copy_field(GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_profile_id" - ] # type: ignore[assignment] - sequence_container_id: uuid.UUID = GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + sequence_container_id: uuid.UUID = copy_field(GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "sequence_container_id" - ] # type: ignore[assignment] - power_sequence_id: uuid.UUID = GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + power_sequence_id: uuid.UUID = copy_field(GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "power_sequence_id" - ] # type: ignore[assignment] - abnormal_condition: bool = GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] + ]) # type: ignore[assignment] + abnormal_condition: bool = copy_field(GenPPBCStartInterruptionInstruction.model_fields[ # type: ignore[reportIncompatibleVariableOverride] "abnormal_condition" - ] # type: ignore[assignment] + ]) # type: ignore[assignment] diff --git a/src/s2python/s2_base_model.py b/src/s2python/s2_base_model.py new file mode 100644 index 0000000..a2ba497 --- /dev/null +++ b/src/s2python/s2_base_model.py @@ -0,0 +1,13 @@ +from pydantic import BaseModel, ConfigDict + + +class S2BaseModel(BaseModel): + """Base class of the generated S2 models. + + The validators and serializers of a model are built the first time the model + is used, instead of when the class is defined. Most applications use only a + small part of the S2 messages, and building them all costs several MB of + memory. + """ + + model_config = ConfigDict(defer_build=True) diff --git a/src/s2python/validate_values_mixin.py b/src/s2python/validate_values_mixin.py index f140205..9cee54c 100644 --- a/src/s2python/validate_values_mixin.py +++ b/src/s2python/validate_values_mixin.py @@ -1,3 +1,4 @@ +import copy from typing import ( TypeVar, Type, @@ -14,8 +15,10 @@ from pydantic import ( # pylint: disable=no-name-in-module BaseModel, + ConfigDict, ValidationError, ) +from pydantic.fields import FieldInfo from s2python.s2_validation_error import S2ValidationError @@ -115,3 +118,22 @@ def catch_and_convert_exceptions(input_class: Type[S]) -> Type[S]: input_class.__init__ = convert_to_s2exception(input_class.__init__) # type: ignore[method-assign] return input_class + + +def copy_field(field: FieldInfo) -> Any: + """Copy the field of a generated model, to redefine it in a subclass. + + pydantic modifies a FieldInfo that is used as the default of a field. Without + a copy, that would change the field of the generated model as well. + """ + return copy.deepcopy(field) + + +def copy_config(config: ConfigDict, **changes: Any) -> ConfigDict: + """Copy the config of a generated model with some changes, to use in a subclass. + + Changing the config in place would change the config of the generated model as well. + """ + new_config = ConfigDict(**config) + new_config.update(changes) # type: ignore[typeddict-item] + return new_config diff --git a/tests/unit/copy_config_test.py b/tests/unit/copy_config_test.py new file mode 100644 index 0000000..601d014 --- /dev/null +++ b/tests/unit/copy_config_test.py @@ -0,0 +1,30 @@ +import unittest + +from pydantic import ConfigDict + +from s2python.common import Handshake +from s2python.generated.gen_s2 import Handshake as GenHandshake +from s2python.validate_values_mixin import copy_config + + +class CopyConfigTest(unittest.TestCase): + def test__copy_config__returns_changed_copy(self) -> None: + # Arrange + config = ConfigDict(extra="forbid") + + # Act + copied = copy_config(config, validate_assignment=True) + + # Assert + self.assertEqual(copied, {"extra": "forbid", "validate_assignment": True}) + self.assertEqual(config, {"extra": "forbid"}) + + def test__copy_config__generated_config_unchanged_by_subclass(self) -> None: + # Arrange / Act + # Handshake copies the generated config with validate_assignment=True. + wrapper_config = Handshake.model_config + generated_config = GenHandshake.model_config + + # Assert + self.assertTrue(wrapper_config.get("validate_assignment")) + self.assertNotIn("validate_assignment", generated_config) diff --git a/tests/unit/copy_field_test.py b/tests/unit/copy_field_test.py new file mode 100644 index 0000000..4a89022 --- /dev/null +++ b/tests/unit/copy_field_test.py @@ -0,0 +1,29 @@ +import unittest + +from s2python.ddbc import DDBCOperationMode +from s2python.generated.gen_s2 import DDBCOperationMode as GenDDBCOperationMode, ID +from s2python.validate_values_mixin import copy_field + + +class CopyFieldTest(unittest.TestCase): + def test__copy_field__returns_equal_copy(self) -> None: + # Arrange + field = GenDDBCOperationMode.model_fields["diagnostic_label"] + + # Act + copied = copy_field(field) + + # Assert + self.assertIsNot(copied, field) + self.assertEqual(copied.annotation, field.annotation) + self.assertEqual(copied.description, field.description) + + def test__copy_field__generated_field_unchanged_by_subclass(self) -> None: + # Arrange / Act + # DDBCOperationMode redefines the generated field 'Id' as 'id' with type uuid.UUID. + wrapper_field = DDBCOperationMode.model_fields["id"] + generated_field = GenDDBCOperationMode.model_fields["Id"] + + # Assert + self.assertIsNot(wrapper_field, generated_field) + self.assertIs(generated_field.annotation, ID) diff --git a/tests/unit/s2_base_model_test.py b/tests/unit/s2_base_model_test.py new file mode 100644 index 0000000..42341e9 --- /dev/null +++ b/tests/unit/s2_base_model_test.py @@ -0,0 +1,20 @@ +import unittest + +from s2python.s2_base_model import S2BaseModel + + +class S2BaseModelTest(unittest.TestCase): + def test__s2_base_model__validator_built_on_first_use(self) -> None: + # Arrange + class ExampleModel(S2BaseModel): + value: int + + built_before_use = ExampleModel.__pydantic_complete__ + + # Act + example = ExampleModel(value=1) + + # Assert + self.assertFalse(built_before_use) + self.assertTrue(ExampleModel.__pydantic_complete__) + self.assertEqual(example.value, 1)