Esempio n. 1
0
    def dict2xml(self, data):
        stream = StringIO()

        xml = SimplerXMLGenerator(stream, "utf-8")
        xml.startDocument()
        xml.startElement("root", {})

        self._to_xml(xml, data)

        xml.endElement("root")
        xml.endDocument()
        return stream.getvalue()
Esempio n. 2
0
    def test_parse(self):
        """ Make sure the `QueryDict` works OK """
        parser = FormParser()

        stream = StringIO(self.string)
        data = parser.parse(stream)

        self.assertEqual(Form(data).is_valid(), True)
Esempio n. 3
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        In case a request is called on /api/v1/, we now redirect the call to DRF instead of
        Tastypie. The differences between DRF and Tastypie are:

        - Different names and values for several fields (see _rename_fields).

        On paginated results:
          - An additional 'meta' object containing the limit, next, previous and total_count;
          - Next and previous links do not show the domain;
          - The root tag name is 'response';
          - The tag name of the results is 'objects';
          - The tag name for each result is 'object'.

        On non-paginated results:
          - The tag name of the result is 'object'.
        """
        request = renderer_context.get('request')

        if '/api/v1/' in request.path:
            if data is None:
                return ''

            stream = StringIO()
            xml = SimplerXMLGenerator(stream, self.charset)
            xml.startDocument()

            if all(k in data.keys() for k in ['count', 'next', 'previous', 'offset', 'results']):
                # Paginated result
                xml.startElement("response", {})
                data = _convert_data_for_tastypie(request, renderer_context['view'], data)
                self._to_xml(xml, data)
                xml.endElement("response")
            else:
                # Non-paginated result
                xml.startElement("object", {})
                self._to_xml(xml, _rename_fields([data])[0])
                xml.endElement("object")

            xml.endDocument()
            return stream.getvalue()
        elif isinstance(data, dict) and 'offset' in data.keys():
            data.pop('offset')

        return XMLRenderer().render(data, accepted_media_type, renderer_context)
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders *obj* into serialized XML.
        """
        if data is None:
            return ''

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, "utf-8")
        xml.startDocument()
        xml.startElement("root", {})

        self._to_xml(xml, data)

        xml.endElement("root")
        xml.endDocument()
        return stream.getvalue()
Esempio n. 5
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        if data is None:
            return ''

        stream = StringIO()
        xml = SimplerXMLGenerator(stream, "utf-8")
        xml.startDocument()

        self._to_xml(xml, data)

        xml.endDocument()
        response = stream.getvalue()

        if self.strip_declaration:
            declaration = '<?xml version="1.0" encoding="utf-8"?>'
            if response.startswith(declaration):
                response = response[len(declaration):]
        return response.strip()
Esempio n. 6
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders *obj* into serialized XML.
        """
        if data is None:
            return ''

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, "utf-8")
        xml.startDocument()
        xml.startElement("root", {})

        self._to_xml(xml, data)

        xml.endElement("root")
        xml.endDocument()
        return stream.getvalue()
Esempio n. 7
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders `data` into serialized XML.
        """
        if data is None:
            return ''

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, self.charset)
        xml.startDocument()
        xml.startElement("list", {
            'last_update': str(date.today()),
            'listing': '834'
        })
        self._to_xml(xml, data)
        xml.endElement("list")
        xml.endDocument()
        return stream.getvalue()
Esempio n. 8
0
    def test_render_and_parse_complex_data(self):
        """
        Test XML rendering.
        """
        renderer = XMLRenderer()
        content = StringIO(renderer.render(self._complex_data, 'application/xml'))

        parser = XMLParser()
        complex_data_out = parser.parse(content)
        error_msg = "complex data differs!IN:\n %s \n\n OUT:\n %s" % (repr(self._complex_data), repr(complex_data_out))
        self.assertEqual(self._complex_data, complex_data_out, error_msg)
Esempio n. 9
0
 def setUp(self):
     self._input = StringIO(
         '<?xml version="1.0" encoding="utf-8"?>'
         '<root>'
         '<field_a>121.0</field_a>'
         '<field_b>dasd</field_b>'
         '<field_c></field_c>'
         '<field_d>2011-12-25 12:45:00</field_d>'
         '</root>'
     )
     self._data = {
         'field_a': 121,
         'field_b': 'dasd',
         'field_c': None,
         'field_d': datetime.datetime(2011, 12, 25, 12, 45, 00)
     }
     self._complex_data_input = StringIO(
         '<?xml version="1.0" encoding="utf-8"?>'
         '<root>'
         '<creation_date>2011-12-25 12:45:00</creation_date>'
         '<sub_data_list>'
         '<list-item><sub_id>1</sub_id><sub_name>first</sub_name></list-item>'
         '<list-item><sub_id>2</sub_id><sub_name>second</sub_name></list-item>'
         '</sub_data_list>'
         '<name>name</name>'
         '</root>'
     )
     self._complex_data = {
         "creation_date": datetime.datetime(2011, 12, 25, 12, 45, 00),
         "name": "name",
         "sub_data_list": [
             {
                 "sub_id": 1,
                 "sub_name": "first"
             },
             {
                 "sub_id": 2,
                 "sub_name": "second"
             }
         ]
     }
Esempio n. 10
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders *obj* into serialized XML.
        """
        if data is None:
            return ''
        elif isinstance(data, six.string_types):
            return data

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, self.charset)
        xml.startDocument()
        xml.startElement(self.root_node, {'xmlns': self.xmlns})

        self._to_xml(xml, data)

        xml.endElement(self.root_node)
        xml.endDocument()

        return stream.getvalue()
Esempio n. 11
0
    def dict2xml(self, data):
        stream = StringIO.StringIO()

        xml = SimplerXMLGenerator(stream, "utf-8")
        xml.startDocument()
        xml.startElement("root", {})

        self._to_xml(xml, data)

        xml.endElement("root")
        xml.endDocument()
        return stream.getvalue()
Esempio n. 12
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders *obj* into serialized XML.
        """
        if data is None:
            return ''
        elif isinstance(data, six.string_types):
            return data

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, self.charset)
        xml.startDocument()
        xml.startElement(self.root_node, {'xmlns': self.xmlns})

        self._to_xml(xml, data)

        xml.endElement(self.root_node)
        xml.endDocument()

        return stream.getvalue()
Esempio n. 13
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders *obj* into serialized XML.
        """
        if data is None:
            return ''

        stream = StringIO()

        root_name = renderer_context.get('root_name', 'root')
        root_attributes = renderer_context.get('root_attributes', {})

        xml = SimplerXMLGenerator(stream, self.charset)
        xml.startDocument()
        xml.startElement(root_name, root_attributes)

        self._to_xml(xml, data)

        xml.endElement(root_name)
        xml.endDocument()
        return stream.getvalue()
        def test_render_and_parse(self):
            """
            Test rendering and then parsing returns the original object.
            IE obj -> render -> parse -> obj.
            """
            obj = {'foo': ['bar', 'baz']}

            renderer = YAMLRenderer()
            parser = YAMLParser()

            content = renderer.render(obj, 'application/yaml')
            data = parser.parse(StringIO(content))
            self.assertEqual(obj, data)