Improve pdf download
This commit is contained in:
parent
d1f3de9ebd
commit
e826b8851f
@ -1,13 +1,13 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import six
|
|
||||||
import json
|
import json
|
||||||
import datetime
|
import datetime
|
||||||
from time import strftime
|
import requests
|
||||||
|
|
||||||
|
from time import strftime
|
||||||
|
from collections import defaultdict
|
||||||
from python_ifirma.exceptions import PythonIfirmaExceptionFactory
|
from python_ifirma.exceptions import PythonIfirmaExceptionFactory
|
||||||
from python_ifirma.helpers import Helpers
|
from python_ifirma.helpers import Helpers
|
||||||
import requests
|
|
||||||
|
|
||||||
|
|
||||||
from urllib.parse import urljoin, quote
|
from urllib.parse import urljoin, quote
|
||||||
@ -176,7 +176,7 @@ class iFirmaAPI():
|
|||||||
__user_key_name = "abonent"
|
__user_key_name = "abonent"
|
||||||
keys = {
|
keys = {
|
||||||
__invoice_key_name: None,
|
__invoice_key_name: None,
|
||||||
__cost_key_name : None,
|
__cost_key_name: None,
|
||||||
__user_key_name: None
|
__user_key_name: None
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,9 +202,10 @@ class iFirmaAPI():
|
|||||||
"Authentication": self.__get_auth_header(request_hash_text,
|
"Authentication": self.__get_auth_header(request_hash_text,
|
||||||
key_name)
|
key_name)
|
||||||
}
|
}
|
||||||
response = requests.get(url, headers=headers, params=params)
|
return requests.get(url, headers=headers, params=params)
|
||||||
return json.loads(response.content.decode('utf-8'))
|
|
||||||
|
|
||||||
|
def __get_json(self, url_path, key_name, params={}):
|
||||||
|
return json.loads(self.__get(url_path, key_name, params).content.decode('utf-8'))
|
||||||
|
|
||||||
def __request(self, method, url_path, key_name, request_data={}):
|
def __request(self, method, url_path, key_name, request_data={}):
|
||||||
"""Send request with given method to IFirma API"""
|
"""Send request with given method to IFirma API"""
|
||||||
@ -227,21 +228,20 @@ class iFirmaAPI():
|
|||||||
response_code = real_response_content.get("Kod", -1)
|
response_code = real_response_content.get("Kod", -1)
|
||||||
|
|
||||||
if response_code not in (0,
|
if response_code not in (0,
|
||||||
202): # 'Numer faktury' nie jest unikalne
|
202): # 'Numer faktury' nie jest unikalne
|
||||||
raise PythonIfirmaExceptionFactory.throw_exception_by_code(response_code)
|
raise PythonIfirmaExceptionFactory.throw_exception_by_code(response_code)
|
||||||
|
|
||||||
return response_dict
|
return response_dict
|
||||||
|
|
||||||
def find_partner(self, keyword):
|
def find_partner(self, keyword):
|
||||||
return self.__get(f"kontrahenci/{quote(keyword)}.json",
|
return self.__get_json(f"kontrahenci/{quote(keyword)}.json",
|
||||||
self.__invoice_key_name)
|
self.__invoice_key_name)
|
||||||
|
|
||||||
# Invoice generation
|
# Invoice generation
|
||||||
def __create_invoice_and_return_id(self, invoice, url):
|
def __create_invoice_and_return_id(self, invoice, url):
|
||||||
response_dict = self.__request("POST", url, self.__invoice_key_name,
|
response_dict = self.__request("POST", url, self.__invoice_key_name,
|
||||||
invoice.get_request_data())
|
invoice.get_request_data())
|
||||||
|
|
||||||
breakpoint()
|
|
||||||
if response_dict["response"].get("Identyfikator"):
|
if response_dict["response"].get("Identyfikator"):
|
||||||
invoice_id = response_dict["response"]["Identyfikator"]
|
invoice_id = response_dict["response"]["Identyfikator"]
|
||||||
return invoice_id
|
return invoice_id
|
||||||
@ -249,8 +249,8 @@ class iFirmaAPI():
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def __get_invoice_number(self, invoice_id):
|
def __get_invoice_number(self, invoice_id):
|
||||||
rj = self.__get(f"fakturakraj/{invoice_id}.json",
|
rj = self.__get_json(f"fakturakraj/{invoice_id}.json",
|
||||||
self.__user_key_name)
|
self.__user_key_name)
|
||||||
|
|
||||||
if "Kod" in rj["response"] and rj["response"]["Kod"] != 200:
|
if "Kod" in rj["response"] and rj["response"]["Kod"] != 200:
|
||||||
return None
|
return None
|
||||||
@ -268,8 +268,8 @@ class iFirmaAPI():
|
|||||||
Return currently open accounting year and month
|
Return currently open accounting year and month
|
||||||
"""
|
"""
|
||||||
|
|
||||||
response = self.__get("abonent/miesiacksiegowy.json",
|
response = self.__get_json("abonent/miesiacksiegowy.json",
|
||||||
self.__user_key_name)
|
self.__user_key_name)
|
||||||
return (response['response']['RokKsiegowy'],
|
return (response['response']['RokKsiegowy'],
|
||||||
response['response']["MiesiacKsiegowy"])
|
response['response']["MiesiacKsiegowy"])
|
||||||
|
|
||||||
@ -308,27 +308,13 @@ class iFirmaAPI():
|
|||||||
if date_to:
|
if date_to:
|
||||||
params.update(dataDo=date_to)
|
params.update(dataDo=date_to)
|
||||||
|
|
||||||
return self.__get("faktury.json", self.__invoice_key_name,
|
return self.__get_json("faktury.json", self.__invoice_key_name,
|
||||||
params=params)
|
params=params)
|
||||||
|
|
||||||
def get_invoice_pdf(self, invoice_id):
|
# Beware: IFIRMA returns errors printed into the pdf...
|
||||||
url = f"https://www.ifirma.pl/iapi/fakturakraj/{invoice_id}.pdf"
|
def get_invoice_pdf(self, invoice_id, kind=""):
|
||||||
return self.__download_pdf(url)
|
kinds = defaultdict(lambda: "fakturakraj",
|
||||||
|
{"prz_eksport_dost_uslug_nie_ue": "fakturaeksportuslug",
|
||||||
def __download_pdf(self, url):
|
"prz_eksport_dost_uslug_ue": "fakturaeksportuslugue"})
|
||||||
request_hash_text = "{}{}{}".format(
|
return self.__get(f"{kinds[kind]}/{invoice_id}.pdf",
|
||||||
url,
|
self.__invoice_key_name)
|
||||||
self.__username,
|
|
||||||
self.__invoice_key_name,
|
|
||||||
)
|
|
||||||
headers = {
|
|
||||||
"Accept": "application/pdf",
|
|
||||||
"Authentication": self.__get_auth_header(request_hash_text)
|
|
||||||
}
|
|
||||||
resp = requests.get(url, headers=headers)
|
|
||||||
|
|
||||||
content = resp.content
|
|
||||||
file_obj = six.BytesIO()
|
|
||||||
file_obj.write(content)
|
|
||||||
file_obj.seek(0)
|
|
||||||
return file_obj
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user