Trying to make session embeddable

This commit is contained in:
2025-10-29 17:58:41 +01:00
parent 4d2291526e
commit 692b4803d7
4 changed files with 31 additions and 54 deletions

View File

@@ -21,8 +21,12 @@ class HttpClientException(ClientException):
class Client():
def __init__(self, username, api_key) -> None:
def __init__(self, username, api_key, session=None) -> None:
self.host = "https://api.rapt.io"
if session is None:
self.session = aiohttp.ClientSession()
else:
self.session = session
self.username = username
self.api_key = api_key
self.token = None
@@ -30,23 +34,21 @@ class Client():
self.expires = None
async def get_jwt_token(self):
async with aiohttp.ClientSession() as session:
url = "https://id.rapt.io/connect/token"
async with session.post(url, data={
"client_id": "rapt-user",
"grant_type": "password",
"username": self.username,
"password": self.api_key
}) as response:
response_json = await response.json()
if response.status == 200:
self.token = response_json["access_token"]
self.expires_seconds = response_json["expires_in"]
self.expires = datetime.now() + timedelta(seconds=self.expires_seconds)
logger.trace("Expires: " + str(self.expires))
else:
raise HttpClientException(response.reason, response.status)
url = "https://id.rapt.io/connect/token"
async with self.session.post(url, data={
"client_id": "rapt-user",
"grant_type": "password",
"username": self.username,
"password": self.api_key
}) as response:
response_json = await response.json()
if response.status == 200:
self.token = response_json["access_token"]
self.expires_seconds = response_json["expires_in"]
self.expires = datetime.now() + timedelta(seconds=self.expires_seconds)
logger.trace("Expires: " + str(self.expires))
else:
raise HttpClientException(response.reason, response.status)
async def get_auth_headers(self):
if self.expires is not None:
@@ -58,13 +60,11 @@ class Client():
async def get_json(self, url, parameters):
headers = await self.get_auth_headers()
logger.trace("HEADERS: " + str(headers))
async with aiohttp.ClientSession() as session:
async with session.get(url, headers=headers, params=parameters) as response:
response_json = await response.json()
logger.trace(response.request_info.url)
if response.status == 200:
return response_json
else:
raise HttpClientException(response.reason, response.status)
logger.trace("HEADERS: " + str(headers))
async with self.session.get(url, headers=headers, params=parameters) as response:
response_json = await response.json()
logger.trace(response.request_info.url)
if response.status == 200:
return response_json
else:
raise HttpClientException(response.reason, response.status)