diff --git a/.github/workflows/python-check.yml b/.github/workflows/python-check.yml index 813ebd7..53a37b0 100644 --- a/.github/workflows/python-check.yml +++ b/.github/workflows/python-check.yml @@ -34,9 +34,9 @@ jobs: - name: Type check with mypy run: | mypy pyhon/ - # - name: Analysing the code with pylint - # run: | - # pylint --max-line-length 88 $(git ls-files '*.py') + - name: Analysing the code with pylint + run: | + pylint $(git ls-files '*.py') - name: Check black style run: | black . --check diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..f350fd7 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,7 @@ +[MESSAGES CONTROL] + +disable=C,R + +[FORMAT] + +max-line-length=88 diff --git a/pyhon/__main__.py b/pyhon/__main__.py index ea529c0..c6460f5 100755 --- a/pyhon/__main__.py +++ b/pyhon/__main__.py @@ -30,13 +30,13 @@ def get_arguments() -> Dict[str, Any]: export.add_argument("--zip", help="create zip archive", action="store_true") export.add_argument("--anonymous", help="anonymize data", action="store_true") export.add_argument("directory", nargs="?", default=Path().cwd()) - translate = subparser.add_parser( + translation = subparser.add_parser( "translate", help="print available translation keys" ) - translate.add_argument( + translation.add_argument( "translate", help="language (de, en, fr...)", metavar="LANGUAGE" ) - translate.add_argument("--json", help="print as json", action="store_true") + translation.add_argument("--json", help="print as json", action="store_true") parser.add_argument( "-i", "--import", help="import pyhon data", nargs="?", default=Path().cwd() ) diff --git a/pyhon/appliances/ov.py b/pyhon/appliances/ov.py index 77478cf..9ebbb87 100644 --- a/pyhon/appliances/ov.py +++ b/pyhon/appliances/ov.py @@ -1,7 +1,6 @@ from typing import Any, Dict from pyhon.appliances.base import ApplianceBase -from pyhon.parameter.program import HonParameterProgram class Appliance(ApplianceBase): diff --git a/pyhon/command_loader.py b/pyhon/command_loader.py index 578fa57..127dd08 100644 --- a/pyhon/command_loader.py +++ b/pyhon/command_loader.py @@ -1,14 +1,15 @@ import asyncio from contextlib import suppress from copy import copy -from typing import Dict, Any, Optional, TYPE_CHECKING, List, Collection +from typing import Dict, Any, Optional, TYPE_CHECKING, List from pyhon.commands import HonCommand +from pyhon.exceptions import NoAuthenticationException from pyhon.parameter.fixed import HonParameterFixed from pyhon.parameter.program import HonParameterProgram if TYPE_CHECKING: - from pyhon import HonAPI, exceptions + from pyhon import HonAPI from pyhon.appliance import HonAppliance @@ -29,7 +30,7 @@ class HonCommandLoader: def api(self) -> "HonAPI": """api connection object""" if self._api is None: - raise exceptions.NoAuthenticationException("Missing hOn login") + raise NoAuthenticationException("Missing hOn login") return self._api @property diff --git a/pyhon/commands.py b/pyhon/commands.py index d76c897..70dc74d 100644 --- a/pyhon/commands.py +++ b/pyhon/commands.py @@ -170,6 +170,6 @@ class HonCommand: result[name] = parameter return result - def reset(self): + def reset(self) -> None: for parameter in self._parameters.values(): parameter.reset() diff --git a/pyhon/connection/device.py b/pyhon/connection/device.py index 6d680c0..730ef72 100644 --- a/pyhon/connection/device.py +++ b/pyhon/connection/device.py @@ -21,7 +21,7 @@ class HonDevice: return self._os_version @property - def os(self) -> str: + def os_type(self) -> str: return self._os @property @@ -36,7 +36,7 @@ class HonDevice: result: Dict[str, str | int] = { "appVersion": self.app_version, "mobileId": self.mobile_id, - "os": self.os, + "os": self.os_type, "osVersion": self.os_version, "deviceModel": self.device_model, } diff --git a/pyhon/connection/handler/base.py b/pyhon/connection/handler/base.py index efba820..f06053e 100644 --- a/pyhon/connection/handler/base.py +++ b/pyhon/connection/handler/base.py @@ -1,8 +1,8 @@ import logging from collections.abc import AsyncIterator -from contextlib import asynccontextmanager +from contextlib import asynccontextmanager, _AsyncGeneratorContextManager from types import TracebackType -from typing import Optional, Dict, Type, Any, Protocol +from typing import Optional, Dict, Type, Any, Callable, Coroutine, AsyncGenerator import aiohttp from typing_extensions import Self @@ -47,10 +47,11 @@ class ConnectionHandler: return self @asynccontextmanager - def _intercept( + async def _intercept( self, method: Callback, url: str | URL, *args: Any, **kwargs: Dict[str, Any] ) -> AsyncIterator[aiohttp.ClientResponse]: - raise NotImplementedError + async with method(url, *args, **kwargs) as response: + yield response @asynccontextmanager async def get( diff --git a/pyhon/connection/handler/hon.py b/pyhon/connection/handler/hon.py index 5b7692f..8fbeca9 100644 --- a/pyhon/connection/handler/hon.py +++ b/pyhon/connection/handler/hon.py @@ -95,11 +95,11 @@ class HonConnectionHandler(ConnectionHandler): try: await response.json() yield response - except json.JSONDecodeError: + except json.JSONDecodeError as exc: _LOGGER.warning( "%s - JsonDecodeError %s - %s", response.request_info.url, response.status, await response.text(), ) - raise HonAuthenticationError("Decode Error") + raise HonAuthenticationError("Decode Error") from exc diff --git a/pyhon/parameter/base.py b/pyhon/parameter/base.py index 397b9f0..4d70051 100644 --- a/pyhon/parameter/base.py +++ b/pyhon/parameter/base.py @@ -18,7 +18,7 @@ class HonParameter: ] = {} self._set_attributes() - def _set_attributes(self): + def _set_attributes(self) -> None: self._category = self._attributes.get("category", "") self._typology = self._attributes.get("typology", "") self._mandatory = self._attributes.get("mandatory", 0) @@ -61,7 +61,7 @@ class HonParameter: return self._group def add_trigger( - self, value: str, func: Callable[["HonRule"], None], data: "HonRule" + self, value: str, func: Callable[["HonRule"], None], data: "HonRule" ) -> None: if self._value == value: func(data) @@ -93,5 +93,5 @@ class HonParameter: return result - def reset(self): + def reset(self) -> None: self._set_attributes() diff --git a/pyhon/parameter/enum.py b/pyhon/parameter/enum.py index 45309f0..2d49b7c 100644 --- a/pyhon/parameter/enum.py +++ b/pyhon/parameter/enum.py @@ -10,18 +10,18 @@ def clean_value(value: str | float) -> str: class HonParameterEnum(HonParameter): def __init__(self, key: str, attributes: Dict[str, Any], group: str) -> None: super().__init__(key, attributes, group) - self._default = "" - self._value = "" + self._default: str | float = "" + self._value: str | float = "" self._values: List[str] = [] self._set_attributes() if self._default and clean_value(self._default.strip("[]")) not in self.values: self._values.append(self._default) - def _set_attributes(self): + def _set_attributes(self) -> None: super()._set_attributes() - self._default = self._attributes.get("defaultValue") + self._default = self._attributes.get("defaultValue", "") self._value = self._default or "0" - self._values: List[str] = self._attributes.get("enumValues", []) + self._values = self._attributes.get("enumValues", []) def __repr__(self) -> str: return f"{self.__class__} (<{self.key}> {self.values})" diff --git a/pyhon/parameter/fixed.py b/pyhon/parameter/fixed.py index a17df93..125ecd2 100644 --- a/pyhon/parameter/fixed.py +++ b/pyhon/parameter/fixed.py @@ -6,12 +6,12 @@ from pyhon.parameter.base import HonParameter class HonParameterFixed(HonParameter): def __init__(self, key: str, attributes: Dict[str, Any], group: str) -> None: super().__init__(key, attributes, group) - self._value = None + self._value: str | float = "" self._set_attributes() - def _set_attributes(self): + def _set_attributes(self) -> None: super()._set_attributes() - self._value = self._attributes.get("fixedValue", None) + self._value = self._attributes.get("fixedValue", "") def __repr__(self) -> str: return f"{self.__class__} (<{self.key}> fixed)" diff --git a/pyhon/parameter/program.py b/pyhon/parameter/program.py index 2925bd2..4ed2004 100644 --- a/pyhon/parameter/program.py +++ b/pyhon/parameter/program.py @@ -37,7 +37,7 @@ class HonParameterProgram(HonParameterEnum): @values.setter def values(self, values: List[str]) -> None: - return + raise ValueError("Cant set values {values}") @property def ids(self) -> Dict[int, str]: diff --git a/pyhon/parameter/range.py b/pyhon/parameter/range.py index ef0f58a..c51642c 100644 --- a/pyhon/parameter/range.py +++ b/pyhon/parameter/range.py @@ -14,13 +14,13 @@ class HonParameterRange(HonParameter): self._value: float = 0 self._set_attributes() - def _set_attributes(self): + def _set_attributes(self) -> None: super()._set_attributes() - self._min: float = str_to_float(self._attributes["minimumValue"]) - self._max: float = str_to_float(self._attributes["maximumValue"]) - self._step: float = str_to_float(self._attributes["incrementValue"]) - self._default: float = str_to_float(self._attributes.get("defaultValue", self.min)) - self._value: float = self._default + self._min = str_to_float(self._attributes["minimumValue"]) + self._max = str_to_float(self._attributes["maximumValue"]) + self._step = str_to_float(self._attributes["incrementValue"]) + self._default = str_to_float(self._attributes.get("defaultValue", self.min)) + self._value = self._default def __repr__(self) -> str: return f"{self.__class__} (<{self.key}> [{self.min} - {self.max}])" diff --git a/pyhon/typedefs.py b/pyhon/typedefs.py index 2a22319..c6594e5 100644 --- a/pyhon/typedefs.py +++ b/pyhon/typedefs.py @@ -1,4 +1,4 @@ -from typing import Union, Any, TYPE_CHECKING, Protocol +from typing import Union, Any, TYPE_CHECKING, Protocol, AsyncIterator, Coroutine import aiohttp from yarl import URL diff --git a/setup.py b/setup.py index 0b5a130..5ee66ab 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -with open("README.md", "r") as f: +with open("README.md", "r", encoding="utf-8") as f: long_description = f.read() setup(