示例#1
0
 def start_serialization(self):
     """
     Start serialization -- open the XML document and the root element.
     """
     self.xml = SimplerXMLGenerator(
         self.stream, self.options.get("encoding",
                                       settings.DEFAULT_CHARSET))
     self.xml.startDocument()
     self.xml.startElement(
         "xliff", {
             "version": "1.2",
             "xmlns": "urn:oasis:names:tc:xliff:document:1.2",
             "xmlns:d": "https://docs.djangoproject.com/"
         })
示例#2
0
def sitemap_generator(request, maps, page, current_site):
    output = StringIO()
    protocol = request.is_secure() and 'https' or 'http'
    xml = SimplerXMLGenerator(output, settings.DEFAULT_CHARSET)
    xml.startDocument()
    xml.startElement('urlset', {'xmlns':'http://www.sitemaps.org/schemas/sitemap/0.9'})
    yield output.getvalue()
    pos = output.tell()
    for site in maps:
        if callable(site):
            if issubclass(site, RequestSitemap):
                site = site(request=request)
            else:
                site = site()
        elif hasattr(site, 'request'):
            site.request = request

        try:
            urls = site.get_urls(page=page, site=current_site, protocol=protocol)
        except InvalidPage:
            raise Http404('Page not found')

        for url in urls:
            xml.startElement('url', {})
            xml.addQuickElement('loc', url['location'])
            try:
                if url['lastmod']:
                    xml.addQuickElement('lastmod', url['lastmod'].strftime('%Y-%m-%d'))
            except (KeyError, AttributeError):
                pass
            try:
                if url['changefreq']:
                    xml.addQuickElement('changefreq', url['changefreq'])
            except KeyError:
                pass
            try:
                if url['priority']:
                    xml.addQuickElement('priority', url['priority'])
            except KeyError:
                pass
            xml.endElement('url')
            output.seek(pos)
            yield output.read()
            pos = output.tell()
    xml.endElement('urlset')
    xml.endDocument()
    output.seek(pos)
    last = output.read()
    output.close()
    yield last
示例#3
0
    def render(self, request):

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

        self._to_xml(xml, self.construct())
        
        xml.endElement("response")
        xml.endDocument()

        return stream.getvalue()
示例#4
0
文件: export.py 项目: thesky341/psy
    def get_xml_export(self, context):
        results = self._get_objects(context)
        stream = io.StringIO()

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

        self._to_xml(xml, results)

        xml.endElement("objects")
        xml.endDocument()

        return stream.getvalue().split('\n')[1]
示例#5
0
    def _format_data(self, data, charset):
        """ Format data into XML. """

        if data is None or data == '':
            return u''

        stream = StringIO.StringIO()
        xml = SimplerXMLGenerator(stream, charset)
        xml.startDocument()
        xml.startElement(self._root_element_name(), {})
        self._to_xml(xml, data)
        xml.endElement(self._root_element_name())
        xml.endDocument()
        return stream.getvalue()
示例#6
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)
示例#7
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        if data is None:
            return ""

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, self.charset)
        xml.startDocument()
        xml.startElement(self.root_tag_name, attributes)

        self._to_xml(xml, data)

        xml.endElement(self.root_tag_name)
        xml.endDocument()
        return stream.getvalue()
示例#8
0
    def get_xml_export(self, context):
        results = self._get_objects(context)

        stream = six.BytesIO()

        xml = SimplerXMLGenerator(stream, self.export_unicode_encoding)
        xml.startDocument()
        xml.startElement("objects", {})

        self._to_xml(xml, results)

        xml.endElement("objects")
        xml.endDocument()

        return stream.getvalue().split((b'\n'))[1]
示例#9
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(self.root_tag_name, {})

        self._to_xml(xml, data)

        xml.endElement(self.root_tag_name)
        xml.endDocument()

        #raise AssertionError(type(stream.getvalue()));
        generic_xml = stream.getvalue()

        if data.get('count') != None and data.get('list') != None:
            # deal with multiple tools
            xmlfile = 'multiple.xslt'
        else:
            # deal with a single tool
            xmlfile = 'framework_XML_to_biotoolsSchema_3.3.0_XML_xslt1.0.xslt'

        try:
            xslt1 = lxmletree.parse(
                '/elixir/application/backend/elixir/biotoolsSchema/' + xmlfile)
            transform1 = lxmletree.XSLT(xslt1)
            dom = lxmletree.fromstring(generic_xml)
            newdom = transform1(dom)

            # removing empty elements
            xslt2 = lxmletree.parse(
                "/elixir/application/backend/elixir/biotoolsSchema/removeEmptyElements.xslt"
            )
            transform2 = lxmletree.XSLT(xslt2)
            newdom2 = transform2(newdom)

        except (lxmletree.XMLSyntaxError, Exception) as e:
            raise ParseError(
                'XML error - %s. Please notify [email protected] if you see this error. '
                % e)

        return lxmletree.tostring(newdom2)
示例#10
0
    def _encode(self, data, **kwargs):
        if data is not None:
            stream = StringIO()

            xml = SimplerXMLGenerator(stream, 'utf-8')
            xml.startDocument()
            xml.startElement('response', {})

            self._to_xml(xml, data)

            xml.endElement('response')
            xml.endDocument()

            return stream.getvalue()
        else:
            return ''
示例#11
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        if data is None:
            return ''

        stream = StringIO()

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

        if isinstance(data, (list, tuple)):
            self._render_list(data, xml, renderer_context)
        elif isinstance(data, dict):
            self._render_dict(data, xml, renderer_context)

        xml.endDocument()
        return stream.getvalue()
示例#12
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()

        self._to_xml(xml, data)

        xml.endDocument()
        return stream.getvalue()
 def write(self, outfile, encoding):
     handler = SimplerXMLGenerator(outfile, encoding)
     handler.startDocument()
     handler.startElement(u"rss", {u"version": self._version})
     handler.startElement(u"channel", {})
     handler.addQuickElement(u"title", self.feed['title'])
     handler.addQuickElement(u"link", self.feed['link'])
     handler.addQuickElement(u"description", self.feed['description'])
     if self.feed['language'] is not None:
         handler.addQuickElement(u"language", self.feed['language'])
     for cat in self.feed['categories']:
         handler.addQuickElement(u"category", cat)
     if self.feed['feed_copyright'] is not None:
         handler.addQuickElement(u"copyright", self.feed['feed_copyright'])
     self.write_items(handler)
     self.endChannelElement(handler)
     handler.endElement(u"rss")
示例#14
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()
示例#15
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()
示例#16
0
 def write(self, outfile, encoding):
     handler = SimplerXMLGenerator(outfile, encoding)
     handler.startDocument()
     handler.startElement(u"rss", {u"version": self._version, u"xmlns:wfw": u"http://wellformedweb.org/CommentAPI/"})
     handler.startElement(u"channel", {})
     handler.addQuickElement(u"title", self.feed['title'])
     handler.addQuickElement(u"link", self.feed['link'])
     handler.addQuickElement(u"description", self.feed['description'])
     if self.feed['language'] is not None:
         handler.addQuickElement(u"language", self.feed['language'])
     for cat in self.feed['categories']:
         handler.addQuickElement(u"category", cat)
     if self.feed['feed_copyright'] is not None:
         handler.addQuickElement(u"copyright", self.feed['feed_copyright'])
     handler.addQuickElement(u"lastBuildDate", rfc2822_date(self.latest_post_date()).decode('ascii'))
     self.write_items(handler)
     self.endChannelElement(handler)
     handler.endElement(u"rss")
示例#17
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)
        if self.with_xml_declaration:
            xml.startDocument()

        xml.startElement(self.root_tag_name, {})
        self._to_xml(xml, data)
        xml.endElement(self.root_tag_name)
        xml.endDocument()
        return stream.getvalue()
示例#18
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()
示例#19
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()
示例#20
0
 def __init__(self, error_message=None, content='', mimetype=None,
                 status=None, content_type='text/xml; charset=utf-8'):
     super(TrackBackResponse, self).__init__(content=content,
                                             mimetype=mimetype,
                                             status=status,
                                             content_type=content_type)
     response_content = StringIO()
     generator = SimplerXMLGenerator(response_content, 'utf-8')
     generator.startDocument()
     generator.startElement('response', {})
     if error_message:
         generator.addQuickElement('error', '1')
         generator.addQuickElement('message', error_message)
     else:
         generator.addQuickElement('error', '0')
     generator.endElement('response')
     self.content = response_content.getvalue()
     response_content.close()
     self['Content-Length'] = str(len(self.content))
示例#21
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders `data` into serialized XML.
        """
        if data is None:
            return ''

        endpoint: Endpoint = renderer_context['view'].endpoint

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, self.charset, short_empty_elements=True)
        xml.startDocument()

        if self.is_error_response(data):
            self.render_error_response(xml, data)
        else:
            self.render_response(xml, data, endpoint)

        xml.endDocument()
        return stream.getvalue()
 def write(self, outfile, encoding):
     handler = SimplerXMLGenerator(outfile, encoding)
     handler.startDocument()
     if self.feed['language'] is not None:
         handler.startElement(u"feed", {
             u"xmlns": self.ns,
             u"xml:lang": self.feed['language']
         })
     else:
         handler.startElement(u"feed", {u"xmlns": self.ns})
     handler.addQuickElement(u"title", self.feed['title'])
     handler.addQuickElement(u"link", "", {
         u"rel": u"alternate",
         u"href": self.feed['link']
     })
     if self.feed['feed_url'] is not None:
         handler.addQuickElement(u"link", "", {
             u"rel": u"self",
             u"href": self.feed['feed_url']
         })
     handler.addQuickElement(u"id", self.feed['id'])
     handler.addQuickElement(
         u"updated",
         rfc3339_date(self.latest_post_date()).decode('ascii'))
     if self.feed['author_name'] is not None:
         handler.startElement(u"author", {})
         handler.addQuickElement(u"name", self.feed['author_name'])
         if self.feed['author_email'] is not None:
             handler.addQuickElement(u"email", self.feed['author_email'])
         if self.feed['author_link'] is not None:
             handler.addQuickElement(u"uri", self.feed['author_link'])
         handler.endElement(u"author")
     if self.feed['subtitle'] is not None:
         handler.addQuickElement(u"subtitle", self.feed['subtitle'])
     for cat in self.feed['categories']:
         handler.addQuickElement(u"category", "", {u"term": cat})
     if self.feed['feed_copyright'] is not None:
         handler.addQuickElement(u"rights", self.feed['feed_copyright'])
     self.write_items(handler)
     handler.endElement(u"feed")
示例#23
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(
            self.root_tag_name,
            {"xmlns:soapenv": "http://schemas.xmlsoap.org/soap/envelope/"})
        xml.startElement(self.second_tag_name, {})
        xml.startElement(self.third_tag_name.format(method=data['method']),
                         {"xmlns:ns2": "http://uws.provider.com/"})

        self._to_xml(xml, data['body'])
        try:
            for params in data['parameters']:
                self._to_xml(
                    xml, {
                        "parameters": {
                            "paramKey": params[0],
                            "paramValue": params[1],
                        },
                    })
            for statements in data['statements']:
                self._to_xml(xml, {
                    "statements": statements,
                })
        except KeyError:
            pass
        xml.endElement(self.third_tag_name.format(method=data['method']))
        xml.endElement(self.second_tag_name)
        xml.endElement(self.root_tag_name)
        xml.endDocument()
        return stream.getvalue()
示例#24
0
 def write(self, outfile, encoding):
     handler = SimplerXMLGenerator(outfile, encoding)
     handler.startDocument()
     handler.startElement("rss", {"version": self._version})
     handler.startElement("channel", {})
     handler.addQuickElement("title", self.feed['title'])
     handler.addQuickElement("link", self.feed['link'])
     handler.addQuickElement("description", self.feed['description'])
     if self.feed['language'] is not None:
         handler.addQuickElement("language", self.feed['language'])
     for cat in self.feed['categories']:
         handler.addQuickElement("category", cat)
     if self.feed['feed_copyright'] is not None:
         handler.addQuickElement("copyright", self.feed['feed_copyright'])
     handler.addQuickElement(
         "lastBuildDate",
         rfc2822_date(self.latest_post_date()).decode('ascii'))
     if self.feed['ttl'] is not None:
         handler.addQuickElement("ttl", self.feed['ttl'])
     self.write_items(handler)
     self.endChannelElement(handler)
     handler.endElement("rss")
示例#25
0
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Renders `data` into serialized XML.
        """
        if data is None:
            return ''
        print(data)

        stream = StringIO()

        xml = SimplerXMLGenerator(stream, self.charset)
        xml.startDocument()
        reactor_model_id = data[0]['composition'][0]['ibis']['reactor_model']
        xml.startElement("base_component ", {
            'basecore_ID':
            ReactorModel.objects.get(pk=reactor_model_id).name
        })

        self._to_xml(xml, data)

        xml.endElement("base_component ")
        xml.endDocument()
        return stream.getvalue()
 def __init__(self, request, stream):
     self.xml = SimplerXMLGenerator(stream, 'utf8')
     self.request = request
     self.stream = stream
示例#27
0
    def backup_objects(self):
        models = [
            Address, Contact, Contract, PhoneNumber, Project, Proposal,
            ProposalRow, Invoice, InvoiceRow, Expense
        ]

        self.xml = SimplerXMLGenerator(self.stream, settings.DEFAULT_CHARSET)
        self.xml.startDocument()
        self.xml.startElement("aemanager", {"version": common()['version']})

        for model in models:
            for object in model.objects.filter(owner=self.user):
                # do not export address of user profile
                if not (type(object) == Address
                        and object.userprofile_set.count()):
                    self.indent(1)
                    self.xml.startElement(object._meta.object_name,
                                          {'uuid': object.uuid})
                    for field in object._meta.local_fields:
                        if field.name not in ['ownedobject_ptr']:
                            self.indent(2)
                            self.xml.startElement(field.name, {})
                            if getattr(object, field.name) is not None:
                                if type(field) == ForeignKey:
                                    related = getattr(object, field.name)
                                    if type(related) == Country:
                                        self.xml.addQuickElement(
                                            "object",
                                            attrs={
                                                'country_code':
                                                smart_unicode(
                                                    related.country_code2)
                                            })
                                    else:
                                        self.xml.addQuickElement(
                                            "object",
                                            attrs={
                                                'uuid':
                                                smart_unicode(related.uuid)
                                            })
                                elif type(field) == OneToOneField:
                                    related = getattr(object, field.name)
                                    self.xml.addQuickElement(
                                        "object",
                                        attrs={
                                            'uuid': smart_unicode(related.uuid)
                                        })
                                else:
                                    self.xml.characters(
                                        field.value_to_string(object))
                            else:
                                self.xml.addQuickElement("None")
                            self.xml.endElement(field.name)

                    for field in object._meta.many_to_many:
                        self.indent(2)
                        self.xml.startElement(field.name, {})
                        for relobj in getattr(object, field.name).iterator():
                            self.indent(3)
                            self.xml.addQuickElement(
                                "object",
                                attrs={'uuid': smart_unicode(relobj.uuid)})
                        self.indent(2)
                        self.xml.endElement(field.name)

                    self.indent(1)
                    self.xml.endElement(smart_unicode(
                        object._meta.object_name))

        self.indent(0)
        self.xml.endElement("aemanager")
        self.xml.endDocument()
示例#28
0
 def render(self, obj, stream, **opts):
     xml = SimplerXMLGenerator(stream, 'utf-8')
     xml.startDocument()
     self._to_xml(xml, obj)
     xml.endDocument()
示例#29
0
 def write(self, outfile, encoding):
     handler = SimplerXMLGenerator(outfile, encoding)
示例#30
0
    def render(self, capabilities, prettyprint=False):
        """
            parameters:
              capabilities = queryset of voresource_capabilities
              prettyprint = flag for pretty printing the xml output (including whitespace and linebreaks)
            """

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

        xml.startDocument()

        # add a comment
        xml._write(self.comment)

        # add namespace definitions
        nsattrs = {}
        nsattrs['version'] = self.version
        #nsattrs['encoding'] = charser
        nsattrs['xmlns:vosi'] = self.ns_vosicap
        nsattrs['xmlns:xsi'] = self.ns_xsi
        nsattrs['xmlns:vs'] = self.ns_vs
        nsattrs['xmlns:vr'] = self.ns_vr

        # add root node
        xml.startElement('vosi:capabilities', nsattrs)

        # Add all the capabilities, including those for VOSI endpoint,
        # extract them from the database using the provided queryset.
        # The following lookup is not efficient, since there is a database
        # call for each object, it would be more efficient to get a list of
        # all capabilities, interfaces and accessurls and then match them here.
        for capability in capabilities:
            attrs = {}
            if capability.standardID:
                attrs['standardID'] = str(capability.standardID)
            xml.startElement('capability', attrs)

            interfaces = capability.voresource_interface_set.all()
            for interface in interfaces:
                attrs = {}
                if interface.type:
                    attrs['xsi:type'] = interface.type
                xml.startElement('interface', attrs)

                accessurls = interface.voresource_accessurl_set.all()
                for accessurl in accessurls:
                    attrs = {}
                    attrs[
                        'use'] = accessurl.use  # throw error, if its not there?
                    xml.startElement('accessURL', attrs)
                    xml.characters(smart_unicode(accessurl.url))
                    xml.endElement('accessURL')

                xml.endElement('interface')

            xml.endElement('capability')

        xml.endElement('vosi:capabilities')

        xml.endDocument()

        xml_string = stream.getvalue()

        # make the xml pretty, i.e. use linebreaks and indentation
        # the sax XMLGenerator behind SimpleXMLGenerator does not seem to support this,
        # thus need a library that can do it.
        # TODO: since we use lxml anyway, maybe build the whole xml-tree with lxml.etree!
        # NOTE: This removes any possibly existing comments from the xml output!
        if prettyprint is True:
            parsed = etree.fromstring(xml_string)
            pretty_xml = etree.tostring(parsed, pretty_print=True)
            xml_string = pretty_xml

        return xml_string