Fix messed up parameters in request
This commit is contained in:
parent
52837f16e3
commit
b5d8a90d79
5 changed files with 20 additions and 11 deletions
|
@ -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(
|
||||
|
|
2
setup.py
2
setup.py
|
@ -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…
Reference in a new issue