diff --git a/pyproject.toml b/pyproject.toml index 83dedde..333a869 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" diff --git a/setup.py b/setup.py deleted file mode 100644 index 3cbf6e0..0000000 --- a/setup.py +++ /dev/null @@ -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"] -) - diff --git a/src/rapt/client.py b/src/rapt/client.py index 884892b..7a92877 100644 --- a/src/rapt/client.py +++ b/src/rapt/client.py @@ -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) diff --git a/tests/test_hydrometer.py b/tests/test_hydrometer.py index 2c1805a..77d77b7 100644 --- a/tests/test_hydrometer.py +++ b/tests/test_hydrometer.py @@ -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: