benedict.serializers.get_serializer_by_format()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
import re
2
3
from benedict.serializers.abstract import AbstractSerializer
4
from benedict.serializers.base64 import Base64Serializer
5
from benedict.serializers.csv import CSVSerializer
6
from benedict.serializers.ini import INISerializer
7
from benedict.serializers.json import JSONSerializer
8
from benedict.serializers.pickle import PickleSerializer
9
from benedict.serializers.plist import PListSerializer
10
from benedict.serializers.query_string import QueryStringSerializer
11
from benedict.serializers.toml import TOMLSerializer
12
from benedict.serializers.xls import XLSSerializer
13
from benedict.serializers.xml import XMLSerializer
14
from benedict.serializers.yaml import YAMLSerializer
15
16
__all__ = [
17
    "AbstractSerializer",
18
    "Base64Serializer",
19
    "CSVSerializer",
20
    "INISerializer",
21
    "JSONSerializer",
22
    "PickleSerializer",
23
    "PListSerializer",
24
    "QueryStringSerializer",
25
    "TOMLSerializer",
26
    "XLSSerializer",
27
    "XMLSerializer",
28
    "YAMLSerializer",
29
]
30
31
_BASE64_SERIALIZER = Base64Serializer()
32
_CSV_SERIALIZER = CSVSerializer()
33
_INI_SERIALIZER = INISerializer()
34
_JSON_SERIALIZER = JSONSerializer()
35
_PICKLE_SERIALIZER = PickleSerializer()
36
_PLIST_SERIALIZER = PListSerializer()
37
_QUERY_STRING_SERIALIZER = QueryStringSerializer()
38
_TOML_SERIALIZER = TOMLSerializer()
39
_XLS_SERIALIZER = XLSSerializer()
40
_XML_SERIALIZER = XMLSerializer()
41
_YAML_SERIALIZER = YAMLSerializer()
42
43
_SERIALIZERS_LIST = [
44
    _BASE64_SERIALIZER,
45
    _CSV_SERIALIZER,
46
    _INI_SERIALIZER,
47
    _JSON_SERIALIZER,
48
    _PICKLE_SERIALIZER,
49
    _PLIST_SERIALIZER,
50
    _QUERY_STRING_SERIALIZER,
51
    _TOML_SERIALIZER,
52
    _YAML_SERIALIZER,
53
    _XLS_SERIALIZER,
54
    _XML_SERIALIZER,
55
]
56
57
_SERIALIZERS_BY_EXTENSION = {}
58
for serializer in _SERIALIZERS_LIST:
59
    for extension in serializer.extensions():
60
        _SERIALIZERS_BY_EXTENSION[extension] = serializer
61
62
_SERIALIZERS_EXTENSIONS = [
63
    f".{extension}" for extension in _SERIALIZERS_BY_EXTENSION.keys()
64
]
65
66
67
def get_format_by_path(path):
68
    path = str(path)
69
    path = path.lower()
70
    for extension in _SERIALIZERS_EXTENSIONS:
71
        if path.endswith(extension):
72
            return extension[1:]
73
    return None
74
75
76
def get_serializer_by_format(format):
77
    format_key = (format or "").lower().strip()
78
    format_key = re.sub(r"[\s\-\_]*", "", format_key)
79
    serializer = _SERIALIZERS_BY_EXTENSION.get(format_key, None)
80
    return serializer
81