示例#1
0
    def to_etree(self, data, options=None, name=None, depth=0):
        '''
        Exact duplicate of tastypie.serializers.Serializer.to_etree with modification because
        it does not expose sufficient APIs to customize just at the bundle level while reusing
        all this same envelope code.
        '''
        if isinstance(data, (list, tuple)):
            element = Element(name or 'objects')
            if name:
                element = Element(name)
                element.set('type', 'list')
            else:
                element = Element('objects')
            for item in data:
                element.append(self.to_etree(item, options, depth=depth+1))
        elif isinstance(data, dict):
            if depth == 0:
                element = Element(name or 'response')
            else:
                element = Element(name or 'object')
                element.set('type', 'hash')
            for (key, value) in data.iteritems():
                element.append(self.to_etree(value, options, name=key, depth=depth+1))
        elif isinstance(data, Bundle):
            element = self.bundle_to_etree(data) # <--------------- this is the part that is changed from https://github.com/toastdriven/django-tastypie/blob/master/tastypie/serializers.py
        elif hasattr(data, 'dehydrated_type'):
            if getattr(data, 'dehydrated_type', None) == 'related' and data.is_m2m == False:
                if data.full:
                    return self.to_etree(data.fk_resource, options, name, depth+1)
                else:
                    return self.to_etree(data.value, options, name, depth+1)
            elif getattr(data, 'dehydrated_type', None) == 'related' and data.is_m2m == True:
                if data.full:
                    element = Element(name or 'objects')
                    for bundle in data.m2m_bundles:
                        element.append(self.to_etree(bundle, options, bundle.resource_name, depth+1))
                else:
                    element = Element(name or 'objects')
                    for value in data.value:
                        element.append(self.to_etree(value, options, name, depth=depth+1))
            else:
                return self.to_etree(data.value, options, name)
        else:
            element = Element(name or 'value')
            simple_data = self.to_simple(data, options)
            data_type = get_type_string(simple_data)

            if data_type != 'string':
                element.set('type', get_type_string(simple_data))

            if data_type != 'null':
                if isinstance(simple_data, unicode):
                    element.text = simple_data
                else:
                    element.text = force_unicode(simple_data)

        return element
示例#2
0
    def to_etree(self, data, options=None, name=None, depth=0):
        '''
        Exact duplicate of tastypie.serializers.Serializer.to_etree with modification because
        it does not expose sufficient APIs to customize just at the bundle level while reusing
        all this same envelope code.
        '''
        if isinstance(data, (list, tuple)):
            element = Element(name or 'objects')
            if name:
                element = Element(name)
                element.set('type', 'list')
            else:
                element = Element('objects')
            for item in data:
                element.append(self.to_etree(item, options, depth=depth+1))
        elif isinstance(data, dict):
            if depth == 0:
                element = Element(name or 'response')
            else:
                element = Element(name or 'object')
                element.set('type', 'hash')
            for (key, value) in six.iteritems(data):
                element.append(self.to_etree(value, options, name=key, depth=depth+1))
        elif isinstance(data, Bundle):
            element = self.bundle_to_etree(data) # <--------------- this is the part that is changed from https://github.com/toastdriven/django-tastypie/blob/master/tastypie/serializers.py
        elif hasattr(data, 'dehydrated_type'):
            if getattr(data, 'dehydrated_type', None) == 'related' and data.is_m2m == False:
                if data.full:
                    return self.to_etree(data.fk_resource, options, name, depth+1)
                else:
                    return self.to_etree(data.value, options, name, depth+1)
            elif getattr(data, 'dehydrated_type', None) == 'related' and data.is_m2m == True:
                if data.full:
                    element = Element(name or 'objects')
                    for bundle in data.m2m_bundles:
                        element.append(self.to_etree(bundle, options, bundle.resource_name, depth+1))
                else:
                    element = Element(name or 'objects')
                    for value in data.value:
                        element.append(self.to_etree(value, options, name, depth=depth+1))
            else:
                return self.to_etree(data.value, options, name)
        else:
            element = Element(name or 'value')
            simple_data = self.to_simple(data, options)
            data_type = get_type_string(simple_data)

            if data_type != 'string':
                element.set('type', get_type_string(simple_data))

            if data_type != 'null':
                if isinstance(simple_data, six.text_type):
                    element.text = simple_data
                else:
                    element.text = force_text(simple_data)

        return element
示例#3
0
 def to_rdf(self, data, options=None):
     g = rdflib.Graph()
     options = options or {}
     simple_data = self.to_simple(data, options)
     # Parse Dictionary for getting list of Objects
     for key in simple_data.keys():
         # Parse list for getting every dictionary
         if get_type_string(simple_data[key]) == "list":
             for obj in simple_data[key]:
                 # Parse each object's dictionary / string
                 if get_type_string(obj) == "hash":
                     g.parse(
                         "http://www.innovagenda.com/es/event/" + str(obj["event_id"]) + "/?markFormat=rdfa",
                         format="rdfa",
                     )
                 # g.parse("/home/jon/Dropbox/Klase/PFC/Dipina/semanticmashup/semanticmashup/deustoRDFaEvents.html", format="rdfa")
     return StringIO.StringIO(g.serialize())
示例#4
0
    def to_etree(self, data, options=None, name=None, depth=0):
        """
        Given some data, converts that data to an ``etree.Element`` suitable
        for use in the XML output.
        Se eliminan los atributos type y el orden de los atributos.
        Si un object tiene una key='attr' se agrega como atributo al Element y no como nuevos Element
        """
        if isinstance(data, (list, tuple)):
            if name:
                element = Element(name)
            else:
                element = Element('objects')
            for item in data:
                element.append(self.to_etree(item, options, depth=depth + 1))
                element[:] = sorted(element, key=lambda x: x.tag)
        elif isinstance(data, dict):
            if depth == 0:
                if name:
                    element = Element(name)
                else:
                    element = Element('decsvmx',
                                      date=datetime.datetime.now().__format__(
                                          '%Y%m%d %H%M%S'),
                                      version="2.0")
            else:
                element = Element(name or 'object')
            for (key, value) in data.items():
                if key == 'attr':
                    for (k_attr, v_attr) in value.items():
                        element.set(k_attr, v_attr)
                else:
                    element.append(
                        self.to_etree(value,
                                      options,
                                      name=key,
                                      depth=depth + 1))
                    element[:] = sorted(element, key=lambda x: x.tag)
        else:
            element = Element(name or 'value')
            simple_data = self.to_simple(data, options)
            data_type = get_type_string(simple_data)

            if data_type != 'null':
                if isinstance(simple_data, six.text_type):
                    element.text = simple_data
                else:
                    element.text = force_text(simple_data)

        return element
示例#5
0
    def to_etree(self, data, options = None, name = None, depth=0):
        """ Similar to 
        """
        if isinstance(data, (list, tuple)):
            element = Element(name or 'objects')
            if name:
                element = Element(name)
                element.set('type', 'list')
            else: 
                element = Element(name or 'SEGMENT')
                for item in data:
                    element.append(self.to_etree(item , 
                        options, depth=depth+1))
        
        elif isinstance(data, dict):
            if depth == 0:
                element = Element(name or 'response')
            else:
                element = Element(name or 'object')
                element.set('type', 'hash')
            for (key, value) in data.iteritems():
                element.append(self.to_etree(value, options,
                    name=key,depth=depth+1))

        elif isinstance(data, Bundle):
            element = Element(name or 'FEATURE')
            for field_name, field_object in data.data.items():
                element.append(self.to_etree(field_object, {},
                    name=field_name, depth=depth+1))
        else:
            element = Element(name.upper() or 'value')
            simple_data = self.to_simple(data, options)
            data_type = get_type_string(simple_data)
            """
            if data_type != 'string':
                element.set('type', get_type_string(simple_data))
            """

            if data_type != 'NULL':
                if isinstance(simple_data, unicode):
                    element.text = simple_data
                else:
                    element.text = force_unicode(simple_data)
        return element
示例#6
0
文件: serializer.py 项目: leifj/coip
 def to_etree(self, data, options=None, name=None, depth=0, parent=None):
     """
     Given some data, converts that data to an ``etree.Element`` suitable
     for use in the XML output.
     """
     
     if parent is not None:
         logging.debug("+++++++++++ %d %s %s" % (depth,name,tostring(parent)))
     else:
         logging.debug("+++++++++++ %d %s <no parent>" % (depth,name))
     logging.debug(pformat(data))
     
     if parent is None:
         parent = Element(name or self.name_data(data))
     
     if isinstance(data, (list, tuple)):
         for item in data:
             element = Element(name or 'item')
             self.to_etree(item, options, depth=depth+1,parent=element)
             parent.append(element)
     elif isinstance(data, dict):
         if len(data) == 1 and depth == 0:
             for (key,value) in data.iteritems():
                 parent = self.to_etree(value, options, name=key, depth=depth+1,parent=None)
         else:
             for (key,value) in data.iteritems():
                 parent.append(self.to_etree(value, options, name=key, depth=depth+1,parent=parent))
     elif isinstance(data, Bundle):  
         element = Element(self.name_data(data))
         for field_name, field_object in data.data.items():
             self.to_etree(field_object, options, name=field_name, depth=depth+1, parent=element)
         parent.append(element)
     else:
         element = Element(name or 'value')
         simple_data = self.to_simple(data, options)
         data_type = get_type_string(simple_data)
         #if data_type != 'string':
         #    element.set('type', get_type_string(simple_data))
         if data_type != 'null':
             element.text = force_unicode(simple_data)
         parent.append(element)
     return parent