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
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
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())
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
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
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