From 73da343c610420f68792306d5fcdd46f1c86edb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Kub=C3=AD=C4=8Dek?= Date: Mon, 3 Mar 2025 20:09:52 +0100 Subject: [PATCH] api: remove data_format and simplify usages of get request --- superfaktura/bank_account.py | 4 ++- superfaktura/client_contacts.py | 8 +++--- superfaktura/enumerations/data_format.py | 32 ------------------------ superfaktura/invoice.py | 7 +++--- superfaktura/superfaktura_api.py | 17 +++---------- superfaktura/utils/country.py | 5 +++- 6 files changed, 19 insertions(+), 54 deletions(-) delete mode 100644 superfaktura/enumerations/data_format.py diff --git a/superfaktura/bank_account.py b/superfaktura/bank_account.py index 748ba85..fb188f6 100644 --- a/superfaktura/bank_account.py +++ b/superfaktura/bank_account.py @@ -31,6 +31,7 @@ Usage: bank.post(data) """ +import json from dataclasses import dataclass, asdict from typing import Optional @@ -96,7 +97,8 @@ class BankAccount(SuperFakturaAPI): def list(self) -> dict: """Retrieves a list of bank accounts.""" url = "bank_accounts/index" - return self.get(url) + bank_accounts = self.get(url) + return json.loads(bank_accounts) def default(self) -> Optional[BankAccountModel]: """Retrieves the default bank account.""" diff --git a/superfaktura/client_contacts.py b/superfaktura/client_contacts.py index a6a0c4b..70676c8 100644 --- a/superfaktura/client_contacts.py +++ b/superfaktura/client_contacts.py @@ -104,12 +104,14 @@ class ClientContact(SuperFakturaAPI): def list(self) -> dict: """Lists all exists client contacts.""" url = "clients/index.json" - return self.get(endpoint=url) + clients = self.get(endpoint=url) + return json.loads(clients) def get_client(self, client_id: int) -> ClientContactModel: """Gets a client contact by ID.""" url = f"clients/view/{client_id}" - data = self.get(endpoint=url) + clients = self.get(endpoint=url) + data = json.loads(clients) if "Client" not in data: raise ClientException("Client not found") data = data["Client"] @@ -122,4 +124,4 @@ if __name__ == "__main__": pprint(resp) - pprint(client.get_client(40019)) + pprint(client.get_client(40011)) diff --git a/superfaktura/enumerations/data_format.py b/superfaktura/enumerations/data_format.py deleted file mode 100644 index 2761512..0000000 --- a/superfaktura/enumerations/data_format.py +++ /dev/null @@ -1,32 +0,0 @@ -""" -Data Format Enumeration. - -This module provides an enumeration of data formats that can be used in the SuperFaktura API. - -Classes: - - DataFormat: Enumeration of data formats. - -Usage: - from superfaktura.enumerations.data_format import DataFormat - data_format = DataFormat.JSON -""" - -import enum - - -class DataFormat(enum.Enum): - """ - Data Format Enumeration. - - This enumeration represents the different data formats that can be used in the SuperFaktura API. - - Values: - - JSON: JSON format - - PDF: PDF format - - Usage: - data_format = DataFormat.JSON - """ - - JSON = enum.auto() - PDF = enum.auto() diff --git a/superfaktura/invoice.py b/superfaktura/invoice.py index df85c5e..56d4c79 100644 --- a/superfaktura/invoice.py +++ b/superfaktura/invoice.py @@ -57,7 +57,6 @@ from typing import Optional, List import json from superfaktura.client_contacts import ClientContactModel -from superfaktura.enumerations.data_format import DataFormat from superfaktura.enumerations.language import Language from superfaktura.superfaktura_api import SuperFakturaAPI from superfaktura.utils.data_types import Date, DateEncoder @@ -255,7 +254,7 @@ class Invoice(SuperFakturaAPI): invoice_model: InvoiceModel, items: List[InvoiceItem], contact: ClientContactModel, - invoice_settings: Optional[InvoiceSettings], + invoice_settings: Optional[InvoiceSettings] = None, ) -> InvoiceRespModel: """ Adds a new invoice. @@ -277,7 +276,7 @@ class Invoice(SuperFakturaAPI): "Invoice": invoice_model.as_dict(), "InvoiceItem": [item.as_dict() for item in items], "Client": contact.as_dict(), - "InvoiceSetting": invoice_settings.as_dict(), + "InvoiceSetting": invoice_settings.as_dict() if invoice_settings else {}, } url = "invoices/create" resp = self.post(endpoint=url, data=json.dumps(data, cls=DateEncoder)) @@ -304,5 +303,5 @@ class Invoice(SuperFakturaAPI): bytes: A bytes containing the PDF data. """ url = f"{language}/invoices/pdf/{invoice.invoice_id}/token:{invoice.invoice_token}" - document = self.get(url, data_format=DataFormat.PDF)["pdf"] + document = self.get(url) return document diff --git a/superfaktura/superfaktura_api.py b/superfaktura/superfaktura_api.py index cf0e20e..40636b0 100644 --- a/superfaktura/superfaktura_api.py +++ b/superfaktura/superfaktura_api.py @@ -32,8 +32,6 @@ from typing import Dict import requests from dotenv import load_dotenv # type: ignore -from superfaktura.enumerations.data_format import DataFormat - class SuperFakturaAPIException(Exception): """Exception for errors when working with the SuperFaktura API.""" @@ -64,9 +62,7 @@ class SuperFakturaAPI: f"{_api_company_id}" } - def get( - self, endpoint: str, data_format: DataFormat = DataFormat.JSON, timeout: int = 5 - ) -> Dict: + def get(self, endpoint: str, timeout: int = 5) -> bytes: """ Retrieves data from the SuperFaktura API. @@ -78,7 +74,7 @@ class SuperFakturaAPI: timeout (int, optional): The timeout for the API request in seconds. Defaults to 5. Returns: - Dict: The retrieved data in JSON format. + bytes: The retrieved data in bytes. Raises: SuperFakturaAPIException: If the API request fails or returns an error. @@ -94,14 +90,9 @@ class SuperFakturaAPI: url = f"{self._api_url}/{endpoint}" req = requests.get(url=url, headers=self._auth_header, timeout=timeout) if req.status_code == 200: - if data_format == DataFormat.JSON: - return req.json() - elif data_format == DataFormat.PDF: - return {"pdf": req.content} # returns a dict with the PDF content - else: - raise SuperFakturaAPIException("Invalid data format") + return req.content raise SuperFakturaAPIException( - f"Get status code: {req.status_code}; {req.json()}" + f"Get status code: {req.status_code}; {req.content!r}" ) def post(self, endpoint: str, data: str, timeout: int = 5) -> Dict: diff --git a/superfaktura/utils/country.py b/superfaktura/utils/country.py index 87b2672..557a3d2 100644 --- a/superfaktura/utils/country.py +++ b/superfaktura/utils/country.py @@ -12,6 +12,8 @@ Usage: print(countries) """ +import json + from superfaktura.superfaktura_api import SuperFakturaAPI @@ -30,4 +32,5 @@ def country_list(): """ api = SuperFakturaAPI() url = "countries" - return api.get(url) + countries = api.get(url) + return json.loads(countries)