Completed
Push — master ( db4c81...c9ecbe )
by Ramon
25s queued 11s
created

jsons.deserializers.default_defaultdict   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 20
dl 0
loc 33
rs 10
c 0
b 0
f 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A default_defaultdict_deserializer() 0 24 2
1
from collections import defaultdict
2
from typing import Optional, Callable, Dict
3
4
from typish import get_args
5
6
from jsons._load_impl import load
7
8
9
def default_defaultdict_deserializer(
10
        obj: dict,
11
        cls: type,
12
        *,
13
        key_transformer: Optional[Callable[[str], str]] = None,
14
        **kwargs) -> dict:
15
    """
16
    Deserialize a defaultdict.
17
    :param obj: the dict that needs deserializing.
18
    :param key_transformer: a function that transforms the keys to a different
19
    style (e.g. PascalCase).
20
    :param cls: not used.
21
    :param kwargs: any keyword arguments.
22
    :return: a deserialized defaultdict instance.
23
    """
24
    args = get_args(cls)
25
    default_factory = None
26
    cls_ = Dict
27
    if args:
28
        key, value = get_args(cls)
29
        cls_ = Dict[key, value]
30
        default_factory = value
31
    loaded = load(obj, cls_, key_transformer=key_transformer, **kwargs)
32
    return defaultdict(default_factory, loaded)
33