def update_registers(self): """ This method is used when the namespace exists, and you only want to update the fields, or create the fields that do not exist before """ #Get de property object try: propiedades = Propiedad.objects.all() propiedades = propiedades.filter(nombre=self.name) propiedades = propiedades.filter(namespace__url=self.url) propiedades = propiedades.distinct() self.property = propiedades.get() #Si llegamos aqui es que existe y se debe de actualizar if not self.description is None and self.description != '': self.property.descripcion = self.description if not self.label is None and self.label != '': self.property.etiqueta = self.label self.property.simple = self.simple self.property.save() except Propiedad.DoesNotExist: if self.url == self.namespace.url: self.property = Propiedad(namespace=self.namespace, nombre=self.name, descripcion=self.description, etiqueta=self.label, simple=self.simple) #Save on DB self.property.save() if not self.property is None: for tipo in self.types: if tipo['url'] != "http://www.w3.org/2000/01/rdf-schema#": entidades = Entidad.objects.all() entidades = entidades.filter(nombre=tipo['name']) entidades = entidades.filter(namespace__url=tipo['url']) try: entidades = entidades.get() if not entidades in self.property.tipo.all(): self.property.tipo.add(entidades) except Entidad.DoesNotExist: # Si son del mismo namespace if self.namespace.url == tipo['url'] and \ tipo['name'] != "": entidades = Entidad(nombre=tipo['name'], namespace=self.namespace) entidades.save() self.property.tipo.add(entidades) self.property.save() if self.property.tipo.all().count() == 0: self.property.simple = True self.property.save()
def register(self): """ Salva en la base de datos la propiedad que almacena el registro """ #Get de property object try: propiedades = Propiedad.objects.all() propiedades = propiedades.filter(nombre=self.name) propiedades = propiedades.filter(namespace__url=self.url) propiedades = propiedades.distinct() self.property = propiedades.get() #Si llegamos aqui es que existe y no se debe de hacer nada except Propiedad.DoesNotExist: if self.namespace.url == self.url: self.property = Propiedad(namespace=self.namespace, nombre=self.name, descripcion=self.description, etiqueta=self.label, simple=self.simple) if not self.property is None: #Save on DB self.property.save() for tipo in self.types: if tipo['url'] != "http://www.w3.org/2000/01/rdf-schema#": entidades = Entidad.objects.all() entidades = entidades.filter(nombre=tipo['name']) entidades = entidades.filter(namespace__url=tipo['url']) try: entidades = entidades.get() self.property.tipo.add(entidades) except Entidad.DoesNotExist: # Si son del mismo namespace if self.url == tipo['url'] and tipo['name'] != "": entidades = Entidad(nombre=tipo['name'], namespace=self.namespace) entidades.save() self.property.tipo.add(entidades) self.property.save() if self.property.tipo.all().count() == 0: self.property.simple = True self.property.save()
def setUp(self): """ Este metodo se encarga de preparar los datos para las pruebas """ name = NameSpace(namespace="Test", url="http://test.com/", short_name="test") name.save() ent = Entidad(nombre="test", namespace=name, descripcion="descripcion de un elemento de prueba", etiqueta="etiqueta de prueba") ent.save() prop = Propiedad(nombre="proptest", simple=True, descripcion="desc test", etiqueta="prop test", namespace=name) prop.save() prop.entidades.add(ent)
def setUp(self): """ Este metodo se encarga de preparar los datos para las pruebas """ # Create namespace name = NameSpace(namespace="Test", url="http://test.com/", short_name="test") name.save() # Create two entities ent1 = Entidad(nombre="father", namespace=name, descripcion="descripcion de un elemento de prueba 1", etiqueta="etiqueta de prueba 1") ent1.save() ent2 = Entidad(nombre="son", namespace=name, descripcion="descripcion de un elemento de prueba 2", etiqueta="etiqueta de prueba 2") ent2.save() # Create some properties prop1 = Propiedad(nombre="proptest1", simple=True, descripcion="desc test 1", etiqueta="prop test 1", namespace=name) prop1.save() prop1.entidades.add(ent1) prop2 = Propiedad(nombre="proptest2", simple=True, descripcion="desc test 2", etiqueta="prop test 2", namespace=name) prop2.save() prop2.entidades.add(ent1) prop3 = Propiedad(nombre="proptest3", simple=True, descripcion="desc test 3", etiqueta="prop test 3", namespace=name) prop3.save() prop3.entidades.add(ent2) prop3.tipo.add(ent2) prop3.save() mod = Modelo(nombre="Propiedad", aplicacion="easydata", visibilidad='V', entidad=ent2) mod.save() atri = Atributo(nombre="nombre", modelo=mod, visibilidad='V', propiedad=prop3, tipo_field="CharField") atri.save()
def setUp(self): """ Este metodo se encarga de preparar los datos para las pruebas """ # Create namespace name = NameSpace(namespace="Test", url="http://test.com/", short_name="test") name.save() # Create two entities ent1 = Entidad(nombre="father", namespace=name, descripcion="descripcion de un elemento de prueba 1", etiqueta="etiqueta de prueba 1") ent1.save() ent2 = Entidad(nombre="son", namespace=name, descripcion="descripcion de un elemento de prueba 2", etiqueta="etiqueta de prueba 2") ent2.save() # Create some properties prop1 = Propiedad(nombre="proptest1", simple=True, descripcion="desc test 1", etiqueta="prop test 1", namespace=name) prop1.save() prop1.entidades.add(ent1) prop2 = Propiedad(nombre="proptest2", simple=True, descripcion="desc test 2", etiqueta="prop test 2", namespace=name) prop2.save() prop2.entidades.add(ent1) prop3 = Propiedad(nombre="proptest3", simple=True, descripcion="desc test 3", etiqueta="prop test 3", namespace=name) prop3.save() prop3.entidades.add(ent2) prop3.tipo.add(ent2) prop3.save() mod1 = Modelo(nombre="Propiedad", aplicacion="easydata", visibilidad='V', entidad=ent2) mod2 = Modelo(nombre="Entidad", aplicacion="easydata", visibilidad='V', entidad=ent2) mod1.save() mod2.save() rel1 = Relacion(nombre="entidades", modelo=mod1, modelo_relacionado=mod2, visibilidad="V", tipo_relacion="M") rel2 = Relacion(nombre="propiedades", modelo=mod2, modelo_relacionado=mod1, visibilidad="V", tipo_relacion="M") rel1.save() rel2.save()
class RegisterProperty(object): """ Este es un registro para almacenar las propiedades de las entidades. Este registro se encarga de almacenar una determinada propiedad, sus relaciones, tipo y demas caracteristicas, para posteriormente salvar las mismas en la base de datos. """ name = None """nombre de la propidad""" description = None """descripcion asociada a la propiedad""" label = None """etiqueta asociada a la propiedad""" relations = None """almacena las entidades con las que esta relacionada""" namespace = None """almacena el namespace al que pertenece""" property = None """almacena la instancia de la propiedad una vez creada""" types = None """tipos a los que hace referencia la propiedad""" simple = None """almacena si es una propiedad de tipo simple""" url = None """almacena la url asociada a la propiedad""" def __init__(self, name, description, label, namespace, relations, types, url="", tipos_base=[]): """ Constructor de la clase RegisterProperty que almacena los datos de una determinada propiedad :param name: Nombre de la propiedad :param description: Descripcion asociada a la propiedad :param label: etiqueta asociada a la propiedad :param namespace: namespace al que pertenece :param relations: entidades con la que esta relacionadas :param types: tipos de datos a los que hace referencia """ self.name = name if not description is None: self.description = description[0:500] if not label is None: self.label = label[0:100] self.namespace = namespace self.relations = relations #Check the types of the property self.simple = False for tipo in types: if tipo['url'] == "http://www.w3.org/2000/01/rdf-schema#" or \ (len(tipos_base) != 0 and tipo['name'] in tipos_base): self.simple = True if len(types) == 0: self.simple = True self.types = types self.url = url if namespace.url == "" or namespace.url is None: namespace.url = self.url namespace.save() def register(self): """ Salva en la base de datos la propiedad que almacena el registro """ #Get de property object try: propiedades = Propiedad.objects.all() propiedades = propiedades.filter(nombre=self.name) propiedades = propiedades.filter(namespace__url=self.url) propiedades = propiedades.distinct() self.property = propiedades.get() #Si llegamos aqui es que existe y no se debe de hacer nada except Propiedad.DoesNotExist: if self.namespace.url == self.url: self.property = Propiedad(namespace=self.namespace, nombre=self.name, descripcion=self.description, etiqueta=self.label, simple=self.simple) if not self.property is None: #Save on DB self.property.save() for tipo in self.types: if tipo['url'] != "http://www.w3.org/2000/01/rdf-schema#": entidades = Entidad.objects.all() entidades = entidades.filter(nombre=tipo['name']) entidades = entidades.filter(namespace__url=tipo['url']) try: entidades = entidades.get() self.property.tipo.add(entidades) except Entidad.DoesNotExist: # Si son del mismo namespace if self.url == tipo['url'] and tipo['name'] != "": entidades = Entidad(nombre=tipo['name'], namespace=self.namespace) entidades.save() self.property.tipo.add(entidades) self.property.save() if self.property.tipo.all().count() == 0: self.property.simple = True self.property.save() def register_relations(self): """ Agrega las relaciones de la propiedad con las distintas entidades """ if not self.property is None: for rel in self.relations: try: ent = Entidad.objects.all() ent = ent.filter(nombre=rel['name']) ent = ent.filter(namespace__url=rel['url']) ent = ent.get() self.property.entidades.add(ent) except Entidad.DoesNotExist: # Si son del mismo namespace if self.url == rel['url'] and not rel['name'] is None and \ rel['name'] != "": ent = Entidad(nombre=rel['name'], namespace=self.namespace) ent.save() self.property.entidades.add(ent) self.property.save() def update_registers(self): """ This method is used when the namespace exists, and you only want to update the fields, or create the fields that do not exist before """ #Get de property object try: propiedades = Propiedad.objects.all() propiedades = propiedades.filter(nombre=self.name) propiedades = propiedades.filter(namespace__url=self.url) propiedades = propiedades.distinct() self.property = propiedades.get() #Si llegamos aqui es que existe y se debe de actualizar if not self.description is None and self.description != '': self.property.descripcion = self.description if not self.label is None and self.label != '': self.property.etiqueta = self.label self.property.simple = self.simple self.property.save() except Propiedad.DoesNotExist: if self.url == self.namespace.url: self.property = Propiedad(namespace=self.namespace, nombre=self.name, descripcion=self.description, etiqueta=self.label, simple=self.simple) #Save on DB self.property.save() if not self.property is None: for tipo in self.types: if tipo['url'] != "http://www.w3.org/2000/01/rdf-schema#": entidades = Entidad.objects.all() entidades = entidades.filter(nombre=tipo['name']) entidades = entidades.filter(namespace__url=tipo['url']) try: entidades = entidades.get() if not entidades in self.property.tipo.all(): self.property.tipo.add(entidades) except Entidad.DoesNotExist: # Si son del mismo namespace if self.namespace.url == tipo['url'] and \ tipo['name'] != "": entidades = Entidad(nombre=tipo['name'], namespace=self.namespace) entidades.save() self.property.tipo.add(entidades) self.property.save() if self.property.tipo.all().count() == 0: self.property.simple = True self.property.save() def update_relations(self): """ Agrega las relaciones de la propiedad con las distintas entidades """ if not self.property is None: for rel in self.relations: try: ent = Entidad.objects.all() ent = ent.filter(nombre=rel['name']) ent = ent.filter(namespace__url=rel['url']) ent = ent.get() if not ent in self.property.entidades.all(): self.property.entidades.add(ent) except Entidad.DoesNotExist: # Si son del mismo namespace if self.namespace.url == rel['url'] and \ not rel['name'] is None and rel['name'] != "": ent = Entidad(nombre=rel['name'], namespace=self.namespace) ent.save() self.property.entidades.add(ent) self.property.save()