Trying to make session embeddable
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "rapt-cloud-api"
|
||||
version = "0.2.1"
|
||||
version = "0.2.2"
|
||||
description = "Python bindings for the Rapt.io API"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.14"
|
||||
|
||||
23
setup.py
23
setup.py
@@ -1,23 +0,0 @@
|
||||
from setuptools import find_packages, setup
|
||||
|
||||
with open("README.md", "r", encoding="utf-8") as fh:
|
||||
long_description = fh.read()
|
||||
|
||||
setup(
|
||||
name='rapt-cloud-api',
|
||||
version='0.2.0',
|
||||
author='Jesper Fussing Mørk',
|
||||
author_email='jfmo@moerks.dk',
|
||||
description='Client Library for the rapt.io api',
|
||||
long_description=long_description,
|
||||
long_description_content_type="text/markdown",
|
||||
url='https://gitea.moerks.dk/jfm/rapt-cloud-api',
|
||||
project_urls={
|
||||
"Bug Tracker": "https://gitea.moerks.dk/jfm/rapt-cloud-api/issues",
|
||||
},
|
||||
license='MIT',
|
||||
package_dir={"": "src"},
|
||||
packages=find_packages(where="src"),
|
||||
install_requires=["loguru", "pydantic", "aiohttp"]
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -9,8 +9,8 @@ from rapt.hydrometer import Hydrometer
|
||||
@pytest.fixture
|
||||
async def client(aiohttp_client):
|
||||
app = web.Application()
|
||||
await aiohttp_client(app)
|
||||
yield Client("test", "test")
|
||||
session = await aiohttp_client(app)
|
||||
yield Client("test", "test", None)
|
||||
|
||||
async def test_get_hydrometers(client):
|
||||
with aioresponses() as responses:
|
||||
|
||||
Reference in New Issue
Block a user