コード例 #1
0
 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)
コード例 #2
0
 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
コード例 #3
0
 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
コード例 #4
0
 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
コード例 #5
0
 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