def get_description_annotations(self): """ Gets descriptive annotations, and a or a list of fields that are not in containment relationships """ self.description_annotations = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_DESCRIBES)\ .order_by('field_num') if len(self.description_annotations) > 0: self.count_active_fields = len(self.description_annotations) self.des_rels = LastUpdatedOrderedDict() for des_anno in self.description_annotations: add_descriptor_field = False if des_anno.object_field_num not in self.des_rels: # entities being described are in the field identified by object_field_num pg = ProcessGeneral(self.source_id) field_obj = pg.get_field_obj(des_anno.object_field_num) if field_obj is not False: if field_obj.field_type in ImportProfile.DEFAULT_SUBJECT_TYPE_FIELDS: self.des_rels[des_anno.object_field_num] = LastUpdatedOrderedDict() self.des_rels[des_anno.object_field_num]['field'] = field_obj self.des_rels[des_anno.object_field_num]['des_by_fields'] = [] add_descriptor_field = True else: add_descriptor_field = True if add_descriptor_field: # the descriptive field is identified by the field_num pg = ProcessGeneral(self.source_id) des_field_obj = pg.get_field_obj(des_anno.field_num) if des_field_obj is not False: self.des_rels[des_anno.object_field_num]['des_by_fields'].append(des_field_obj)
def get_link_annotations(self): """ Gets descriptive annotations, and a or a list of fields that are not in containment relationships """ link_annotations = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id)\ .exclude(predicate__in=self.DEFAULT_EXCLUSION_PREDS)\ .order_by('field_num', 'object_field_num') if len(link_annotations) > 0: self.count_active_fields = len(link_annotations) self.link_rels = LastUpdatedOrderedDict() for link_anno in link_annotations: pg = ProcessGeneral(self.source_id) subj_field = pg.get_field_obj(link_anno.field_num) obj_field = pg.get_field_obj(link_anno.object_field_num) if subj_field is not False and obj_field is not False: # print('Found subject, object') if subj_field.field_type in ImportProfile.DEFAULT_SUBJECT_TYPE_FIELDS \ and obj_field.field_type in ImportProfile.DEFAULT_SUBJECT_TYPE_FIELDS: # print('Valid subject, object') if link_anno.field_num not in self.link_rels: rels = {'sub_field_obj': subj_field, 'pred_objs': []} else: rels = self.link_rels[link_anno.field_num] pred_obj = {'predicate_uuid': False, 'pred_field_obj': False, 'obj_field_obj': obj_field} if link_anno.predicate_field_num > 0: pred_obj['pred_field_obj'] = pg.get_field_obj(link_anno.predicate_field_num) else: pred_obj['predicate_uuid'] = link_anno.predicate rels['pred_objs'].append(pred_obj) self.link_rels[link_anno.field_num] = rels
def get_obs_num_field_num(self, field_obj): """ Gets the observation number field for descriptive fields if they exist.""" obs_num_field_num = False obs_fields = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_OBS_NUM, object_field_num=field_obj.field_num)[:1] if len(obs_fields) > 0: pg = ProcessGeneral(self.source_id) obs_num_obj = pg.get_field_obj(obs_fields[0].field_num) if obs_num_obj: if obs_num_obj.field_type == 'obs-num': obs_num_field_num = obs_num_obj.field_num return obs_num_field_num
def get_field_valueofs(self, variable_field_num): """ gets the field_valueofs for a variable field_num """ valueof_fields = [] val_annos = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_VALUE_OF, object_field_num=variable_field_num)\ .order_by('field_num') if len(val_annos) > 0: for val_anno in val_annos: pg = ProcessGeneral(self.source_id) val_obj = pg.get_field_obj(val_anno.field_num) if val_obj is not False: if val_obj.field_type == 'value': valueof_fields.append(val_obj) self.field_valueofs[variable_field_num] = valueof_fields return valueof_fields
def get_variable_valueof(self, des_field_obj): """ Checks to see if the des_by_field is a variable that has designated values """ valueof_fields = [] if des_field_obj.field_type == 'variable': if des_field_obj.field_num in self.field_valueofs: valueof_fields = self.field_valueofs[des_field_obj.field_num] else: # get list of field_nums that have the des_by_field as their object val_annos = ImportFieldAnnotation.objects\ .filter(source_id=self.source_id, predicate=ImportFieldAnnotation.PRED_VALUE_OF, object_field_num=des_field_obj.field_num)\ .order_by(field_num) if len(val_annos) > 1: for val_anno in val_annos: pg = ProcessGeneral(self.source_id) val_obj = pg.get_field_obj(val_anno.field_num) if val_obj is not False: if val_obj.field_type == 'value': valueof_fields.append(val_obj) self.field_valueofs[des_field_obj.field_num] = valueof_fields return valueof_fields