def get_related_mappings_with_version_information(self, cascade_mappings_flag, references): related_mappings = [] for reference in references: if CollectionReferenceUtils.is_concept(reference): concept_id = CollectionReferenceUtils.get_concept_id_by_version_information(reference) related_mappings += Concept.objects.get(id=concept_id).get_unidirectional_mappings() return self.get_version_information_of_related_mappings(related_mappings)
def add_references(self, SerializerClass, user, data, collection, host_url, cascade_mappings=False): from concepts.models import Concept from mappings.models import Mapping from concepts.views import ConceptVersionListView from mappings.views import MappingListView from collection.models import CollectionReferenceUtils collection.get_head().add_processing(self.request.id) expressions = data.get('expressions', []) concept_expressions = data.get('concepts', []) mapping_expressions = data.get('mappings', []) uri = data.get('uri') search_term = data.get('search_term', '') if concept_expressions == '*': url = host_url + uri + 'concepts?q=' + search_term + '&limit=0' view = ConceptVersionListView.as_view() request = APIRequestFactory().get(url) response = view(request) response.render() concepts_dict = json.loads(response.content) concept_uris = [c['url'] for c in concepts_dict] concepts = Concept.objects.filter(uri__in=concept_uris) expressions.extend(map(lambda c: c.uri, concepts)) else: expressions.extend(concept_expressions) if mapping_expressions == '*': url = host_url + uri + 'mappings?q=' + search_term + '&limit=0' view = MappingListView.as_view() request = APIRequestFactory().get(url) response = view(request) response.render() mappings_dict = json.loads(response.content) mapping_uris = [c['url'] for c in mappings_dict] mappings = Mapping.objects.filter(uri__in=mapping_uris) expressions.extend(map(lambda m: m.uri, mappings)) else: expressions.extend(mapping_expressions) expressions = set(expressions) if cascade_mappings: all_related_mappings = CollectionReferenceUtils.get_all_related_mappings(expressions, collection) expressions = expressions.union(all_related_mappings) added_references, errors = collection.add_references_in_bulk(expressions) update_collection_in_solr.delay( collection.get_head().id, added_references ) collection.get_head().remove_processing(self.request.id) return added_references, errors
def add_references(SerializerClass, user, data, parent_resource, host_url, cascade_mappings=False): expressions = data.get('expressions', []) concept_expressions = data.get('concepts', []) mapping_expressions = data.get('mappings', []) uri = data.get('uri') search_term = data.get('search_term', '') if '*' in [concept_expressions, mapping_expressions]: ResourceContainer = SourceVersion if uri.split( '/')[3] == 'sources' else CollectionVersion if concept_expressions == '*': url = host_url + uri + 'concepts?q=' + search_term + '&limit=0' view = ConceptVersionListView.as_view() request = APIRequestFactory().get(url) response = view(request) response.render() concepts_dict = json.loads(response.content) concept_uris = [c['url'] for c in concepts_dict] concepts = Concept.objects.filter(uri__in=concept_uris) expressions.extend(map(lambda c: c.uri, concepts)) else: expressions.extend(concept_expressions) if mapping_expressions == '*': url = host_url + uri + 'mappings?q=' + search_term + '&limit=0' view = MappingListView.as_view() request = APIRequestFactory().get(url) response = view(request) response.render() mappings_dict = json.loads(response.content) mapping_uris = [c['url'] for c in mappings_dict] mappings = Mapping.objects.filter(uri__in=mapping_uris) expressions.extend(map(lambda m: m.uri, mappings)) else: expressions.extend(mapping_expressions) expressions = set(expressions) if cascade_mappings: all_related_mappings = CollectionReferenceUtils.get_all_related_mappings( expressions, parent_resource) expressions = expressions.union(set(all_related_mappings)) prev_refs = parent_resource.references save_kwargs = { 'force_update': True, 'expressions': expressions, 'user': user } serializer = SerializerClass(parent_resource, partial=True) serializer.save(**save_kwargs) update_collection_in_solr.delay( serializer.object.get_head().id, CollectionReference.diff(serializer.object.references, prev_refs)) if 'references' in serializer.errors: serializer.object.save() diff = map( lambda ref: ref, CollectionReference.diff(serializer.object.references, prev_refs)) errors = serializer.errors.get('references', []) return diff, errors
def add_references(SerializerClass, user, data, parent_resource, host_url, cascade_mappings=False): from concepts.models import Concept from mappings.models import Mapping from collection.models import CollectionVersion from sources.models import SourceVersion from concepts.views import ConceptVersionListView from mappings.views import MappingListView from collection.models import CollectionReferenceUtils from collection.models import CollectionReference expressions = data.get('expressions', []) concept_expressions = data.get('concepts', []) mapping_expressions = data.get('mappings', []) uri = data.get('uri') search_term = data.get('search_term', '') if '*' in [concept_expressions, mapping_expressions]: ResourceContainer = SourceVersion if uri.split('/')[3] == 'sources' else CollectionVersion if concept_expressions == '*': url = host_url + uri + 'concepts?q=' + search_term + '&limit=0' view = ConceptVersionListView.as_view() request = APIRequestFactory().get(url) response = view(request) response.render() concepts_dict = json.loads(response.content) concept_uris = [c['url'] for c in concepts_dict] concepts = Concept.objects.filter(uri__in=concept_uris) expressions.extend(map(lambda c: c.uri, concepts)) else: expressions.extend(concept_expressions) if mapping_expressions == '*': url = host_url + uri + 'mappings?q=' + search_term + '&limit=0' view = MappingListView.as_view() request = APIRequestFactory().get(url) response = view(request) response.render() mappings_dict = json.loads(response.content) mapping_uris = [c['url'] for c in mappings_dict] mappings = Mapping.objects.filter(uri__in=mapping_uris) expressions.extend(map(lambda m: m.uri, mappings)) else: expressions.extend(mapping_expressions) expressions = set(expressions) if cascade_mappings: all_related_mappings = CollectionReferenceUtils.get_all_related_mappings(expressions, parent_resource) expressions = expressions.union(set(all_related_mappings)) prev_refs = parent_resource.references save_kwargs = { 'force_update': True, 'expressions': expressions, 'user': user } serializer = SerializerClass(parent_resource, partial=True) serializer.save(**save_kwargs) update_collection_in_solr.delay( serializer.object.get_head().id, CollectionReference.diff(serializer.object.references, prev_refs) ) if 'references' in serializer.errors: serializer.object.save() diff = map(lambda ref: ref, CollectionReference.diff(serializer.object.references, prev_refs)) errors = serializer.errors.get('references', []) return diff, errors