diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eb42137..7e37cf4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,11 +27,13 @@ jobs: - name: Install checkers run: | python -mpip install --upgrade pip - python -mpip install black flake8 mypy types-PyYaml - - name: flake - run: flake8 . - - name: black - run: black --check --diff --color --quiet . + python -mpip install mypy types-PyYaml + - name: ruff check + uses: chartboost/ruff-action@v1 + - name: ruff format + uses: chartboost/ruff-action@v1 + with: + args: format --diff - name: mypy run: mypy diff --git a/src/ua_parser/__init__.py b/src/ua_parser/__init__.py index 46cae5b..5fee93f 100644 --- a/src/ua_parser/__init__.py +++ b/src/ua_parser/__init__.py @@ -45,10 +45,8 @@ "parse_user_agent", ] -VERSION = (1, 0, 0) - import contextlib -from typing import Callable, Optional, Type +from typing import Callable, Optional from .core import ( DefaultedParseResult, @@ -73,6 +71,7 @@ from .re2 import Parser as Re2Parser +VERSION = (1, 0, 0) parser: Parser diff --git a/src/ua_parser/basic.py b/src/ua_parser/basic.py index 828a6cb..58b4f6d 100644 --- a/src/ua_parser/basic.py +++ b/src/ua_parser/basic.py @@ -1,20 +1,15 @@ -import io -import os from operator import methodcaller from typing import List from .core import ( Device, - DeviceMatcher, Domain, Matcher, Matchers, OS, - OSMatcher, Parser as AbstractParser, PartialParseResult, UserAgent, - UserAgentMatcher, ) diff --git a/src/ua_parser/caching.py b/src/ua_parser/caching.py index 6ae81ae..9128cb2 100644 --- a/src/ua_parser/caching.py +++ b/src/ua_parser/caching.py @@ -1,7 +1,7 @@ import abc from collections import OrderedDict import threading -from typing import Callable, ContextManager, Dict, Optional, MutableMapping +from typing import Dict, Optional from .core import Parser, Domain, PartialParseResult diff --git a/src/ua_parser/core.py b/src/ua_parser/core.py index 15d86e9..2cd33e4 100644 --- a/src/ua_parser/core.py +++ b/src/ua_parser/core.py @@ -225,11 +225,13 @@ def _replacer(repl: str, m: Match[str]) -> Optional[str]: class Matcher(abc.ABC, Generic[T]): @abc.abstractmethod - def __call__(self, ua: str) -> Optional[T]: ... + def __call__(self, ua: str) -> Optional[T]: + ... @property @abc.abstractmethod - def pattern(self) -> str: ... + def pattern(self) -> str: + ... @property def flags(self) -> int: diff --git a/src/ua_parser/loaders.py b/src/ua_parser/loaders.py index 7743117..9a38220 100644 --- a/src/ua_parser/loaders.py +++ b/src/ua_parser/loaders.py @@ -165,9 +165,8 @@ def load_lazy(d: MatchersData) -> Matchers: class FileLoader(Protocol): - def __call__( - self, path: PathOrFile, loader: DataLoader = load_data - ) -> Matchers: ... + def __call__(self, path: PathOrFile, loader: DataLoader = load_data) -> Matchers: + ... def load_json(f: PathOrFile, loader: DataLoader = load_data) -> Matchers: diff --git a/src/ua_parser/re2.py b/src/ua_parser/re2.py index 867edfa..5ff6724 100644 --- a/src/ua_parser/re2.py +++ b/src/ua_parser/re2.py @@ -1,9 +1,7 @@ from __future__ import annotations -import io -import os import re -from typing import List, Tuple, Union +from typing import List import re2 # type: ignore @@ -16,9 +14,6 @@ Matchers, OS, UserAgent, - UserAgentMatcher, - OSMatcher, - DeviceMatcher, ) diff --git a/src/ua_parser/threaded.py b/src/ua_parser/threaded.py index 4ff5d1f..6be4158 100644 --- a/src/ua_parser/threaded.py +++ b/src/ua_parser/threaded.py @@ -1,5 +1,4 @@ import argparse -import itertools import os import random import threading @@ -11,7 +10,6 @@ BasicParser, CachingParser, Clearing, - Domain, Locking, LRU, Parser, diff --git a/src/ua_parser/user_agent_parser.py b/src/ua_parser/user_agent_parser.py index 7a5ba12..25a8a8c 100644 --- a/src/ua_parser/user_agent_parser.py +++ b/src/ua_parser/user_agent_parser.py @@ -1,7 +1,7 @@ import os import re import warnings -from typing import * +from typing import Any, Dict, Optional, Tuple class UserAgentParser(object): @@ -21,7 +21,9 @@ def __init__( self.v1_replacement = v1_replacement self.v2_replacement = v2_replacement - def Parse(self, user_agent_string: str) -> Tuple[ + def Parse( + self, user_agent_string: str + ) -> Tuple[ Optional[str], Optional[str], Optional[str], @@ -81,7 +83,9 @@ def __init__( self.os_v3_replacement = os_v3_replacement self.os_v4_replacement = os_v4_replacement - def Parse(self, user_agent_string: str) -> Tuple[ + def Parse( + self, user_agent_string: str + ) -> Tuple[ Optional[str], Optional[str], Optional[str], @@ -153,7 +157,9 @@ def __init__( self.brand_replacement = brand_replacement self.model_replacement = model_replacement - def Parse(self, user_agent_string: str) -> Tuple[ + def Parse( + self, user_agent_string: str + ) -> Tuple[ Optional[str], Optional[str], Optional[str], diff --git a/tox.ini b/tox.ini index 18126ce..3245bc6 100644 --- a/tox.ini +++ b/tox.ini @@ -30,13 +30,13 @@ deps = [testenv:flake8] package = skip -deps = flake8 -commands = flake8 {posargs} +deps = ruff +commands = ruff check {posargs} [testenv:black] package = skip -deps = black -commands = black --check --diff {posargs:.} +deps = ruff +commands = ruff format --diff {posargs:.} [testenv:typecheck] package = skip