diff --git a/Makefile b/Makefile index a8d78c6..726c13a 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,6 @@ generate-client: -g python \ -i ./api/v1alpha1/openapi.yml \ -o . \ - --additional-properties=packageName=flightctl \ + --additional-properties=packageName=flightctl,useOneOfDiscriminatorLookup=true \ --git-user-id flightctl \ --git-repo-id python-client diff --git a/api/v1alpha1/openapi.yml b/api/v1alpha1/openapi.yml index d17de99..517b5db 100644 --- a/api/v1alpha1/openapi.yml +++ b/api/v1alpha1/openapi.yml @@ -4212,15 +4212,15 @@ components: type: object description: Current status of the resources of the device. required: - - CPU - - Memory - - Disk + - cpu + - memory + - disk properties: - CPU: + cpu: $ref: "#/components/schemas/DeviceResourceStatusType" - Memory: + memory: $ref: "#/components/schemas/DeviceResourceStatusType" - Disk: + disk: $ref: "#/components/schemas/DeviceResourceStatusType" DeviceResourceStatusType: type: string diff --git a/flightctl/models/device_resource_status.py b/flightctl/models/device_resource_status.py index 94fae29..ea1ad97 100644 --- a/flightctl/models/device_resource_status.py +++ b/flightctl/models/device_resource_status.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict from typing import Any, ClassVar, Dict, List from flightctl.models.device_resource_status_type import DeviceResourceStatusType from typing import Optional, Set @@ -28,10 +28,10 @@ class DeviceResourceStatus(BaseModel): """ Current status of the resources of the device. """ # noqa: E501 - cpu: DeviceResourceStatusType = Field(alias="CPU") - memory: DeviceResourceStatusType = Field(alias="Memory") - disk: DeviceResourceStatusType = Field(alias="Disk") - __properties: ClassVar[List[str]] = ["CPU", "Memory", "Disk"] + cpu: DeviceResourceStatusType + memory: DeviceResourceStatusType + disk: DeviceResourceStatusType + __properties: ClassVar[List[str]] = ["cpu", "memory", "disk"] model_config = ConfigDict( populate_by_name=True, @@ -84,9 +84,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "CPU": obj.get("CPU"), - "Memory": obj.get("Memory"), - "Disk": obj.get("Disk") + "cpu": obj.get("cpu"), + "memory": obj.get("memory"), + "disk": obj.get("disk") }) return _obj diff --git a/flightctl/models/resource_monitor.py b/flightctl/models/resource_monitor.py index fab2ee1..7341c23 100644 --- a/flightctl/models/resource_monitor.py +++ b/flightctl/models/resource_monitor.py @@ -99,6 +99,41 @@ def from_json(cls, json_str: str) -> Self: error_messages = [] match = 0 + # use oneOf discriminator to lookup the data type + _data_type = json.loads(json_str).get("monitorType") + if not _data_type: + raise ValueError("Failed to lookup data type from the field `monitorType` in the input.") + + # check if data type is `CpuResourceMonitorSpec` + if _data_type == "CPU": + instance.actual_instance = CpuResourceMonitorSpec.from_json(json_str) + return instance + + # check if data type is `DiskResourceMonitorSpec` + if _data_type == "Disk": + instance.actual_instance = DiskResourceMonitorSpec.from_json(json_str) + return instance + + # check if data type is `MemoryResourceMonitorSpec` + if _data_type == "Memory": + instance.actual_instance = MemoryResourceMonitorSpec.from_json(json_str) + return instance + + # check if data type is `CpuResourceMonitorSpec` + if _data_type == "CpuResourceMonitorSpec": + instance.actual_instance = CpuResourceMonitorSpec.from_json(json_str) + return instance + + # check if data type is `DiskResourceMonitorSpec` + if _data_type == "DiskResourceMonitorSpec": + instance.actual_instance = DiskResourceMonitorSpec.from_json(json_str) + return instance + + # check if data type is `MemoryResourceMonitorSpec` + if _data_type == "MemoryResourceMonitorSpec": + instance.actual_instance = MemoryResourceMonitorSpec.from_json(json_str) + return instance + # deserialize data into CpuResourceMonitorSpec try: instance.actual_instance = CpuResourceMonitorSpec.from_json(json_str) diff --git a/flightctl/models/rollout_device_selection.py b/flightctl/models/rollout_device_selection.py index 1958818..f256b62 100644 --- a/flightctl/models/rollout_device_selection.py +++ b/flightctl/models/rollout_device_selection.py @@ -83,6 +83,16 @@ def from_json(cls, json_str: str) -> Self: error_messages = [] match = 0 + # use oneOf discriminator to lookup the data type + _data_type = json.loads(json_str).get("strategy") + if not _data_type: + raise ValueError("Failed to lookup data type from the field `strategy` in the input.") + + # check if data type is `BatchSequence` + if _data_type == "BatchSequence": + instance.actual_instance = BatchSequence.from_json(json_str) + return instance + # deserialize data into BatchSequence try: instance.actual_instance = BatchSequence.from_json(json_str) diff --git a/test.py b/test.py new file mode 100644 index 0000000..e835e4f --- /dev/null +++ b/test.py @@ -0,0 +1,25 @@ +import flightctl +from flightctl.models.device import Device +from flightctl.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flightctl.Configuration( + host = "https://api.10.0.7.163.nip.io:3443" +) +configuration.verify_ssl = False + + +# Enter a context with an instance of the API client +with flightctl.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = flightctl.DeviceApi(api_client) + name = 'device-ansible-example' # str | The name of the Device resource to get. + + try: + api_response = api_instance.get_device(name) + print("The response of DeviceApi->get_device:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DeviceApi->get_device: %s\n" % e) \ No newline at end of file