def render(self, context): try: token = self.instancia.resolve(context) padre = self.padre.resolve(context) model = get_model_assigned(padre) fields = Field.objects.all() fields = fields.filter(modelo=model) fields = fields.filter(nombre=self.field) fields = fields.filter(visibilidad='V') fields = fields.exclude(propiedad=None) if fields.count() == 1: field = fields.get() datos = get_instance_data(token, None) resultado = '<%s itemscope itemprop="%s" itemtype="%s" ' resultado += 'itemid="%s">\n' resultado = resultado % (self.etiqueta, field.propiedad.nombre, datos['tipo_m'], datos['uri']) resultado = mark_safe(resultado) resultado += self.nodelist.render(context) resultado += '</' + self.etiqueta + '>' return resultado else: return '' except template.VariableDoesNotExist: return ''
def render(self, context): try: token = self.instancia.resolve(context) padre = self.padre.resolve(context) model = get_model_assigned(padre) fields = Field.objects.all() fields = fields.filter(modelo=model) fields = fields.filter(nombre=self.field) fields = fields.filter(visibilidad="V") fields = fields.exclude(propiedad=None) if fields.count() == 1: field = fields.get() datos = get_instance_data(token, None) resultado = '<div rel="%s">' % field.propiedad.get_full_name() resultado += "<" + self.etiqueta resultado += ' typeof="%s" about="%s"' % (datos["tipo"], datos["uri"]) resultado += ">\n" resultado = mark_safe(resultado) resultado += self.nodelist.render(context) resultado += "</" + self.etiqueta + "></div>" return resultado else: return "" except template.VariableDoesNotExist: return ""
def easydata_include_link(elemento): """ This tamplate tag get an instance element, and return a html a tag with the url where is published the information of the instance un RDF format. :param elemento: is the instance that you want to generate the link :return: HTML with the link to the RDF information of the elem """ #Get the model model = get_model_assigned(elemento) if not model is None: # Get the url of the instance model url = model.generate_url(elemento, True) # Create the photo html tag foto = '<img alt="[RDF data]" src="' + settings.STATIC_URL + \ 'easydata/img/linked_logo.png" />' # Create the a tag with the url and the photo link = '<a href="' + url + '" target="_blank">' + foto + '</a>' return mark_safe(link) else: return ''
def test_get_model_assigned(self): """ Este caso de prueba se encarga de el util get_model_assigned devuelve correctamente el modelo con el que se corresponde una determinada instancia """ ent = Modelo.objects.all()[0] prop = Propiedad.objects.get(nombre="proptest3") model_assigned_ent = get_model_assigned(ent) self.assertIsNone(model_assigned_ent) model_assigned_prop = get_model_assigned(prop) self.assertIsInstance(model_assigned_prop, Modelo) self.assertRaises(AttributeError, get_model_assigned, ["fail", ])
def render(self, context): try: token = self.instancia.resolve(context) padre = self.padre.resolve(context) model = get_model_assigned(padre) fields = Field.objects.all() fields = fields.filter(modelo=model) fields = fields.filter(nombre=self.field) fields = fields.filter(visibilidad='V') fields = fields.exclude(propiedad=None) if fields.count() == 1: field = fields.get() datos = get_instance_data(token, None) resultado = '<div rel="%s">' % field.propiedad.get_full_name() resultado += '<' + self.etiqueta resultado += ' typeof="%s" about="%s"' % (datos['tipo'], datos['uri']) resultado += ">\n" resultado = mark_safe(resultado) resultado += self.nodelist.render(context) resultado += '</' + self.etiqueta + '></div>' return resultado else: return '' except template.VariableDoesNotExist: return ''
def get_instance_data(elemento, field=None): """ Return the info of a concrete model instance :param elemento: is the model instance :param field: concrete field of the instance to generate the data. :return: dict with the instance data. """ # Get the model model = get_model_assigned(elemento) # Sino tiene ningun modelo asociado, no imprimimos nada if model is None: # Create the dict to store the data datos = dict() datos["uri"] = "" datos["tipo"] = "" datos["tipo_m"] = "" datos["atributos"] = list() datos["relaciones"] = list() return datos else: header = get_header() # Create the dict to store the data datos = dict() datos["uri"] = header() + model.generate_url(elemento) datos["tipo"] = model.entidad.generate_type_short() datos["tipo_m"] = model.entidad.generate_type() datos["atributos"] = list() datos["relaciones"] = list() # Get the fields of the model atributos = Atributo.objects.all() atributos = atributos.filter(modelo=model) atributos = atributos.filter(visibilidad="V") atributos = atributos.filter(modelo__visibilidad="V") atributos = atributos.exclude(propiedad=None) if not field is None: atributos = atributos.filter(nombre=field) # Recorremos cada uno de los atributos, captando sus datos for attr in atributos: registro = dict() registro["property"] = attr.propiedad.get_full_name() registro["nombre"] = attr.propiedad.namespace.url + attr.propiedad.nombre registro["content"] = getattr(elemento, attr.nombre, "") datos["atributos"].append(registro) # Captamos cada una de las relaciones relaciones = Relacion.objects.all() relaciones = relaciones.filter(modelo=model) relaciones = relaciones.filter(modelo__visibilidad="V") relaciones = relaciones.filter(visibilidad="V") relaciones = relaciones.exclude(propiedad=None) relaciones = relaciones.exclude(modelo_relacionado=None) relaciones = relaciones.exclude(modelo_relacionado__visibilidad="P") if not field is None: relaciones = relaciones.filter(nombre=field) # Para cada una de las relaciones for rel in relaciones: elems = getattr(elemento, rel.nombre, None) if not elems is None: # Si es multiple, recorremos cada uno de los elementos if rel.tipo_relacion in ("OF", "M") and hasattr(elems, "all"): for elem in elems.all(): registro = dict() model_e = get_model_assigned(elem) registro["resource"] = header() + model_e.generate_url(elem) registro["rel"] = rel.propiedad.get_full_name() registro["itemprop"] = rel.propiedad.namespace.url + rel.propiedad.nombre datos["relaciones"].append(registro) else: registro = dict() model_e = get_model_assigned(elems) registro["resource"] = header() + model_e.generate_url(elems) registro["rel"] = rel.propiedad.get_full_name() registro["itemprop"] = rel.propiedad.namespace.url + rel.propiedad.nombre datos["relaciones"].append(registro) return datos
def get_instance_data(elemento, field=None): """ Return the info of a concrete model instance :param elemento: is the model instance :param field: concrete field of the instance to generate the data. :return: dict with the instance data. """ #Get the model model = get_model_assigned(elemento) #Sino tiene ningun modelo asociado, no imprimimos nada if model is None: #Create the dict to store the data datos = dict() datos['uri'] = "" datos['tipo'] = "" datos['tipo_m'] = "" datos['atributos'] = list() datos['relaciones'] = list() return datos else: header = get_header() #Create the dict to store the data datos = dict() datos['uri'] = header() + model.generate_url(elemento) datos['tipo'] = model.entidad.generate_type_short() datos['tipo_m'] = model.entidad.generate_type() datos['atributos'] = list() datos['relaciones'] = list() #Get the fields of the model atributos = Atributo.objects.all() atributos = atributos.filter(modelo=model) atributos = atributos.filter(visibilidad='V') atributos = atributos.filter(modelo__visibilidad='V') atributos = atributos.exclude(propiedad=None) if not field is None: atributos = atributos.filter(nombre=field) #Recorremos cada uno de los atributos, captando sus datos for attr in atributos: registro = dict() registro['property'] = attr.propiedad.get_full_name() registro['nombre'] = attr.propiedad.namespace.url + \ attr.propiedad.nombre registro['content'] = getattr(elemento, attr.nombre, "") datos['atributos'].append(registro) #Captamos cada una de las relaciones relaciones = Relacion.objects.all() relaciones = relaciones.filter(modelo=model) relaciones = relaciones.filter(modelo__visibilidad='V') relaciones = relaciones.filter(visibilidad='V') relaciones = relaciones.exclude(propiedad=None) relaciones = relaciones.exclude(modelo_relacionado=None) relaciones = relaciones.exclude(modelo_relacionado__visibilidad='P') if not field is None: relaciones = relaciones.filter(nombre=field) # Para cada una de las relaciones for rel in relaciones: elems = getattr(elemento, rel.nombre, None) if not elems is None: #Si es multiple, recorremos cada uno de los elementos if rel.tipo_relacion in ('OF', 'M') and hasattr(elems, 'all'): for elem in elems.all(): registro = dict() model_e = get_model_assigned(elem) registro['resource'] = header() + \ model_e.generate_url(elem) registro['rel'] = rel.propiedad.get_full_name() registro['itemprop'] = rel.propiedad.namespace.url + \ rel.propiedad.nombre datos['relaciones'].append(registro) else: registro = dict() model_e = get_model_assigned(elems) registro['resource'] = header() + \ model_e.generate_url(elems) registro['rel'] = rel.propiedad.get_full_name() registro['itemprop'] = rel.propiedad.namespace.url + \ rel.propiedad.nombre datos['relaciones'].append(registro) return datos