Passed
Push — master ( a1e5b9...5ac299 )
by Fabio
01:25
created

benedict.serializers.get_serializers_extensions()   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 0
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
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
import re
17
18
19
__all__ = [
20
    "AbstractSerializer",
21
    "Base64Serializer",
22
    "CSVSerializer",
23
    "INISerializer",
24
    "JSONSerializer",
25
    "PickleSerializer",
26
    "PListSerializer",
27
    "QueryStringSerializer",
28
    "TOMLSerializer",
29
    "XLSSerializer",
30
    "XMLSerializer",
31
    "YAMLSerializer",
32
]
33
34
_BASE64_SERIALIZER = Base64Serializer()
35
_CSV_SERIALIZER = CSVSerializer()
36
_INI_SERIALIZER = INISerializer()
37
_JSON_SERIALIZER = JSONSerializer()
38
_PICKLE_SERIALIZER = PickleSerializer()
39
_PLIST_SERIALIZER = PListSerializer()
40
_QUERY_STRING_SERIALIZER = QueryStringSerializer()
41
_TOML_SERIALIZER = TOMLSerializer()
42
_XLS_SERIALIZER = XLSSerializer()
43
_XML_SERIALIZER = XMLSerializer()
44
_YAML_SERIALIZER = YAMLSerializer()
45
46
_SERIALIZERS_LIST = [
47
    _BASE64_SERIALIZER,
48
    _CSV_SERIALIZER,
49
    _INI_SERIALIZER,
50
    _JSON_SERIALIZER,
51
    _PICKLE_SERIALIZER,
52
    _PLIST_SERIALIZER,
53
    _QUERY_STRING_SERIALIZER,
54
    _TOML_SERIALIZER,
55
    _YAML_SERIALIZER,
56
    _XLS_SERIALIZER,
57
    _XML_SERIALIZER,
58
]
59
60
_SERIALIZERS_BY_EXTENSION = {}
61
for serializer in _SERIALIZERS_LIST:
62
    for extension in serializer.extensions():
63
        _SERIALIZERS_BY_EXTENSION[extension] = serializer
64
65
_SERIALIZERS_EXTENSIONS = [
66
    f".{extension}" for extension in _SERIALIZERS_BY_EXTENSION.keys()
67
]
68
69
70
def get_format_by_path(path):
71
    path = path.lower()
72
    for extension in _SERIALIZERS_EXTENSIONS:
73
        if path.endswith(extension):
74
            return extension[1:]
75
    return None
76
77
78
def get_serializer_by_format(format):
79
    format_key = (format or "").lower().strip()
80
    format_key = re.sub(r"[\s\-\_]*", "", format_key)
81
    serializer = _SERIALIZERS_BY_EXTENSION.get(format_key, None)
82
    return serializer
83