Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions example.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ async def main():
reading = await client.get_last_meter_reading(customer.bp_number, contracts[0].contract_id)
print(reading)

device_in = await client.get_device_in()
if device_in and device_in.devices:
device = device_in.devices[0]
devices = await client.get_devices()
if devices:
device = devices[0]
print(device)

if device.device_number and device.device_code:
Expand Down
8 changes: 6 additions & 2 deletions iec_api/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -425,9 +425,13 @@ async def get_social_discount(session: ClientSession, token: JWT, bp_number: str
return SocialDiscount.from_dict(response)


async def get_device_in(session: ClientSession, token: JWT, contract_id: str) -> Optional[DeviceInResponse]:
async def get_device_in(
session: ClientSession, token: JWT, contract_id: str, recaptcha_token: Optional[str] = None
) -> Optional[DeviceInResponse]:
"""Get device information from DeviceIn endpoint."""
headers = commons.add_auth_bearer_to_headers(HEADERS_WITH_AUTH, token.id_token)
headers = commons.add_auth_bearer_to_headers(HEADERS_WITH_AUTH.copy(), token.id_token)
if recaptcha_token:
headers["RecaptchaToken"] = recaptcha_token
response = await commons.send_get_request(
session=session, url=GET_DEVICE_IN_URL.format(contract_id=contract_id), headers=headers
)
Expand Down
7 changes: 5 additions & 2 deletions iec_api/iec_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -667,12 +667,15 @@ async def get_social_discount(self, bp_number: Optional[str] = None) -> Optional

return await data.get_social_discount(self._session, self._token, bp_number)

async def get_device_in(self, contract_id: Optional[str] = None) -> Optional[DeviceInResponse]:
async def get_device_in(
self, contract_id: Optional[str] = None, recaptcha_token: Optional[str] = None
) -> Optional[DeviceInResponse]:
"""
Get device information for active devices
Args:
self: The instance of the class.
contract_id (str): The Contract ID. Defaults to client's Contract ID.
recaptcha_token (str, optional): Recaptcha token for the DeviceIn endpoint.
Returns:
DeviceInResponse: Device information including status and device list
"""
Expand All @@ -684,7 +687,7 @@ async def get_device_in(self, contract_id: Optional[str] = None) -> Optional[Dev
if not contract_id:
raise ValueError("Contract ID must be provided")

return await data.get_device_in(self._session, self._token, contract_id)
return await data.get_device_in(self._session, self._token, contract_id, recaptcha_token)

async def get_touz_compatibility(
self, contract_id: Optional[str] = None, bp_number: Optional[str] = None
Expand Down
8 changes: 6 additions & 2 deletions iec_api/models/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ class Device(DataClassDictMixin):
device_type: Optional[int] = field(default=None, metadata=field_options(alias="deviceType"))
device_number: Optional[str] = field(default=None, metadata=field_options(alias="deviceNumber"))
device_code: Optional[str] = field(default=None, metadata=field_options(alias="deviceCode"))

report_result_status: Optional[int] = field(default=None, metadata=field_options(alias="reportResultStatus"))
disconnect_reason: Optional[str] = field(default=None, metadata=field_options(alias="disconnectReason"))
is_disconnected: Optional[bool] = field(default=None, metadata=field_options(alias="isDisconnected"))
is_electronic: Optional[bool] = field(default=None, metadata=field_options(alias="isElectronic"))

@dataclass
class ConnectionSize(DataClassDictMixin):
Expand All @@ -76,9 +79,10 @@ class CounterDevice(DataClassDictMixin):
last_mr_type: str = field(metadata=field_options(alias="lastMRType"))
last_mr_type_desc: str = field(metadata=field_options(alias="lastMRTypeDesc"))
connection_size: ConnectionSize = field(metadata=field_options(alias="connectionSize"))
last_mr_type_code: Optional[int] = field(default=None, metadata=field_options(alias="lastMrTypeCode"))
device_digit_length: Optional[int] = field(default=None, metadata=field_options(alias="deviceDigitLength"))
last_mr_date: Optional[date] = field(default=None, metadata=field_options(alias="lastMRDate"))


@dataclass
class Devices(DataClassDictMixin):
"""Devices dataclass."""
Expand Down
8 changes: 7 additions & 1 deletion iec_api/models/device_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
# "balanceTime": null,
# "balanceDate": null,
# "isActive": true,
# "numberOfDevices": 1
# "numberOfDevices": 1,
# "isElectronic": false,
# "disconnectReason": "",
# "isDisconnected": false
# },
# "reponseDescriptor": {
# "isSuccess": true,
Expand All @@ -40,6 +43,8 @@ class DeviceType(DataClassDictMixin):
device_type: int = field(metadata=field_options(alias="deviceType"))
is_active: bool = field(metadata=field_options(alias="isActive"))
number_of_devices: int = field(metadata=field_options(alias="numberOfDevices"))
is_electronic: bool = field(metadata=field_options(alias="isElectronic"))
is_disconnected: bool = field(metadata=field_options(alias="isDisconnected"))
device_balance: Optional[int] = field(default=None, metadata=field_options(alias="deviceBalance"))
estimated_days_by_week: Optional[int] = field(default=None, metadata=field_options(alias="estimatedDaysByWeek"))
average_usage_cost_by_week: Optional[int] = field(
Expand All @@ -51,6 +56,7 @@ class DeviceType(DataClassDictMixin):
)
balance_time: Optional[str] = field(default=None, metadata=field_options(alias="balanceTime"))
balance_date: Optional[str] = field(default=None, metadata=field_options(alias="balanceDate"))
disconnect_reason: Optional[str] = field(default=None, metadata=field_options(alias="disconnectReason"))


decoder = BasicDecoder(ResponseWithDescriptor[DeviceType])