Fix messed up parameters in request

pull/14/head v0.14.4
Andre Basche 12 months ago
parent 52837f16e3
commit b5d8a90d79

@ -4,6 +4,7 @@ from contextlib import asynccontextmanager
from typing import Dict, Any
import aiohttp
from yarl import URL
from pyhon import const
from pyhon.connection.handler.base import ConnectionHandler
@ -17,10 +18,10 @@ class HonAnonymousConnectionHandler(ConnectionHandler):
@asynccontextmanager
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]:
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:
_LOGGER.error("Can't authenticate anymore")
yield response

@ -1,9 +1,10 @@
import logging
from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from typing import Optional, List, Tuple, Any
from typing import Optional, List, Tuple, Any, Dict
import aiohttp
from yarl import URL
from pyhon import const
from pyhon.connection.handler.base import ConnectionHandler
@ -29,9 +30,9 @@ class HonAuthConnectionHandler(ConnectionHandler):
@asynccontextmanager
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]:
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)))
yield response

@ -6,6 +6,7 @@ from typing import Optional, Dict, Type, Any, Protocol
import aiohttp
from typing_extensions import Self
from yarl import URL
from pyhon import const, exceptions
from pyhon.typedefs import Callback
@ -47,7 +48,7 @@ class ConnectionHandler:
@asynccontextmanager
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]:
raise NotImplementedError

@ -6,6 +6,7 @@ from typing import Optional, Dict, Any
import aiohttp
from typing_extensions import Self
from yarl import URL
from pyhon.connection.auth import HonAuth
from pyhon.connection.device import HonDevice
@ -54,16 +55,19 @@ class HonConnectionHandler(ConnectionHandler):
@asynccontextmanager
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]:
loop: int = kwargs.get("loop", 0)
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 (
self.auth.token_expires_soon or response.status in [401, 403]
) and loop == 0:
_LOGGER.info("Try refreshing token...")
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
elif (
self.auth.token_is_expired or response.status in [401, 403]
@ -75,7 +79,9 @@ class HonConnectionHandler(ConnectionHandler):
await response.text(),
)
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
elif loop >= 2:
_LOGGER.error(

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

Loading…
Cancel
Save