34 pass |
34 pass |
35 |
35 |
36 _serializers = {} |
36 _serializers = {} |
37 |
37 |
38 def register_serializer(format, serializer_module, serializers=None): |
38 def register_serializer(format, serializer_module, serializers=None): |
39 """"Register a new serializer. |
39 """"Register a new serializer. |
40 |
40 |
41 ``serializer_module`` should be the fully qualified module name |
41 ``serializer_module`` should be the fully qualified module name |
42 for the serializer. |
42 for the serializer. |
43 |
43 |
44 If ``serializers`` is provided, the registration will be added |
44 If ``serializers`` is provided, the registration will be added |
45 to the provided dictionary. |
45 to the provided dictionary. |
46 |
46 |
47 If ``serializers`` is not provided, the registration will be made |
47 If ``serializers`` is not provided, the registration will be made |
48 directly into the global register of serializers. Adding serializers |
48 directly into the global register of serializers. Adding serializers |
49 directly is not a thread-safe operation. |
49 directly is not a thread-safe operation. |
50 """ |
50 """ |
51 module = importlib.import_module(serializer_module) |
51 module = importlib.import_module(serializer_module) |
52 if serializers is None: |
52 if serializers is None: |
53 _serializers[format] = module |
53 _serializers[format] = module |
54 else: |
54 else: |
55 serializers[format] = module |
55 serializers[format] = module |
56 |
56 |
57 def unregister_serializer(format): |
57 def unregister_serializer(format): |
58 "Unregister a given serializer. This is not a thread-safe operation." |
58 "Unregister a given serializer. This is not a thread-safe operation." |
59 del _serializers[format] |
59 del _serializers[format] |
60 |
60 |
61 def get_serializer(format): |
61 def get_serializer(format): |
85 """ |
85 """ |
86 s = get_serializer(format)() |
86 s = get_serializer(format)() |
87 s.serialize(queryset, **options) |
87 s.serialize(queryset, **options) |
88 return s.getvalue() |
88 return s.getvalue() |
89 |
89 |
90 def deserialize(format, stream_or_string): |
90 def deserialize(format, stream_or_string, **options): |
91 """ |
91 """ |
92 Deserialize a stream or a string. Returns an iterator that yields ``(obj, |
92 Deserialize a stream or a string. Returns an iterator that yields ``(obj, |
93 m2m_relation_dict)``, where ``obj`` is a instantiated -- but *unsaved* -- |
93 m2m_relation_dict)``, where ``obj`` is a instantiated -- but *unsaved* -- |
94 object, and ``m2m_relation_dict`` is a dictionary of ``{m2m_field_name : |
94 object, and ``m2m_relation_dict`` is a dictionary of ``{m2m_field_name : |
95 list_of_related_objects}``. |
95 list_of_related_objects}``. |
96 """ |
96 """ |
97 d = get_deserializer(format) |
97 d = get_deserializer(format) |
98 return d(stream_or_string) |
98 return d(stream_or_string, **options) |
99 |
99 |
100 def _load_serializers(): |
100 def _load_serializers(): |
101 """ |
101 """ |
102 Register built-in and settings-defined serializers. This is done lazily so |
102 Register built-in and settings-defined serializers. This is done lazily so |
103 that user code has a chance to (e.g.) set up custom settings without |
103 that user code has a chance to (e.g.) set up custom settings without |