Total Complexity | 5 |
Total Lines | 30 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | # -*- coding: utf-8 -*- |
||
2 | |||
3 | from __future__ import absolute_import |
||
4 | |||
5 | from benedict.serializers.abstract import AbstractSerializer |
||
6 | |||
7 | import plistlib |
||
8 | import six |
||
9 | |||
10 | |||
11 | class PListSerializer(AbstractSerializer): |
||
12 | """ |
||
13 | https://docs.python.org/3/library/plistlib.html |
||
14 | """ |
||
15 | def __init__(self): |
||
16 | super(PListSerializer, self).__init__() |
||
17 | |||
18 | def decode(self, s, **kwargs): |
||
19 | if six.PY2: |
||
20 | return plistlib.readPlistFromString(s) |
||
21 | kwargs.setdefault('fmt', plistlib.FMT_XML) |
||
22 | encoding = kwargs.pop('encoding', 'utf-8') |
||
23 | return plistlib.loads(s.encode(encoding), **kwargs) |
||
24 | |||
25 | def encode(self, d, **kwargs): |
||
26 | if six.PY2: |
||
27 | return plistlib.writePlistToString(d) |
||
28 | encoding = kwargs.pop('encoding', 'utf-8') |
||
29 | return plistlib.dumps(d, **kwargs).decode(encoding) |
||
30 |