initial commit
This commit is contained in:
109
src/data/apibase.py
Normal file
109
src/data/apibase.py
Normal file
@@ -0,0 +1,109 @@
|
||||
import time
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
class API:
|
||||
def __init__(self, url: str, username: str = None, password: str = None):
|
||||
self.url = url
|
||||
self.auth = (username, password)
|
||||
self.connected = self.test_connection()
|
||||
|
||||
def test_connection(self) -> bool:
|
||||
tries = 10
|
||||
delay = 1
|
||||
for _ in range(tries):
|
||||
try:
|
||||
requests.get(self.url)
|
||||
return True
|
||||
except:
|
||||
print(f"Connection failed, retrying in {delay} seconds")
|
||||
time.sleep(delay)
|
||||
delay *= 2
|
||||
return False
|
||||
|
||||
def get(self, url, options: dict = None) -> requests.models.Response | None:
|
||||
"""Get the response from the api.
|
||||
|
||||
Args:
|
||||
----
|
||||
- url (str): the part after the default api url (e.g. api.mangadex.org/*manga*)
|
||||
- options (dict, optional): Options available by the API. Defaults to None.
|
||||
|
||||
Returns:
|
||||
-------
|
||||
- Response: the response from the api formatted as a json
|
||||
- None: if the response is not 200
|
||||
"""
|
||||
url = f"{self.url}/{url}"
|
||||
# print(url)
|
||||
result = requests.get(url, auth=self.auth, params=options if options else None)
|
||||
if not result.status_code == 200:
|
||||
print(result.text)
|
||||
return None
|
||||
if "thumbnail" in url:
|
||||
return result.content
|
||||
return result.json()
|
||||
|
||||
def put(self, url, data: dict = None) -> requests.models.Response | None:
|
||||
"""put the data to the api
|
||||
|
||||
Args:
|
||||
url (str): the part after the default api url (e.g. api.mangadex.org/*manga*)
|
||||
data (dict, optional): the data to be put. Defaults to None.
|
||||
|
||||
Returns:
|
||||
Response: the response from the api formatted as a json
|
||||
None: if the response is not 200
|
||||
"""
|
||||
url = f"{self.url}/{url}"
|
||||
result = requests.put(url, auth=self.auth, json=data if data else None)
|
||||
if not result.status_code == 200:
|
||||
print(result.text)
|
||||
return None
|
||||
return result.json()
|
||||
|
||||
def patch(self, url, data: dict) -> requests.models.Response | None:
|
||||
"""patch the data to the api
|
||||
|
||||
Args:
|
||||
url (str): the part after the default api url (e.g. api.mangadex.org/*manga*)
|
||||
data (dict): the data to be patched
|
||||
|
||||
Returns:
|
||||
Response: the response from the api formatted as a json
|
||||
None: if the response is not 200
|
||||
"""
|
||||
url = f"{self.url}/{url}"
|
||||
result = requests.patch(url, auth=self.auth, json=data if data else None)
|
||||
if not result.status_code == 200:
|
||||
print(result.text)
|
||||
return None
|
||||
return result.json()
|
||||
|
||||
def post(self, url, data: dict = None) -> requests.models.Response | None:
|
||||
"""post the data to the api
|
||||
|
||||
Args:
|
||||
url (str): the part after the default api url (e.g. api.mangadex.org/*manga*)
|
||||
data (dict): the data to be posted
|
||||
|
||||
Returns:
|
||||
Response: the response from the api formatted as a json
|
||||
None: if the response is not 200
|
||||
"""
|
||||
url = f"{self.url}/{url}"
|
||||
result = requests.post(url, auth=self.auth, json=data if data else None)
|
||||
if not result.status_code == 200:
|
||||
print(result.text)
|
||||
return None
|
||||
return result.json()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("This is a module, not a script")
|
||||
ap = API("https://api.mangadex.org")
|
||||
res = ap.get(
|
||||
"/manga?title=My Instant Death Ability Is So Overpowered, No One in This Other World Stands a Chance Against Me! —AΩ—"
|
||||
)
|
||||
print(res)
|
||||
Reference in New Issue
Block a user