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
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

View file

@ -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

View file

@ -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

View file

@ -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(

View file

@ -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,