forked from LiveCarta/BookConverter
add script for working with api
This commit is contained in:
162
src/access.py
Normal file
162
src/access.py
Normal file
@@ -0,0 +1,162 @@
|
||||
import json
|
||||
import os
|
||||
import time
|
||||
import requests
|
||||
from threading import Event
|
||||
|
||||
|
||||
class Access:
|
||||
PENDING = 1
|
||||
PROCESS = 2
|
||||
GENERATE = 3
|
||||
FINISH = 4
|
||||
ERROR = 5
|
||||
|
||||
url = None
|
||||
username = None
|
||||
password = None
|
||||
|
||||
token = None
|
||||
refresh = None
|
||||
refresh_time = None
|
||||
headers = None
|
||||
|
||||
refreshing = Event()
|
||||
|
||||
def __init__(self):
|
||||
self.read_credentials()
|
||||
self.get_token()
|
||||
self.refreshing.set()
|
||||
|
||||
def read_credentials(self):
|
||||
folder_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
config_path = os.path.join(folder_path, "config/api_config.json")
|
||||
with open(config_path, "r") as f:
|
||||
params = json.load(f)
|
||||
|
||||
self.refreshing.clear()
|
||||
self.url = params['url']
|
||||
self.username = params['username']
|
||||
self.password = params['password']
|
||||
self.refreshing.set()
|
||||
|
||||
def format_header(self):
|
||||
self.headers = {
|
||||
'Authorization': f'Bearer {self.token}'
|
||||
}
|
||||
|
||||
def is_time_for_refreshing(self):
|
||||
return self.refresh_time < time.time()
|
||||
|
||||
def get_token(self):
|
||||
json_form = {
|
||||
'grantType': 'password',
|
||||
'username': self.username,
|
||||
'password': self.password
|
||||
}
|
||||
response = requests.post(f'{self.url}/token', json=json_form)
|
||||
|
||||
if response.status_code == 400:
|
||||
raise Exception('400 Bad request: invalid login and/or password.')
|
||||
elif response.status_code == 200:
|
||||
self.refreshing.clear()
|
||||
self.token = response.json()['accessToken']
|
||||
self.refresh = response.json()['refreshToken']
|
||||
self.refresh_time = response.json()['expiresIn']
|
||||
self.format_header()
|
||||
self.refreshing.set()
|
||||
else:
|
||||
raise Exception(f'{response.status_code}')
|
||||
|
||||
def refresh_token(self):
|
||||
json_form = {
|
||||
'grantType': 'refresh_token',
|
||||
'refreshToken': self.refresh
|
||||
}
|
||||
response = requests.post(f'{self.url}/token', json=json_form)
|
||||
|
||||
if response.status_code == 400:
|
||||
raise Exception('400 Bad request: wrong request parameters for refreshing.')
|
||||
elif response.status_code == 401:
|
||||
self.get_token()
|
||||
elif response.status_code == 200:
|
||||
self.refreshing.clear()
|
||||
self.token = response.json()['accessToken']
|
||||
self.refresh = response.json()['refreshToken']
|
||||
self.refresh_time = response.json()['expiresIn']
|
||||
self.format_header()
|
||||
self.refreshing.set()
|
||||
else:
|
||||
raise Exception(f'{response.status_code}')
|
||||
|
||||
def get_doc(self, doc_id):
|
||||
if self.is_time_for_refreshing():
|
||||
self.refresh_token()
|
||||
|
||||
self.refreshing.wait()
|
||||
response = requests.get(f'{self.url}/doc-convert/{doc_id}/file', headers=self.headers)
|
||||
|
||||
if response.status_code == 404:
|
||||
raise FileNotFoundError('404 Not Found: file have not found.')
|
||||
elif response.status_code == 200:
|
||||
content = response.content
|
||||
else:
|
||||
raise Exception(f'{response.status_code}')
|
||||
|
||||
return content
|
||||
|
||||
def send_image(self, img, doc_id):
|
||||
if self.is_time_for_refreshing():
|
||||
self.refresh_token()
|
||||
|
||||
self.refreshing.wait()
|
||||
|
||||
with open(img, 'rb') as img_file:
|
||||
files = {
|
||||
'image': (os.path.basename(img), img_file)
|
||||
}
|
||||
response = requests.post(f'{self.url}/doc-convert/image', files=files, headers=self.headers)
|
||||
|
||||
if response.status_code == 400:
|
||||
self.update_status(doc_id, self.ERROR)
|
||||
raise Exception(f'400 Bad request: {response.json()["message"]}.')
|
||||
elif response.status_code == 200:
|
||||
img_url = response.json()['imageUrl']
|
||||
else:
|
||||
self.update_status(doc_id, self.ERROR)
|
||||
raise Exception(f'{response.status_code}')
|
||||
|
||||
return img_url
|
||||
|
||||
def send_book(self, doc_id, content):
|
||||
if self.is_time_for_refreshing():
|
||||
self.refresh_token()
|
||||
|
||||
self.refreshing.wait()
|
||||
json_content = {
|
||||
'json': json.dumps(content)
|
||||
}
|
||||
response = requests.post(f'{self.url}/doc-convert/{doc_id}/import', json=json_content, headers=self.headers)
|
||||
|
||||
if response.status_code == 400:
|
||||
self.update_status(doc_id, self.ERROR)
|
||||
raise Exception(f'400 Bad request')
|
||||
elif response.status_code == 200:
|
||||
pass
|
||||
else:
|
||||
self.update_status(doc_id, self.ERROR)
|
||||
raise Exception(f'{response.status_code}')
|
||||
|
||||
def update_status(self, doc_id, status):
|
||||
if self.is_time_for_refreshing():
|
||||
self.refresh_token()
|
||||
|
||||
self.refreshing.wait()
|
||||
response = requests.patch(f'{self.url}/doc-convert/{doc_id}/status/{status}', headers=self.headers)
|
||||
|
||||
if response.status_code == 400:
|
||||
raise Exception(f'400 Bad request')
|
||||
elif response.status_code == 200:
|
||||
pass
|
||||
else:
|
||||
raise Exception(f'{response.status_code}')
|
||||
Reference in New Issue
Block a user