Completed
Push — master ( c396a1...0e306d )
by Fabio
03:31
created

JSONSerializer._encode_default()   A

Complexity

Conditions 4

Size

Total Lines 8
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 4
nop 2
1
# -*- coding: utf-8 -*-
2
3
from __future__ import absolute_import
4
5
from benedict.serializers.abstract import AbstractSerializer
6
from benedict.utils import type_util
7
8
from six import text_type
9
10
import json
11
12
13
class JSONSerializer(AbstractSerializer):
14
15
    def __init__(self):
16
        super(JSONSerializer, self).__init__()
17
18
    def decode(self, s, **kwargs):
19
        data = json.loads(s, **kwargs)
20
        return data
21
22
    def encode(self, d, **kwargs):
23
        kwargs.setdefault('default', self._encode_default)
24
        data = json.dumps(d, **kwargs)
25
        return data
26
27
    def _encode_default(self, obj):
28
        if type_util.is_set(obj):
29
            return list(obj)
30
        elif type_util.is_datetime(obj):
31
            return obj.isoformat()
32
        elif type_util.is_decimal(obj):
33
            return text_type(obj)
34
        return text_type(obj)
35