summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/polyfactory/constants.py
blob: c0e6d50a7880e56ea85d60e79de154bf5c5d9191 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from __future__ import annotations

import sys
from collections import abc, defaultdict, deque
from random import Random
from typing import (
    DefaultDict,
    Deque,
    Dict,
    FrozenSet,
    Iterable,
    List,
    Mapping,
    Sequence,
    Set,
    Tuple,
    Union,
)

try:
    from types import UnionType
except ImportError:
    UnionType = Union  # type: ignore[misc,assignment]

PY_38 = sys.version_info.major == 3 and sys.version_info.minor == 8  # noqa: PLR2004

# Mapping of type annotations into concrete types. This is used to normalize python <= 3.9 annotations.
INSTANTIABLE_TYPE_MAPPING = {
    DefaultDict: defaultdict,
    Deque: deque,
    Dict: dict,
    FrozenSet: frozenset,
    Iterable: list,
    List: list,
    Mapping: dict,
    Sequence: list,
    Set: set,
    Tuple: tuple,
    abc.Iterable: list,
    abc.Mapping: dict,
    abc.Sequence: list,
    abc.Set: set,
    UnionType: Union,
}


if not PY_38:
    TYPE_MAPPING = INSTANTIABLE_TYPE_MAPPING
else:
    # For 3.8, we have to keep the types from typing since dict[str] syntax is not supported in 3.8.
    TYPE_MAPPING = {
        DefaultDict: DefaultDict,
        Deque: Deque,
        Dict: Dict,
        FrozenSet: FrozenSet,
        Iterable: List,
        List: List,
        Mapping: Dict,
        Sequence: List,
        Set: Set,
        Tuple: Tuple,
        abc.Iterable: List,
        abc.Mapping: Dict,
        abc.Sequence: List,
        abc.Set: Set,
    }


DEFAULT_RANDOM = Random()
RANDOMIZE_COLLECTION_LENGTH = False
MIN_COLLECTION_LENGTH = 0
MAX_COLLECTION_LENGTH = 5