Пример #1
0
 def add_table_file_download(self, table_id, file_uri):
     """ adds a file_uri for a pre-cached table download """
     ex_tabs = ExpTable.objects.filter(table_id=table_id)[:1]
     for ex_tab in ex_tabs:
         if ExpTable.PREDICATE_DUMP in ex_tab.meta_json:
             dump_list = ex_tab.meta_json[ExpTable.PREDICATE_DUMP]
         else:
             # no predicate for a data dump, so look for it
             dump_list = []
         mm = ManageMediafiles()
         ok = mm.get_head_info(file_uri)
         if ok:
             dump_item = LastUpdatedOrderedDict()
             dump_item['id'] = file_uri
             dump_item['dc-terms:hasFormat'] = mm.mime_type_uri
             dump_item['dcat:size'] = float(mm.filesize)
             print('Found: ' + str(dump_item))
             dump_list.append(dump_item)
             ex_tab.meta_json[ExpTable.PREDICATE_DUMP] = dump_list
             ex_tab.save()
             man_items = Manifest.objects.filter(uuid=table_id)[:1]
             if len(man_items) > 0:
                 man_obj = man_items[0]
                 new_anno = LinkAnnotation()
                 new_anno.subject = man_obj.uuid
                 new_anno.subject_type = man_obj.item_type
                 new_anno.project_uuid = man_obj.project_uuid
                 new_anno.source_id = 'download-file-relate'
                 new_anno.predicate_uri = ExpTable.PREDICATE_DUMP
                 new_anno.object_uri = file_uri
                 new_anno.sort = len(dump_list)
                 new_anno.obj_extra = dump_item
                 new_anno.save()
Пример #2
0
 def add_table_file_download(self, table_id, file_uri):
     """ adds a file_uri for a pre-cached table download """
     ex_tabs = ExpTable.objects.filter(table_id=table_id)[:1]
     for ex_tab in ex_tabs:
         if ExpTable.PREDICATE_DUMP in ex_tab.meta_json:
             dump_list = ex_tab.meta_json[ExpTable.PREDICATE_DUMP]
         else:
             # no predicate for a data dump, so look for it
             dump_list = []
         mm = ManageMediafiles()
         ok = mm.get_head_info(file_uri)
         if ok:
             dump_item = LastUpdatedOrderedDict()
             dump_item['id'] = file_uri
             dump_item['dc-terms:hasFormat'] = mm.mime_type_uri
             dump_item['dcat:size'] = float(mm.filesize)
             print('Found: ' + str(dump_item))
             dump_list.append(dump_item)
             ex_tab.meta_json[ExpTable.PREDICATE_DUMP] = dump_list
             ex_tab.save()
             man_items = Manifest.objects.filter(uuid=table_id)[:1]
             if len(man_items) > 0:
                 man_obj = man_items[0]
                 new_anno = LinkAnnotation()
                 new_anno.subject = man_obj.uuid
                 new_anno.subject_type = man_obj.item_type
                 new_anno.project_uuid = man_obj.project_uuid
                 new_anno.source_id = 'download-file-relate'
                 new_anno.predicate_uri = ExpTable.PREDICATE_DUMP
                 new_anno.object_uri = file_uri
                 new_anno.sort = len(dump_list)
                 new_anno.obj_extra = dump_item
                 new_anno.save()
Пример #3
0
 def validate_make_eol_hierarchy(self, child_uri, parent_uri):
     """ Validated hierarchy relations for EOL entities.
         If a child already has a parent, this will not do anything
         otherwise it will create a hierachy relation
     """
     ok_create = False
     le_gen = LinkEntityGeneration()
     child_uri = le_gen.make_clean_uri(
         child_uri)  # strip off any cruft in the URI
     parent_uri = le_gen.make_clean_uri(parent_uri)
     ent = Entity()
     found = ent.dereference(child_uri)
     if found:
         lr = LinkRecursion()
         parents = lr.get_jsonldish_entity_parents(child_uri, False)
         if parents is False:
             # no parents, so OK to make an assertion
             ok_create = True
         else:
             if len(parents) == 0:
                 # no parents, so OK to make an assertion
                 ok_create = True
     else:
         ok_create = True  # the child does not yet exist, so OK to make the relation
         print('Getting missing data for: ' + child_uri)
         self.get_save_entity_label(child_uri)
     if ok_create:
         print('OK, make rel for: ' + child_uri + ' in ' + parent_uri)
         la = LinkAnnotation()
         la.subject = child_uri
         la.subject_type = 'uri'
         la.project_uuid = '0'
         la.source_id = 'manual-eol-manage'
         la.predicate_uri = self.CHILD_PARENT_REL
         la.object_uri = parent_uri
         la.sort = 1
         la.save()
     else:
         print('Already in hierarchy: ' + child_uri)
Пример #4
0
 def validate_make_eol_hierarchy(self, child_uri, parent_uri):
     """ Validated hierarchy relations for EOL entities.
         If a child already has a parent, this will not do anything
         otherwise it will create a hierachy relation
     """
     ok_create = False
     le_gen = LinkEntityGeneration()
     child_uri = le_gen.make_clean_uri(child_uri)  # strip off any cruft in the URI
     parent_uri = le_gen.make_clean_uri(parent_uri)
     ent = Entity()
     found = ent.dereference(child_uri)
     if found:
         lr = LinkRecursion()
         parents = lr.get_jsonldish_entity_parents(child_uri, False)
         if parents is False:
             # no parents, so OK to make an assertion
             ok_create = True
         else:
             if len(parents) == 0:
                 # no parents, so OK to make an assertion
                 ok_create = True
     else:
         ok_create = True  # the child does not yet exist, so OK to make the relation
         print('Getting missing data for: ' + child_uri)
         self.get_save_entity_label(child_uri)
     if ok_create:
         print('OK, make rel for: ' + child_uri + ' in ' + parent_uri)
         la = LinkAnnotation()
         la.subject = child_uri
         la.subject_type = 'uri'
         la.project_uuid = '0'
         la.source_id = 'manual-eol-manage'
         la.predicate_uri = self.CHILD_PARENT_REL
         la.object_uri = parent_uri
         la.sort = 1
         la.save()
     else:
         print('Already in hierarchy: ' + child_uri)
Пример #5
0
 def add_item_annotation(self, post_data):
     """ Adds a linked data annotation to an item
     """
     note = ''
     ok_predicates = ['dc-terms:creator',
                      'dc-terms:contributor',
                      'dc-terms:subject',
                      'dc-terms:coverage',
                      'dc-terms:temporal',
                      'dc-terms:references',
                      'dc-terms:isReferencedBy',
                      'dc-terms:license',
                      'skos:closeMatch',
                      'skos:exactMatch',
                      'owl:sameAs',
                      'skos:broader',
                      'skos:related',
                      'skos:example',
                      'rdfs:isDefinedBy',
                      'http://www.w3.org/2000/01/rdf-schema#range']
     ok = True
     predicate_uri = self.request_param_val(post_data,
                                            'predicate_uri')
     object_uri = self.request_param_val(post_data,
                                         'object_uri')
     if predicate_uri is not False \
        and object_uri is not False:
         p_entity = Entity()
         found_p = p_entity.dereference(predicate_uri)
         if found_p is False \
            and predicate_uri in ok_predicates:
             found_p = True
         o_entity = Entity()
         found_o = o_entity.dereference(object_uri)
         if found_p and found_o:
             lequiv = LinkEquivalence()
             pred_list = lequiv.get_identifier_list_variants(predicate_uri)
             obj_list = lequiv.get_identifier_list_variants(object_uri)
             la_exist = LinkAnnotation.objects\
                                      .filter(subject=self.uuid,
                                              predicate_uri__in=pred_list,
                                              object_uri__in=obj_list)[:1]
             if len(la_exist) < 1:
                 # we don't have an annotation like this yet
                 object_uri = o_entity.uri
                 new_la = LinkAnnotation()
                 new_la.subject = self.manifest.uuid
                 new_la.subject_type = self.manifest.item_type
                 new_la.project_uuid = self.manifest.project_uuid
                 new_la.source_id = self.request_param_val(post_data,
                                                           'source_id',
                                                           'manual-web-form',
                                                           False)
                 new_la.sort = self.request_param_val(post_data,
                                                      'sort',
                                                      0,
                                                      False)
                 new_la.predicate_uri = predicate_uri
                 new_la.object_uri = object_uri
                 new_la.creator_uuid = self.creator_uuid
                 new_la.save()
                 # now clear the cache a change was made
                 self.clear_caches()
             else:
                 ok = False
                 note = 'This annotation already exists.'
         else:
             ok = False
             note = 'Missing a predicate or object entity'
     else:
         note = self.errors['params']
         ok = False
     self.response = {'action': 'add-item-annotation',
                      'ok': ok,
                      'change': {'note': note}}
     return self.response
Пример #6
0
 def generate_table_metadata(self, table_id, overwrite=False):
     """ makes metadata for a specific table """
     ex_id = ExpTableIdentifiers()
     ex_id.make_all_identifiers(table_id)
     table_ids = [ex_id.table_id,
                  ex_id.public_table_id]
     try:
         ex_tab = ExpTable.objects.get(table_id=table_id)
     except ExpTable.DoesNotExist:
         print('No ExpTable object for: ' + ex_id.public_table_id)
         ex_tab = None
     try:
         man_obj = Manifest.objects.get(uuid=ex_id.public_table_id)
     except Manifest.DoesNotExist:
         print('No manifest object for: ' + ex_id.public_table_id)
         man_obj = None
     if ex_tab is not None and man_obj is not None:
         proj_uuid_counts = None
         for meta_pred in self.metadata_predicates:
             if overwrite:
                 num_old_delete = LinkAnnotation.objects\
                                                .filter(subject__in=table_ids,
                                                        predicate_uri=meta_pred)\
                                                .delete()
                 print('Deleted annoations ' + str(num_old_delete) + ' for ' + meta_pred)
                 add_meta_for_pred = True
             else:
                 num_exists = LinkAnnotation.objects\
                                            .filter(subject__in=table_ids,
                                                    predicate_uri=meta_pred)[:1]
                 if len(num_exists) < 1:
                     add_meta_for_pred = True
                 else:
                     add_meta_for_pred = False
             if add_meta_for_pred:
                 if meta_pred == 'dc-terms:contributor':
                     print('Getting contributors for ' + table_id)
                     sorted_author_list = self.get_table_author_counts(table_id)
                     contrib_sort = 0
                     for s_author in sorted_author_list:
                         contrib_sort += 1
                         obj_extra = LastUpdatedOrderedDict()
                         obj_extra['count'] = s_author['count']
                         la = LinkAnnotation()
                         la.subject = man_obj.uuid
                         la.subject_type = man_obj.item_type
                         la.project_uuid = man_obj.project_uuid
                         la.source_id = 'exp-table-manage'
                         la.predicate_uri = meta_pred
                         la.object_uri = URImanagement.make_oc_uri(s_author['uuid'], 'persons')
                         la.creator_uuid = '0'
                         la.sort = contrib_sort
                         la.obj_extra = obj_extra
                         la.save()
                 if meta_pred in ['dc-terms:creator',
                                  'dc-terms:source']:
                     # need to get projects for this
                     if proj_uuid_counts is None:
                         # only get this if not gotten yet
                         print('Getting projects for ' + table_id)
                         proj_uuid_counts = self.get_table_project_uuid_counts(table_id)
                     if meta_pred == 'dc-terms:creator':
                         print('Getting creators for ' + table_id)
                         dc_creator_list = self.make_table_dc_creator_list(proj_uuid_counts)
                         create_sort = 0
                         for dc_creator in dc_creator_list:
                             create_sort += 1
                             obj_extra = LastUpdatedOrderedDict()
                             obj_extra['count'] = dc_creator['count']
                             la = LinkAnnotation()
                             la.subject = man_obj.uuid
                             la.subject_type = man_obj.item_type
                             la.project_uuid = man_obj.project_uuid
                             la.source_id = 'exp-table-manage'
                             la.predicate_uri = meta_pred
                             la.object_uri = dc_creator['id']
                             la.creator_uuid = '0'
                             la.sort = create_sort
                             la.obj_extra = obj_extra
                             la.save()
                     if meta_pred == 'dc-terms:source':
                         print('Getting sources for ' + table_id)
                         proj_sort = 0
                         for proj_uuid_count in proj_uuid_counts:
                             proj_sort += 1
                             obj_extra = LastUpdatedOrderedDict()
                             obj_extra['count'] = proj_uuid_count['num_uuids']
                             la = LinkAnnotation()
                             la.subject = man_obj.uuid
                             la.subject_type = man_obj.item_type
                             la.project_uuid = man_obj.project_uuid
                             la.source_id = 'exp-table-manage'
                             la.predicate_uri = meta_pred
                             la.object_uri = URImanagement.make_oc_uri(proj_uuid_count['project_uuid'],
                                                                       'projects')
                             la.creator_uuid = '0'
                             la.sort = proj_sort
                             la.obj_extra = obj_extra
                             la.save()
                 if meta_pred == 'dc-terms:subject':
                     print('Getting subjects for ' + table_id)
                     dc_subject_list = self.make_table_dc_subject_category_list(table_id)
                     subj_sort = 0
                     for dc_subject in dc_subject_list:
                         subj_sort += 1
                         obj_extra = LastUpdatedOrderedDict()
                         obj_extra['count'] = dc_subject['count']
                         la = LinkAnnotation()
                         la.subject = man_obj.uuid
                         la.subject_type = man_obj.item_type
                         la.project_uuid = man_obj.project_uuid
                         la.source_id = 'exp-table-manage'
                         la.predicate_uri = meta_pred
                         la.object_uri = dc_subject['id']
                         la.creator_uuid = '0'
                         la.sort = subj_sort
                         la.obj_extra = obj_extra
                         la.save()
Пример #7
0
 def generate_table_metadata(self, table_id, overwrite=False):
     """ makes metadata for a specific table """
     ex_id = ExpTableIdentifiers()
     ex_id.make_all_identifiers(table_id)
     table_ids = [ex_id.table_id, ex_id.public_table_id]
     try:
         ex_tab = ExpTable.objects.get(table_id=table_id)
     except ExpTable.DoesNotExist:
         print('No ExpTable object for: ' + ex_id.public_table_id)
         ex_tab = None
     try:
         man_obj = Manifest.objects.get(uuid=ex_id.public_table_id)
     except Manifest.DoesNotExist:
         print('No manifest object for: ' + ex_id.public_table_id)
         man_obj = None
     if ex_tab is not None and man_obj is not None:
         proj_uuid_counts = None
         for meta_pred in self.metadata_predicates:
             if overwrite:
                 num_old_delete = LinkAnnotation.objects\
                                                .filter(subject__in=table_ids,
                                                        predicate_uri=meta_pred)\
                                                .delete()
                 print('Deleted annoations ' + str(num_old_delete) +
                       ' for ' + meta_pred)
                 add_meta_for_pred = True
             else:
                 num_exists = LinkAnnotation.objects\
                                            .filter(subject__in=table_ids,
                                                    predicate_uri=meta_pred)[:1]
                 if len(num_exists) < 1:
                     add_meta_for_pred = True
                 else:
                     add_meta_for_pred = False
             if add_meta_for_pred:
                 if meta_pred == 'dc-terms:contributor':
                     print('Getting contributors for ' + table_id)
                     sorted_author_list = self.get_table_author_counts(
                         table_id)
                     contrib_sort = 0
                     for s_author in sorted_author_list:
                         contrib_sort += 1
                         obj_extra = LastUpdatedOrderedDict()
                         obj_extra['count'] = s_author['count']
                         la = LinkAnnotation()
                         la.subject = man_obj.uuid
                         la.subject_type = man_obj.item_type
                         la.project_uuid = man_obj.project_uuid
                         la.source_id = 'exp-table-manage'
                         la.predicate_uri = meta_pred
                         la.object_uri = URImanagement.make_oc_uri(
                             s_author['uuid'], 'persons')
                         la.creator_uuid = '0'
                         la.sort = contrib_sort
                         la.obj_extra = obj_extra
                         la.save()
                 if meta_pred in ['dc-terms:creator', 'dc-terms:source']:
                     # need to get projects for this
                     if proj_uuid_counts is None:
                         # only get this if not gotten yet
                         print('Getting projects for ' + table_id)
                         proj_uuid_counts = self.get_table_project_uuid_counts(
                             table_id)
                     if meta_pred == 'dc-terms:creator':
                         print('Getting creators for ' + table_id)
                         dc_creator_list = self.make_table_dc_creator_list(
                             proj_uuid_counts)
                         create_sort = 0
                         for dc_creator in dc_creator_list:
                             create_sort += 1
                             obj_extra = LastUpdatedOrderedDict()
                             obj_extra['count'] = dc_creator['count']
                             la = LinkAnnotation()
                             la.subject = man_obj.uuid
                             la.subject_type = man_obj.item_type
                             la.project_uuid = man_obj.project_uuid
                             la.source_id = 'exp-table-manage'
                             la.predicate_uri = meta_pred
                             la.object_uri = dc_creator['id']
                             la.creator_uuid = '0'
                             la.sort = create_sort
                             la.obj_extra = obj_extra
                             la.save()
                     if meta_pred == 'dc-terms:source':
                         print('Getting sources for ' + table_id)
                         proj_sort = 0
                         for proj_uuid_count in proj_uuid_counts:
                             proj_sort += 1
                             obj_extra = LastUpdatedOrderedDict()
                             obj_extra['count'] = proj_uuid_count[
                                 'num_uuids']
                             la = LinkAnnotation()
                             la.subject = man_obj.uuid
                             la.subject_type = man_obj.item_type
                             la.project_uuid = man_obj.project_uuid
                             la.source_id = 'exp-table-manage'
                             la.predicate_uri = meta_pred
                             la.object_uri = URImanagement.make_oc_uri(
                                 proj_uuid_count['project_uuid'],
                                 'projects')
                             la.creator_uuid = '0'
                             la.sort = proj_sort
                             la.obj_extra = obj_extra
                             la.save()
                 if meta_pred == 'dc-terms:subject':
                     print('Getting subjects for ' + table_id)
                     dc_subject_list = self.make_table_dc_subject_category_list(
                         table_id)
                     subj_sort = 0
                     for dc_subject in dc_subject_list:
                         subj_sort += 1
                         obj_extra = LastUpdatedOrderedDict()
                         obj_extra['count'] = dc_subject['count']
                         la = LinkAnnotation()
                         la.subject = man_obj.uuid
                         la.subject_type = man_obj.item_type
                         la.project_uuid = man_obj.project_uuid
                         la.source_id = 'exp-table-manage'
                         la.predicate_uri = meta_pred
                         la.object_uri = dc_subject['id']
                         la.creator_uuid = '0'
                         la.sort = subj_sort
                         la.obj_extra = obj_extra
                         la.save()