def update_field_contains(self, field_num, object_field_num, pred_contains=None): """ Updates a field annotation to make entities in a field_num (subject) contain entities in an object_ield_num """ if pred_contains is None: pred_contains = Assertion.PREDICATES_CONTAINS # delete cases where the object_field_num is contained by another field del_preds = [ Assertion.PREDICATES_CONTAINS, ImportFieldAnnotation.PRED_DRAFT_CONTAINS ] anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate__in=del_preds, object_field_num=object_field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = pred_contains ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_desciption(self, field_num, object_field_num): """ Updates a field annotation so that a list of field_num are assigned to describe an object_field_num entity """ self.get_field_num_list(field_num) # delete cases where the object_field_num is contained by another field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_DESCRIBES, field_num__in=self.field_num_list)\ .delete() entity_ok = self.check_field_type(object_field_num, ImportProfile.DEFAULT_SUBJECT_TYPE_FIELDS) for field_num in self.field_num_list: des_ok = self.check_field_type(field_num, ['description', 'variable']) if des_ok and entity_ok: # only make the annotation if the subject is a value, object is a variable ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_DESCRIBES ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_field_predicate_infield(self, field_num, object_field_num, predicate_field_num): """ Updates a field annotation to make entities in a field_num (subject) have custom relationships defined by the values in a predicate_field_num to entities in the object_field_num """ try: # in case we try to pass somthing that's not an integer anno_subjs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, field_num=field_num, object_field_num=object_field_num, predicate_field_num=predicate_field_num)\ .delete() except: pass anno_subjs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, field_num=field_num, object_field_num=object_field_num, predicate='', predicate_field_num=predicate_field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = '' ifa.predicate_field_num = predicate_field_num ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_desciption(self, field_num, object_field_num): """ Updates a field annotation so that a list of field_num are assigned to describe an object_field_num entity """ self.get_field_num_list(field_num) # delete cases where the object_field_num is contained by another field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_DESCRIBES, field_num__in=self.field_num_list)\ .delete() entity_ok = self.check_field_type( object_field_num, ImportProfile.DEFAULT_SUBJECT_TYPE_FIELDS) for field_num in self.field_num_list: des_ok = self.check_field_type(field_num, ['description', 'variable']) if des_ok and entity_ok: # only make the annotation if the subject is a value, object is a variable ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_DESCRIBES ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_field_containedin_entity(self, field_num, object_uuid): """ Updates a field annotation to make it contained a subject entity (object_uuid) after first deleting other containment annotations """ # delete cases where the another field contains the current field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=Assertion.PREDICATES_CONTAINS, object_field_num=field_num)\ .delete() # delete cases where the current field is contained in an entity anno_subjs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_CONTAINED_IN, field_num=field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_CONTAINED_IN ifa.predicate_field_num = 0 ifa.object_field_num = 0 ifa.object_uuid = object_uuid ifa.save()
def update_variable_value(self, field_num, object_field_num): """ Updates a field annotation to make entities in a field_num (subject) contain entities in an object_ield_num """ # delete cases where the field_num is a value_of another field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_VALUE_OF, field_num=field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_VALUE_OF ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_field_document_text_entity(self, field_num, object_field_num): """ Updates a field annotation to make document entities in a field_num (subject) have document text in an object_ield_num """ # delete cases where the (subject) field_num is a media part of another field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_DOC_Text, field_num=field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_DOC_Text ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_field_media_part_of_entity(self, field_num, object_field_num): """ Updates a field annotation to make entities in a field_num (subject) a media part of entities in an object_ield_num """ # delete cases where the (subject) field_num is a media part of another field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_MEDIA_PART_OF, field_num=field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_MEDIA_PART_OF ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_field_links(self, field_num, object_field_num): """ Updates a field annotation to make entities in a field_num (subject) contain entities in an object_ield_num """ # delete cases where the object_field_num is contained by another field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=Assertion.PREDICATES_LINK, object_field_num=object_field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = Assertion.PREDICATES_LINK ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_obs_num(self, field_num, object_field_num): """ Updates a field annotation to make entities in a field_num (subject) contain entities in an object_ield_num """ # delete cases where the field_num is an OBS NUM of another field anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_OBS_NUM, field_num=field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_OBS_NUM ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_field_custom_predicate(self, field_num, object_field_num, predicate_id, predicate_type): """ Updates a field annotation to make entities in a field_num (subject) have a custom relationship (predicate_id) to an object_field_num """ try: # in case we try to pass somthing that's not an integer anno_subjs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, field_num=field_num, object_field_num=object_field_num, predicate_field_num=predicate_id)\ .delete() except: pass anno_subjs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, field_num=field_num, object_field_num=object_field_num, predicate=predicate_id)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num if 'field' in predicate_type: # predicate linking relation in an importer field # means entities in this field describe different linking relations ifa.predicate = '' ifa.predicate_field_num = predicate_id else: # predicate linking relation is the predicate_id ifa.predicate = predicate_id ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_field_contains(self, field_num, object_field_num, pred_contains=None): """ Updates a field annotation to make entities in a field_num (subject) contain entities in an object_ield_num """ if pred_contains is None: pred_contains = Assertion.PREDICATES_CONTAINS # delete cases where the object_field_num is contained by another field del_preds = [Assertion.PREDICATES_CONTAINS, ImportFieldAnnotation.PRED_DRAFT_CONTAINS] anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate__in=del_preds, object_field_num=object_field_num)\ .delete() ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = pred_contains ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_description(self, field_num, object_field_num): """ Updates a field annotation so that a list of field_num are assigned to describe an object_field_num entity """ self.get_field_num_list(field_num) # delete cases where the field_num is already used del_preds = [ ImportFieldAnnotation.PRED_DESCRIBES, ImportFieldAnnotation.PRED_GEO_LOCATION, ImportFieldAnnotation.PRED_DATE_EVENT, ImportFieldAnnotation.PRED_METADATA, ImportFieldAnnotation.PRED_COMPLEX_DES ] anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate__in=del_preds, field_num__in=self.field_num_list)\ .delete() entity_ok = self.check_field_type( object_field_num, ImportProfile.DEFAULT_SUBJECT_TYPE_FIELDS) # now check to see if this is OK for making a geolocation geo_date_object_ok = self.check_field_type(object_field_num, ['subjects']) for field_num in self.field_num_list: des_ok = self.check_field_type(field_num, ['description', 'variable']) geo_ok = self.check_field_type(field_num, ['lat', 'lon', 'geojson']) date_ok = self.check_field_type(field_num, ['early', 'late']) meta_ok = self.check_field_type(field_num, ['metadata']) complex_des_ok = self.check_field_type(field_num, ['complex-description']) if des_ok and entity_ok: # only make the annotation if the subject is a value, object is a variable ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_DESCRIBES ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif geo_ok and geo_date_object_ok: # we have a geospatial annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_GEO_LOCATION ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif date_ok and geo_date_object_ok: # we have a date annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_DATE_EVENT ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif complex_des_ok: # we have complex description annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_COMPLEX_DES ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif meta_ok: # we have metadata annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_METADATA ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()
def update_description(self, field_num, object_field_num): """ Updates a field annotation so that a list of field_num are assigned to describe an object_field_num entity """ self.get_field_num_list(field_num) # delete cases where the field_num is already used del_preds = [ImportFieldAnnotation.PRED_DESCRIBES, ImportFieldAnnotation.PRED_GEO_LOCATION, ImportFieldAnnotation.PRED_DATE_EVENT, ImportFieldAnnotation.PRED_METADATA, ImportFieldAnnotation.PRED_COMPLEX_DES] anno_objs = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate__in=del_preds, field_num__in=self.field_num_list)\ .delete() entity_ok = self.check_field_type(object_field_num, ImportProfile.DEFAULT_SUBJECT_TYPE_FIELDS) # now check to see if this is OK for making a geolocation geo_date_object_ok = self.check_field_type(object_field_num, ['subjects']) for field_num in self.field_num_list: des_ok = self.check_field_type(field_num, ['description', 'variable']) geo_ok = self.check_field_type(field_num, ['lat', 'lon', 'geojson']) date_ok = self.check_field_type(field_num, ['early', 'late']) meta_ok = self.check_field_type(field_num, ['metadata']) complex_des_ok = self.check_field_type(field_num, ['complex-description']) if des_ok and entity_ok: # only make the annotation if the subject is a value, object is a variable ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_DESCRIBES ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif geo_ok and geo_date_object_ok: # we have a geospatial annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_GEO_LOCATION ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif date_ok and geo_date_object_ok: # we have a date annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_DATE_EVENT ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif complex_des_ok: # we have complex description annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_COMPLEX_DES ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save() elif meta_ok: # we have metadata annotations ifa = ImportFieldAnnotation() ifa.source_id = self.source_id ifa.project_uuid = self.project_uuid ifa.field_num = field_num ifa.predicate = ImportFieldAnnotation.PRED_METADATA ifa.predicate_field_num = 0 ifa.object_field_num = object_field_num ifa.object_uuid = '' ifa.save()