diff --git a/ocpp/v21/call.py b/ocpp/v21/call.py index b8eb92551..49cdabdb9 100644 --- a/ocpp/v21/call.py +++ b/ocpp/v21/call.py @@ -1,5 +1,5 @@ from dataclasses import dataclass -from typing import List, Optional +from typing import Any, List, Optional from datatypes import ( AuthorizationData, @@ -34,7 +34,6 @@ SetMonitoringData, SetVariableData, TransactionInfo, - data, ) import enums @@ -164,7 +163,7 @@ class CustomerInformation: class DataTransfer: vendor_id: str custom_data: Optional[CustomData] = None - data: Optional[data] = None + data: Optional[Any] = None message_id: Optional[str] = None diff --git a/ocpp/v21/call_result.py b/ocpp/v21/call_result.py index 8df03da54..16e32c2a0 100644 --- a/ocpp/v21/call_result.py +++ b/ocpp/v21/call_result.py @@ -1,5 +1,5 @@ from dataclasses import dataclass -from typing import List, Optional +from typing import Any, List, Optional from datatypes import ( CertificateHashDataChain, @@ -12,7 +12,6 @@ SetVariableResult, StatusInfo, UpdatedPersonalMessage, - data, ) import enums @@ -147,7 +146,7 @@ class CustomerInformation: class DataTransfer: status: DataTransferStatus custom_data: Optional[CustomData] = None - data: Optional[data] = None + data: Optional[Any] = None status_info: Optional[StatusInfo] = None diff --git a/scripts/v21/code_generator.py b/scripts/v21/code_generator.py index 7e7ea6319..0d4dc302d 100644 --- a/scripts/v21/code_generator.py +++ b/scripts/v21/code_generator.py @@ -1,14 +1,6 @@ import re -from .json_schema_types import ( - Object, - Enum, - String, - Boolean, - Number, - Integer, - Array, -) +from json_schema_types import Array, Boolean, Enum, Integer, Number, Object, String # Tab's are 4 spaces. TAB = " " @@ -71,7 +63,7 @@ def _generate_messages(messages: list[Object]) -> str: code = "" code += "from dataclasses import dataclass\n" - code += "from typing import List, Optional\n" + code += "from typing import Any, List, Optional\n" imports = generate_import_statement_for_external_objects(objects) if imports != "": code += "\n" @@ -212,6 +204,9 @@ def _get_python_type(value) -> str: return f"List[{_get_python_type(value.type)}]" if isinstance(value, Object): + if value.name == "data" and len(value.properties) == 0: + return "Any" + return value.name if isinstance(value, Enum): @@ -277,6 +272,9 @@ def generate_import_statement_for_external_objects(objects: list[Object]) -> str code = "from datatypes import (\n" for object in objects: + if object.name == "data" and len(object.properties) == 0: + continue + code += f"{TAB}{object.name},\n" code += ")\n"