From a23eb1b8df7499595ea6f49b86b11ecbe39c08fa Mon Sep 17 00:00:00 2001 From: Matt Hughes Date: Wed, 12 Oct 2022 14:20:32 +0100 Subject: [PATCH 1/3] Fix ImportError on python <3.7.2 788350230154b6e2c151850f9e9c0b7f1abccbca added an import of `typing.OrderedDict` but this was added in Python 3.7.2[1] resulting in an import failure for python versions before this. [1] https://docs.python.org/3/library/typing.html#typing.OrderedDict --- faker/providers/__init__.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/faker/providers/__init__.py b/faker/providers/__init__.py index 1c6f87d921..0f1377cd76 100644 --- a/faker/providers/__init__.py +++ b/faker/providers/__init__.py @@ -1,7 +1,12 @@ import re import string -from typing import Any, Collection, List, Optional, OrderedDict, Sequence, TypeVar, Union +from typing import Any, Collection, List, Optional, Sequence, TypeVar, Union + +try: + from typing import OrderedDict +except ImportError: + from typing_extensions import OrderedDict from ..generator import Generator from ..utils.distribution import choices_distribution, choices_distribution_unique From 903a2e9e290dfb61292339c65aa82b84b73ee544 Mon Sep 17 00:00:00 2001 From: Matt Hughes Date: Thu, 13 Oct 2022 08:38:51 +0100 Subject: [PATCH 2/3] squash! Fix ImportError on python <3.7.2 Move handling of `OrderedDict` import from its various locations to `faker.typing`. Since Python 3.9 `collections.OrderedDict` supports --- faker/providers/__init__.py | 9 +++------ faker/typing.py | 9 +++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/faker/providers/__init__.py b/faker/providers/__init__.py index 0f1377cd76..ab363e3698 100644 --- a/faker/providers/__init__.py +++ b/faker/providers/__init__.py @@ -1,14 +1,11 @@ import re import string +from collections import OrderedDict from typing import Any, Collection, List, Optional, Sequence, TypeVar, Union -try: - from typing import OrderedDict -except ImportError: - from typing_extensions import OrderedDict - from ..generator import Generator +from ..typing import OrderedDictType from ..utils.distribution import choices_distribution, choices_distribution_unique _re_hash = re.compile(r"#") @@ -20,7 +17,7 @@ S = TypeVar("S") T = TypeVar("T") -ElementsType = Union[Collection[T], OrderedDict[T, float]] +ElementsType = Union[Collection[T], OrderedDictType[T, float]] class BaseProvider: diff --git a/faker/typing.py b/faker/typing.py index d18e6dfa3f..2d28b541fd 100644 --- a/faker/typing.py +++ b/faker/typing.py @@ -1,3 +1,5 @@ +import sys + from datetime import date, datetime, timedelta from typing import Sequence, TypeVar, Union @@ -6,6 +8,13 @@ except ImportError: from typing_extensions import Literal # type: ignore +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 + DateParseType = Union[date, datetime, timedelta, str, int] HueType = TypeVar("HueType", str, float, Sequence[int]) SexLiteral = Literal["M", "F"] From 59a93be3fcccd1358e14947d5ce607d49d50dcd7 Mon Sep 17 00:00:00 2001 From: Flavio Curella <89607+fcurella@users.noreply.github.com> Date: Thu, 13 Oct 2022 10:35:32 -0500 Subject: [PATCH 3/3] fix linting --- faker/typing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/faker/typing.py b/faker/typing.py index 2d28b541fd..f412740368 100644 --- a/faker/typing.py +++ b/faker/typing.py @@ -13,7 +13,7 @@ elif sys.version_info >= (3, 7, 2): from typing import OrderedDict as OrderedDictType else: - from typing_extensions import OrderedDict as OrderedDictType + from typing_extensions import OrderedDict as OrderedDictType # NOQA DateParseType = Union[date, datetime, timedelta, str, int] HueType = TypeVar("HueType", str, float, Sequence[int])