Exemplo n.º 1
0
    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 ''
Exemplo n.º 2
0
    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 ""
Exemplo n.º 3
0
    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 ''
Exemplo n.º 4
0
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 ''
Exemplo n.º 5
0
    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", ])
Exemplo n.º 6
0
    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 ''
Exemplo n.º 7
0
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 ''
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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