mirror of
https://github.com/Eledio/superfaktura-client.git
synced 2025-11-01 00:18:25 +01:00
api: remove data_format and simplify usages of get request
This commit is contained in:
@@ -31,6 +31,7 @@ Usage:
|
|||||||
bank.post(data)
|
bank.post(data)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
from dataclasses import dataclass, asdict
|
from dataclasses import dataclass, asdict
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@@ -96,7 +97,8 @@ class BankAccount(SuperFakturaAPI):
|
|||||||
def list(self) -> dict:
|
def list(self) -> dict:
|
||||||
"""Retrieves a list of bank accounts."""
|
"""Retrieves a list of bank accounts."""
|
||||||
url = "bank_accounts/index"
|
url = "bank_accounts/index"
|
||||||
return self.get(url)
|
bank_accounts = self.get(url)
|
||||||
|
return json.loads(bank_accounts)
|
||||||
|
|
||||||
def default(self) -> Optional[BankAccountModel]:
|
def default(self) -> Optional[BankAccountModel]:
|
||||||
"""Retrieves the default bank account."""
|
"""Retrieves the default bank account."""
|
||||||
|
|||||||
@@ -104,12 +104,14 @@ class ClientContact(SuperFakturaAPI):
|
|||||||
def list(self) -> dict:
|
def list(self) -> dict:
|
||||||
"""Lists all exists client contacts."""
|
"""Lists all exists client contacts."""
|
||||||
url = "clients/index.json"
|
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:
|
def get_client(self, client_id: int) -> ClientContactModel:
|
||||||
"""Gets a client contact by ID."""
|
"""Gets a client contact by ID."""
|
||||||
url = f"clients/view/{client_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:
|
if "Client" not in data:
|
||||||
raise ClientException("Client not found")
|
raise ClientException("Client not found")
|
||||||
data = data["Client"]
|
data = data["Client"]
|
||||||
@@ -122,4 +124,4 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
pprint(resp)
|
pprint(resp)
|
||||||
|
|
||||||
pprint(client.get_client(40019))
|
pprint(client.get_client(40011))
|
||||||
|
|||||||
@@ -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()
|
|
||||||
@@ -57,7 +57,6 @@ from typing import Optional, List
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from superfaktura.client_contacts import ClientContactModel
|
from superfaktura.client_contacts import ClientContactModel
|
||||||
from superfaktura.enumerations.data_format import DataFormat
|
|
||||||
from superfaktura.enumerations.language import Language
|
from superfaktura.enumerations.language import Language
|
||||||
from superfaktura.superfaktura_api import SuperFakturaAPI
|
from superfaktura.superfaktura_api import SuperFakturaAPI
|
||||||
from superfaktura.utils.data_types import Date, DateEncoder
|
from superfaktura.utils.data_types import Date, DateEncoder
|
||||||
@@ -255,7 +254,7 @@ class Invoice(SuperFakturaAPI):
|
|||||||
invoice_model: InvoiceModel,
|
invoice_model: InvoiceModel,
|
||||||
items: List[InvoiceItem],
|
items: List[InvoiceItem],
|
||||||
contact: ClientContactModel,
|
contact: ClientContactModel,
|
||||||
invoice_settings: Optional[InvoiceSettings],
|
invoice_settings: Optional[InvoiceSettings] = None,
|
||||||
) -> InvoiceRespModel:
|
) -> InvoiceRespModel:
|
||||||
"""
|
"""
|
||||||
Adds a new invoice.
|
Adds a new invoice.
|
||||||
@@ -277,7 +276,7 @@ class Invoice(SuperFakturaAPI):
|
|||||||
"Invoice": invoice_model.as_dict(),
|
"Invoice": invoice_model.as_dict(),
|
||||||
"InvoiceItem": [item.as_dict() for item in items],
|
"InvoiceItem": [item.as_dict() for item in items],
|
||||||
"Client": contact.as_dict(),
|
"Client": contact.as_dict(),
|
||||||
"InvoiceSetting": invoice_settings.as_dict(),
|
"InvoiceSetting": invoice_settings.as_dict() if invoice_settings else {},
|
||||||
}
|
}
|
||||||
url = "invoices/create"
|
url = "invoices/create"
|
||||||
resp = self.post(endpoint=url, data=json.dumps(data, cls=DateEncoder))
|
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.
|
bytes: A bytes containing the PDF data.
|
||||||
"""
|
"""
|
||||||
url = f"{language}/invoices/pdf/{invoice.invoice_id}/token:{invoice.invoice_token}"
|
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
|
return document
|
||||||
|
|||||||
@@ -32,8 +32,6 @@ from typing import Dict
|
|||||||
import requests
|
import requests
|
||||||
from dotenv import load_dotenv # type: ignore
|
from dotenv import load_dotenv # type: ignore
|
||||||
|
|
||||||
from superfaktura.enumerations.data_format import DataFormat
|
|
||||||
|
|
||||||
|
|
||||||
class SuperFakturaAPIException(Exception):
|
class SuperFakturaAPIException(Exception):
|
||||||
"""Exception for errors when working with the SuperFaktura API."""
|
"""Exception for errors when working with the SuperFaktura API."""
|
||||||
@@ -64,9 +62,7 @@ class SuperFakturaAPI:
|
|||||||
f"{_api_company_id}"
|
f"{_api_company_id}"
|
||||||
}
|
}
|
||||||
|
|
||||||
def get(
|
def get(self, endpoint: str, timeout: int = 5) -> bytes:
|
||||||
self, endpoint: str, data_format: DataFormat = DataFormat.JSON, timeout: int = 5
|
|
||||||
) -> Dict:
|
|
||||||
"""
|
"""
|
||||||
Retrieves data from the SuperFaktura API.
|
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.
|
timeout (int, optional): The timeout for the API request in seconds. Defaults to 5.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dict: The retrieved data in JSON format.
|
bytes: The retrieved data in bytes.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
SuperFakturaAPIException: If the API request fails or returns an error.
|
SuperFakturaAPIException: If the API request fails or returns an error.
|
||||||
@@ -94,14 +90,9 @@ class SuperFakturaAPI:
|
|||||||
url = f"{self._api_url}/{endpoint}"
|
url = f"{self._api_url}/{endpoint}"
|
||||||
req = requests.get(url=url, headers=self._auth_header, timeout=timeout)
|
req = requests.get(url=url, headers=self._auth_header, timeout=timeout)
|
||||||
if req.status_code == 200:
|
if req.status_code == 200:
|
||||||
if data_format == DataFormat.JSON:
|
return req.content
|
||||||
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")
|
|
||||||
raise SuperFakturaAPIException(
|
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:
|
def post(self, endpoint: str, data: str, timeout: int = 5) -> Dict:
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ Usage:
|
|||||||
print(countries)
|
print(countries)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
from superfaktura.superfaktura_api import SuperFakturaAPI
|
from superfaktura.superfaktura_api import SuperFakturaAPI
|
||||||
|
|
||||||
|
|
||||||
@@ -30,4 +32,5 @@ def country_list():
|
|||||||
"""
|
"""
|
||||||
api = SuperFakturaAPI()
|
api = SuperFakturaAPI()
|
||||||
url = "countries"
|
url = "countries"
|
||||||
return api.get(url)
|
countries = api.get(url)
|
||||||
|
return json.loads(countries)
|
||||||
|
|||||||
Reference in New Issue
Block a user