To handle API request retries due to timeouts
Project description
ApiRetrys
Are you annoyed because your request has an error due to internet problems? I think this library could be the answer
Feature ✨
- automatically repeats if the request times out
- now the runtime logs are more colorful
- The number of repetitions and waiting time can be adjusted and default values are provided
- maintain flexibility by returning all responses received
- provides logs to make monitoring easier, which can be turned on or not
- provides all the methods in the request
- can handle to may requests
- You can handle forbidden (403) by refreshing the session with a request to the main URL
Tech 💻
- requests is an easy-to-use Python library for interacting with APIs and making HTTP requests
Requirement ⚙️
Installation 🛠️
pip install ApiRetrys
How To Usage 🤔
Basic use
from ApiRetrys import ApiRetry
api = ApiRetry(show_logs=True)
response = api.get(url='https://github.com/')
# or you can define data types
from ApiRetrys import ApiRetry
from requests import Response
api = ApiRetry(show_logs=True)
response: Response = api.get(url='https://github.com/',)
# or you want to manually set the max_retries
# by defaulth (max_retries) is 5
response: Response = api.get(url='https://github.com/', max_retries=10)
if you set param (show_logs=True) then a log will come out like this
If the error exceeds max_retries then it will return last response
With other parameters
from ApiRetrys import ApiRetry
from requests import Response
headers = {
"PUBLIC-CSRF-TOKEN": '7giS6UPv3Rf2l9fclp2wFzCEI',
"User-Agent": user_agent.random
}
payload = {
"query":"anime",
"page":1,
"per_page":50,
"sorting":"likes",
"pro_first":"1",
"filters":[],
"additional_fields":[]
}
cookies = {
'PRIVATE-CSRF-TOKEN': '8Mc45%2BAa3Vd',
'cf_clearance': 'rpQn91kojLw_ZCzrgjP',
'__stripe_mid': '0adecf01-7471-434e-aa12-6c2d33cbb216fd19aa',
'g_state': '{"i_p":1702902016560,"i_l":1}',
'visitor-uuid': 'fbf18513-e803-',
'__cf_bm': '_ukyfnf1.He..wDhIxF',
'__stripe_sid': 'c7956d65-b70f-4e',
'referrer-host': 'www.google.com'
}
api = ApiRetry(show_logs=False)
response: Response = api.post(url='https://github.com/', data=payload, cookies=cookies)
examples of more complex usage as well as the use of handlers for many requests and forbidden
from ApiRetrys import ApiRetry
from requests import Response
class Main:
def __init__(self) -> None:
self.api = ApiRetry(
# parameters to display logs or not
show_logs=True,
# parameter whether you want to use the default header,
# but only contain the user agent
defaulth_headers=True,
# param to handle responses 403 and 429,
# if false it will be returned even though the responses are 403 and 429
handle_forbidden=True,
# whatever response you want to handle
# This is the default value, if it is not entered there is no problem
codes_handler=[403, 429],
# URL to refresh the session if you get a 403 response
# (it is recommended to use the main URL of the destination website)
redirect_url='https://github.com/')
...
def execute(self, url: str):
response: Response = self.api.get(url)
print(response)
...
if __name__ == '__main__':
main = Main()
main.execute('https://github.com/ryyos/ApiRetrys')
explanation
when you try to make a request to the url https://github.com/ryyos/ApiRetrys but you get a 403 response because your session does not have CSRF-TOKEN, or because there are too many requests, then the code will handle it by trying to refresh the session by making requests to the main URL in the redirect_url parameter
🚀Structure
│ LICENSE
│ README.md
│ setup.py
│
└───ApiRetrys
ApiRetrys.py
Logs.py
__init__.py
Author
👤 Rio Dwi Saputra
- Twitter: @ryyo_cs
- Github: @ryyos
- Instagram: @ryyo.cs
- LinkedIn: @rio-dwi-saputra-23560b287
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ApiRetrys-0.0.5.tar.gz
(6.4 kB
view details)
File details
Details for the file ApiRetrys-0.0.5.tar.gz
.
File metadata
- Download URL: ApiRetrys-0.0.5.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 365c0d2c735f2a96f6b37b9c6d7c39fc580acbbfc003c312f0941fbd31e09f44 |
|
MD5 | 444b8e0a20cff577220d69eec6d0a7d5 |
|
BLAKE2b-256 | f2b05c2b3910539aea2c0e2b98d7f54aa141a356573a704a90836360ea393dfb |