Fix messed up parameters in request

This commit is contained in:
Andre Basche 2023-06-28 20:25:52 +02:00
parent 52837f16e3
commit b5d8a90d79
5 changed files with 20 additions and 11 deletions

View file

@ -4,6 +4,7 @@ from contextlib import asynccontextmanager
from typing import Dict, Any from typing import Dict, Any
import aiohttp import aiohttp
from yarl import URL
from pyhon import const from pyhon import const
from pyhon.connection.handler.base import ConnectionHandler from pyhon.connection.handler.base import ConnectionHandler
@ -17,10 +18,10 @@ class HonAnonymousConnectionHandler(ConnectionHandler):
@asynccontextmanager @asynccontextmanager
async def _intercept( async def _intercept(
self, method: Callback, *args: Any, **kwargs: Any self, method: Callback, url: str | URL, *args: Any, **kwargs: Dict[str, Any]
) -> AsyncIterator[aiohttp.ClientResponse]: ) -> AsyncIterator[aiohttp.ClientResponse]:
kwargs["headers"] = kwargs.pop("headers", {}) | self._HEADERS kwargs["headers"] = kwargs.pop("headers", {}) | self._HEADERS
async with method(*args, **kwargs) as response: async with method(url, *args, **kwargs) as response:
if response.status == 403: if response.status == 403:
_LOGGER.error("Can't authenticate anymore") _LOGGER.error("Can't authenticate anymore")
yield response yield response

View file

@ -1,9 +1,10 @@
import logging import logging
from collections.abc import AsyncIterator from collections.abc import AsyncIterator
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from typing import Optional, List, Tuple, Any from typing import Optional, List, Tuple, Any, Dict
import aiohttp import aiohttp
from yarl import URL
from pyhon import const from pyhon import const
from pyhon.connection.handler.base import ConnectionHandler from pyhon.connection.handler.base import ConnectionHandler
@ -29,9 +30,9 @@ class HonAuthConnectionHandler(ConnectionHandler):
@asynccontextmanager @asynccontextmanager
async def _intercept( async def _intercept(
self, method: Callback, *args: Any, **kwargs: Any self, method: Callback, url: str | URL, *args: Any, **kwargs: Dict[str, Any]
) -> AsyncIterator[aiohttp.ClientResponse]: ) -> AsyncIterator[aiohttp.ClientResponse]:
kwargs["headers"] = kwargs.pop("headers", {}) | self._HEADERS kwargs["headers"] = kwargs.pop("headers", {}) | self._HEADERS
async with method(*args, **kwargs) as response: async with method(url, *args, **kwargs) as response:
self._called_urls.append((response.status, str(response.request_info.url))) self._called_urls.append((response.status, str(response.request_info.url)))
yield response yield response

View file

@ -6,6 +6,7 @@ from typing import Optional, Dict, Type, Any, Protocol
import aiohttp import aiohttp
from typing_extensions import Self from typing_extensions import Self
from yarl import URL
from pyhon import const, exceptions from pyhon import const, exceptions
from pyhon.typedefs import Callback from pyhon.typedefs import Callback
@ -47,7 +48,7 @@ class ConnectionHandler:
@asynccontextmanager @asynccontextmanager
def _intercept( def _intercept(
self, method: Callback, *args: Any, loop: int = 0, **kwargs: Any self, method: Callback, url: str | URL, *args: Any, **kwargs: Dict[str, Any]
) -> AsyncIterator[aiohttp.ClientResponse]: ) -> AsyncIterator[aiohttp.ClientResponse]:
raise NotImplementedError raise NotImplementedError

View file

@ -6,6 +6,7 @@ from typing import Optional, Dict, Any
import aiohttp import aiohttp
from typing_extensions import Self from typing_extensions import Self
from yarl import URL
from pyhon.connection.auth import HonAuth from pyhon.connection.auth import HonAuth
from pyhon.connection.device import HonDevice from pyhon.connection.device import HonDevice
@ -54,16 +55,19 @@ class HonConnectionHandler(ConnectionHandler):
@asynccontextmanager @asynccontextmanager
async def _intercept( async def _intercept(
self, method: Callback, *args: Any, loop: int = 0, **kwargs: Dict[str, str] self, method: Callback, url: str | URL, *args: Any, **kwargs: Any
) -> AsyncIterator[aiohttp.ClientResponse]: ) -> AsyncIterator[aiohttp.ClientResponse]:
loop: int = kwargs.get("loop", 0)
kwargs["headers"] = await self._check_headers(kwargs.get("headers", {})) kwargs["headers"] = await self._check_headers(kwargs.get("headers", {}))
async with method(args[0], *args[1:], **kwargs) as response: async with method(url, *args, **kwargs) as response:
if ( if (
self.auth.token_expires_soon or response.status in [401, 403] self.auth.token_expires_soon or response.status in [401, 403]
) and loop == 0: ) and loop == 0:
_LOGGER.info("Try refreshing token...") _LOGGER.info("Try refreshing token...")
await self.auth.refresh() await self.auth.refresh()
async with self._intercept(method, loop=loop + 1, **kwargs) as result: async with self._intercept(
method, url, *args, loop=loop + 1, **kwargs
) as result:
yield result yield result
elif ( elif (
self.auth.token_is_expired or response.status in [401, 403] self.auth.token_is_expired or response.status in [401, 403]
@ -75,7 +79,9 @@ class HonConnectionHandler(ConnectionHandler):
await response.text(), await response.text(),
) )
await self.create() await self.create()
async with self._intercept(method, loop=loop + 1, **kwargs) as result: async with self._intercept(
method, url, *args, loop=loop + 1, **kwargs
) as result:
yield result yield result
elif loop >= 2: elif loop >= 2:
_LOGGER.error( _LOGGER.error(

View file

@ -7,7 +7,7 @@ with open("README.md", "r") as f:
setup( setup(
name="pyhOn", name="pyhOn",
version="0.14.3", version="0.14.4",
author="Andre Basche", author="Andre Basche",
description="Control hOn devices with python", description="Control hOn devices with python",
long_description=long_description, long_description=long_description,