From 169b435644d92a8311928eb2cd50cff16da05787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20K=C5=82oczko?= Date: Thu, 25 Apr 2024 17:40:16 +0000 Subject: [PATCH] drop python<=3.7 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to https://endoflife.date/python python 3.7 has been EOSed at 7 Jun 2023. Filter all code over `pyupgrade --py38-plus`. Signed-off-by: Tomasz Kłoczko --- docs/conf.py | 2 +- faker/providers/address/es_CL/__init__.py | 2 +- faker/providers/automotive/es_CL/__init__.py | 2 -- faker/providers/automotive/es_ES/__init__.py | 2 -- faker/providers/date_time/__init__.py | 2 +- faker/providers/file/__init__.py | 2 +- faker/providers/internet/el_GR/__init__.py | 4 +-- faker/providers/user_agent/__init__.py | 4 +-- faker/proxy.py | 36 ++++++++++---------- faker/sphinx/autodoc.py | 1 - faker/sphinx/docstring.py | 1 - faker/sphinx/documentor.py | 3 +- faker/sphinx/validator.py | 1 - faker/typing.py | 5 +-- tests/providers/test_enum.py | 2 +- tests/sphinx/test_docstring.py | 1 - tests/sphinx/test_validator.py | 1 - 17 files changed, 31 insertions(+), 40 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 1775a42156..f611d56198 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,7 +44,7 @@ # General information about the project. project = "Faker" -copyright = "2014-{0}, Daniele Faraglia".format(datetime.now().year) +copyright = f"2014-{datetime.now().year}, Daniele Faraglia" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/faker/providers/address/es_CL/__init__.py b/faker/providers/address/es_CL/__init__.py index 959df02bb0..c47dcb3d56 100644 --- a/faker/providers/address/es_CL/__init__.py +++ b/faker/providers/address/es_CL/__init__.py @@ -631,7 +631,7 @@ def commune_and_region(self) -> str: region_index = int(commune_code[0:2]) - 1 region_name = tuple(self.regions.values())[region_index] - return "{:s}, {:s}".format(commune_name, region_name) + return f"{commune_name:s}, {region_name:s}" def road_name(self) -> str: self.generator.set_arguments("kilometer", {"min": 1, "max": 35}) diff --git a/faker/providers/automotive/es_CL/__init__.py b/faker/providers/automotive/es_CL/__init__.py index 0807ebb10b..713f50d3c4 100644 --- a/faker/providers/automotive/es_CL/__init__.py +++ b/faker/providers/automotive/es_CL/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import re from collections import OrderedDict diff --git a/faker/providers/automotive/es_ES/__init__.py b/faker/providers/automotive/es_ES/__init__.py index d78c976e60..3bb7969ccc 100644 --- a/faker/providers/automotive/es_ES/__init__.py +++ b/faker/providers/automotive/es_ES/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import re from typing import Optional diff --git a/faker/providers/date_time/__init__.py b/faker/providers/date_time/__init__.py index 752d437df4..bb1aff5e07 100644 --- a/faker/providers/date_time/__init__.py +++ b/faker/providers/date_time/__init__.py @@ -70,7 +70,7 @@ class ParseError(ValueError): ("minutes", "m"), ("seconds", "s"), ]: - timedelta_pattern += r"((?P<{}>(?:\+|-)\d+?){})?".format(name, sym) + timedelta_pattern += fr"((?P<{name}>(?:\+|-)\d+?){sym})?" class Provider(BaseProvider): diff --git a/faker/providers/file/__init__.py b/faker/providers/file/__init__.py index d5a76aacc5..80ca1d137f 100644 --- a/faker/providers/file/__init__.py +++ b/faker/providers/file/__init__.py @@ -337,7 +337,7 @@ def unix_device(self, prefix: Optional[str] = None) -> str: if prefix is None: prefix = self.random_element(self.unix_device_prefixes) suffix: str = self.random_element(string.ascii_lowercase) - path = "/dev/%s%s" % (prefix, suffix) + path = "/dev/{}{}".format(prefix, suffix) return path def unix_partition(self, prefix: Optional[str] = None) -> str: diff --git a/faker/providers/internet/el_GR/__init__.py b/faker/providers/internet/el_GR/__init__.py index 879da2c87b..a35ac34a0a 100644 --- a/faker/providers/internet/el_GR/__init__.py +++ b/faker/providers/internet/el_GR/__init__.py @@ -46,7 +46,7 @@ def replace_accented_character(match): return replace[search.find(matched)] return matched - return re.sub(r"[{}]+".format(search), replace_accented_character, value) + return re.sub(fr"[{search}]+", replace_accented_character, value) def latinize(value: str) -> str: @@ -71,7 +71,7 @@ def replace_greek_character(match): return "".join(value) return re.sub( - r"[{}]+".format(search), + fr"[{search}]+", replace_greek_character, re.sub( r"([ΘΧΨθχψ]+|ΟΥ|ΑΥ|ΕΥ|Ου|Αυ|Ευ|ου|αυ|ευ)", diff --git a/faker/providers/user_agent/__init__.py b/faker/providers/user_agent/__init__.py index f78acebf81..434b4f6be6 100644 --- a/faker/providers/user_agent/__init__.py +++ b/faker/providers/user_agent/__init__.py @@ -193,7 +193,7 @@ def chrome( saf, ), tmplt.format( - "Linux; {}".format(self.android_platform_token()), + f"Linux; {self.android_platform_token()}", saf, self.generator.random.randint(version_from, version_to), self.generator.random.randint(build_from, build_to), @@ -228,7 +228,7 @@ def firefox(self) -> str: tmplt_mac: str = "({0}; rv:1.9.{1}.20) {2}" tmplt_and: str = "({0}; Mobile; rv:{1}.0) Gecko/{1}.0 Firefox/{1}.0" tmplt_ios: str = "({0}) AppleWebKit/{1} (KHTML, like Gecko) FxiOS/{2}.{3}.0 Mobile/{4} Safari/{1}" - saf: str = "{}.{}".format(self.generator.random.randint(531, 536), self.generator.random.randint(0, 2)) + saf: str = f"{self.generator.random.randint(531, 536)}.{self.generator.random.randint(0, 2)}" bld: str = self.lexify(self.numerify("##?###"), string.ascii_uppercase) bld2: str = self.lexify(self.numerify("#?####"), string.ascii_lowercase) platforms: ElementsType[str] = ( diff --git a/faker/proxy.py b/faker/proxy.py index 2a8255ce65..eb4307e229 100644 --- a/faker/proxy.py +++ b/faker/proxy.py @@ -30,10 +30,10 @@ class Faker: def __init__( self, - locale: Optional[Union[str, Sequence[str], Dict[str, Union[int, float]]]] = None, - providers: Optional[List[str]] = None, - generator: Optional[Generator] = None, - includes: Optional[List[str]] = None, + locale: str | Sequence[str] | dict[str, int | float] | None = None, + providers: list[str] | None = None, + generator: Generator | None = None, + includes: list[str] | None = None, use_weighting: bool = True, **config: Any, ) -> None: @@ -92,7 +92,7 @@ def __init__( self._factories = list(self._factory_map.values()) def __dir__(self): - attributes = set(super(Faker, self).__dir__()) + attributes = set(super().__dir__()) for factory in self.factories: attributes |= {attr for attr in dir(factory) if not attr.startswith("_")} return sorted(attributes) @@ -153,11 +153,11 @@ def __setstate__(self, state: Any) -> None: self.__dict__.update(state) @property - def unique(self) -> "UniqueProxy": + def unique(self) -> UniqueProxy: return self._unique_proxy @property - def optional(self) -> "OptionalProxy": + def optional(self) -> OptionalProxy: return self._optional_proxy def _select_factory(self, method_name: str) -> Factory: @@ -188,7 +188,7 @@ def _select_factory_distribution(self, factories, weights): def _select_factory_choice(self, factories): return random.choice(factories) - def _map_provider_method(self, method_name: str) -> Tuple[List[Factory], Optional[List[float]]]: + def _map_provider_method(self, method_name: str) -> tuple[list[Factory], list[float] | None]: """ Creates a 2-tuple of factories and weights for the given provider method name @@ -222,7 +222,7 @@ def _map_provider_method(self, method_name: str) -> Tuple[List[Factory], Optiona return mapping @classmethod - def seed(cls, seed: Optional[SeedType] = None) -> None: + def seed(cls, seed: SeedType | None = None) -> None: """ Hashables the shared `random.Random` object across all factories @@ -230,7 +230,7 @@ def seed(cls, seed: Optional[SeedType] = None) -> None: """ Generator.seed(seed) - def seed_instance(self, seed: Optional[SeedType] = None) -> None: + def seed_instance(self, seed: SeedType | None = None) -> None: """ Creates and seeds a new `random.Random` object for each factory @@ -239,7 +239,7 @@ def seed_instance(self, seed: Optional[SeedType] = None) -> None: for factory in self._factories: factory.seed_instance(seed) - def seed_locale(self, locale: str, seed: Optional[SeedType] = None) -> None: + def seed_locale(self, locale: str, seed: SeedType | None = None) -> None: """ Creates and seeds a new `random.Random` object for the factory of the specified locale @@ -281,25 +281,25 @@ def random(self, value: Random) -> None: raise NotImplementedError(msg) @property - def locales(self) -> List[str]: + def locales(self) -> list[str]: return list(self._locales) @property - def weights(self) -> Optional[List[Union[int, float]]]: + def weights(self) -> list[int | float] | None: return self._weights @property - def factories(self) -> List[Generator | Faker]: + def factories(self) -> list[Generator | Faker]: return self._factories - def items(self) -> List[Tuple[str, Generator | Faker]]: + def items(self) -> list[tuple[str, Generator | Faker]]: return list(self._factory_map.items()) class UniqueProxy: def __init__(self, proxy: Faker): self._proxy = proxy - self._seen: Dict = {} + self._seen: dict = {} self._sentinel = object() def clear(self) -> None: @@ -372,9 +372,9 @@ def __getstate__(self): def __setstate__(self, state): self.__dict__.update(state) - def _wrap(self, name: str, function: Callable[..., RetType]) -> Callable[..., Optional[RetType]]: + def _wrap(self, name: str, function: Callable[..., RetType]) -> Callable[..., RetType | None]: @functools.wraps(function) - def wrapper(*args: Any, prob: float = 0.5, **kwargs: Any) -> Optional[RetType]: + def wrapper(*args: Any, prob: float = 0.5, **kwargs: Any) -> RetType | None: if not 0 < prob <= 1.0: raise ValueError("prob must be between 0 and 1") return function(*args, **kwargs) if self._proxy.boolean(chance_of_getting_true=int(prob * 100)) else None diff --git a/faker/sphinx/autodoc.py b/faker/sphinx/autodoc.py index 8e7154eef9..5bd7ceb93a 100644 --- a/faker/sphinx/autodoc.py +++ b/faker/sphinx/autodoc.py @@ -1,4 +1,3 @@ -# coding=utf-8 from faker.sphinx.docstring import ProviderMethodDocstring from faker.sphinx.documentor import write_provider_docs diff --git a/faker/sphinx/docstring.py b/faker/sphinx/docstring.py index 813dbf42e3..350771e9ae 100644 --- a/faker/sphinx/docstring.py +++ b/faker/sphinx/docstring.py @@ -1,4 +1,3 @@ -# coding=utf-8 import inspect import logging import re diff --git a/faker/sphinx/documentor.py b/faker/sphinx/documentor.py index ad6d7ab4e0..410848f688 100644 --- a/faker/sphinx/documentor.py +++ b/faker/sphinx/documentor.py @@ -1,4 +1,3 @@ -# coding=utf-8 import importlib import inspect import os @@ -145,7 +144,7 @@ def _write_localized_provider_docs(): (DOCS_ROOT / "locales").mkdir(parents=True, exist_ok=True) for locale in AVAILABLE_LOCALES: info = _get_localized_provider_info(locale) - with (DOCS_ROOT / "locales" / "{}.rst".format(locale)).open("wb") as fh: + with (DOCS_ROOT / "locales" / f"{locale}.rst").open("wb") as fh: _hide_edit_on_github(fh) _write_title(fh, f"Locale {locale}") _write_includes(fh) diff --git a/faker/sphinx/validator.py b/faker/sphinx/validator.py index 05acf89e48..ce0d80bca0 100644 --- a/faker/sphinx/validator.py +++ b/faker/sphinx/validator.py @@ -1,4 +1,3 @@ -# coding=utf-8 import ast import traceback diff --git a/faker/typing.py b/faker/typing.py index 82c3e76585..0e157e7200 100644 --- a/faker/typing.py +++ b/faker/typing.py @@ -7,14 +7,15 @@ try: from typing import List, Literal, TypeVar # type: ignore except ImportError: - from typing_extensions import List, Literal, TypeVar # type: ignore + from typing_extensions import Literal, TypeVar # type: ignore + from typing import List if sys.version_info >= (3, 9): from collections import OrderedDict as OrderedDictType elif sys.version_info >= (3, 7, 2): from typing import OrderedDict as OrderedDictType else: - from typing_extensions import OrderedDict as OrderedDictType # NOQA + from typing import OrderedDict as OrderedDictType # NOQA class CreditCard: diff --git a/tests/providers/test_enum.py b/tests/providers/test_enum.py index 24755c3cdf..750093b724 100644 --- a/tests/providers/test_enum.py +++ b/tests/providers/test_enum.py @@ -45,6 +45,6 @@ def test_none_raises(self, faker): faker.enum(None) def test_incorrect_type_raises(self, faker): - not_an_enum_type = type("NotAnEnumType") + not_an_enum_type = str with pytest.raises(TypeError): faker.enum(not_an_enum_type) diff --git a/tests/sphinx/test_docstring.py b/tests/sphinx/test_docstring.py index f6053b753b..9c5ddf5d78 100644 --- a/tests/sphinx/test_docstring.py +++ b/tests/sphinx/test_docstring.py @@ -1,4 +1,3 @@ -# coding=utf-8 import inspect from unittest import mock diff --git a/tests/sphinx/test_validator.py b/tests/sphinx/test_validator.py index bb8b02ce34..eadacef7ca 100644 --- a/tests/sphinx/test_validator.py +++ b/tests/sphinx/test_validator.py @@ -1,4 +1,3 @@ -# coding=utf-8 import sys from unittest import mock