From 7a7be6092ba3fdad2891e870a0aed33dc159a6f1 Mon Sep 17 00:00:00 2001 From: Guy Khmelnitsky <3136012+GuyKh@users.noreply.github.com> Date: Wed, 21 Feb 2024 13:32:07 +0200 Subject: [PATCH] fix: Add DeviceType Decoder (#57) --- iec_api/data.py | 16 ++++------------ iec_api/models/device_type.py | 6 ++++++ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/iec_api/data.py b/iec_api/data.py index f687231..ac1aad3 100644 --- a/iec_api/data.py +++ b/iec_api/data.py @@ -28,6 +28,7 @@ from iec_api.models.device import Device, Devices from iec_api.models.device import decoder as devices_decoder from iec_api.models.device_type import DeviceType +from iec_api.models.device_type import decoder as device_type_decoder from iec_api.models.electric_bill import ElectricBill from iec_api.models.electric_bill import decoder as electric_bill_decoder from iec_api.models.exceptions import IECError @@ -192,18 +193,9 @@ def get_devices_by_contract_id(token: JWT, bp_number: str, contract_id: str) -> def get_device_type(token: JWT, bp_number: str, contract_id: str) -> DeviceType: """Get Device Type data response from IEC API.""" - headers = add_jwt_to_headers(HEADERS_WITH_AUTH, token.id_token) - # sending get request and saving the response as response object - response = _get_url(url=GET_DEVICE_TYPE_URL.format(bp_number=bp_number, contract_id=contract_id), headers=headers) - - if response.status_code != 200: - if len(response.content) > 0: - login_error_response = ErrorResponseDescriptor.from_dict(response.json()) - raise IECError(login_error_response.code, login_error_response.error) - else: - raise IECError(response.status_code, response.reason) - - return DeviceType.from_dict(response.json()) + return _get_response_with_descriptor( + token, GET_DEVICE_TYPE_URL.format(bp_number=bp_number, contract_id=contract_id), device_type_decoder + ) def get_billing_invoices(token: JWT, bp_number: str, contract_id: str) -> GetInvoicesBody: diff --git a/iec_api/models/device_type.py b/iec_api/models/device_type.py index 368a679..fbb0766 100644 --- a/iec_api/models/device_type.py +++ b/iec_api/models/device_type.py @@ -2,6 +2,9 @@ from typing import Optional from mashumaro import DataClassDictMixin, field_options +from mashumaro.codecs import BasicDecoder + +from iec_api.models.response_descriptor import ResponseWithDescriptor # # GET https://iecapi.iec.co.il//api/Device/type/{bp_number}/{contract_id}/false @@ -44,3 +47,6 @@ class DeviceType(DataClassDictMixin): balance_date: Optional[str] = field(metadata=field_options(alias="balanceDate")) is_active: bool = field(metadata=field_options(alias="isActive")) number_of_devices: int = field(metadata=field_options(alias="numberOfDevices")) + + +decoder = BasicDecoder(ResponseWithDescriptor[DeviceType])