def accession_batches_list_count(request, acc_id): accession = get_object_or_404(Accession, id=int(acc_id)) # check permission on accession object perms = get_permissions_for(request.user, accession.content_type.app_label, accession.content_type.model, accession.pk) if 'accession.get_accession' not in perms: raise PermissionDenied( _('Invalid permission to access to this accession')) from main.cursor import CursorQuery cq = CursorQuery(Batch) if request.GET.get('search'): search = json.loads(request.GET['search']) cq.filter(search) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) cq.filter(accession=accession.id) count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_action_list_for_entity_id_count(request, ent_id): # @todo from main.cursor import CursorQuery cq = CursorQuery(ActionToEntity) # cq = ActionToEntity.objects.filter(entity_id=int(ent_id)) # @todo filter for action relating cq.inner_join(Action, related_name='id', to_related_name='action_id', entity=int(ent_id)) cq.filter(entity=int(ent_id)) if request.GET.get('search'): search = json.loads(request.GET['search']) cq.filter(search) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) # print(cq.sql()) count = cq.count() # cq.filter(input_batches__in=int(bat_id)) results = { 'count': count } return HttpResponseRest(request, results)
def get_count_classification_entry_related(request, cls_id): """ Return the list of related classification entries for the given classification entry. """ classification_entry = get_object_or_404(ClassificationEntry, id=int(cls_id)) from main.cursor import CursorQuery cq = CursorQuery(ClassificationEntry) cq.inner_join(ClassificationEntry, related_name='related', to_related_name='to_classificationentry', from_classificationentry=classification_entry.pk) if request.GET.get('search'): cq.filter(json.loads(request.GET['search'])) if request.GET.get('filters'): cq.filter(json.loads(request.GET['filters'])) count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_accession_list_count(request): from main.cursor import CursorQuery cq = CursorQuery(Accession) if request.GET.get('search'): search = json.loads(request.GET['search']) cq.filter(search) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) cq.m2m_to_array_field(relationship=AccessionPanel.accessions, selected_field='accessionpanel_id', from_related_field='id', to_related_field='accession_id', alias='panels') cq.m2m_to_array_field(relationship=Accession.classifications_entries, selected_field='classification_entry_id', from_related_field='id', to_related_field='accession_id', alias='classifications') cq.set_synonym_model(AccessionSynonym) count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_classification_entry_children_list_count(request, cls_id): """ Return the count of direct children for the given classification entry. """ classification_entry = get_object_or_404(ClassificationEntry, id=int(cls_id)) from main.cursor import CursorQuery cq = CursorQuery(ClassificationEntry) cq.set_synonym_model(ClassificationEntrySynonym) # if only children if request.GET.get('deeply', False): cq.filter(parent_list__in=[classification_entry.id]) else: cq.filter(parent=classification_entry.id) if request.GET.get('filters'): cq.filter(json.loads(request.GET['filters'])) count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_panel_list_count(request): from main.cursor import CursorQuery cq = CursorQuery(AccessionPanel) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_panel_batch_list_count(request, panel_id): from main.cursor import CursorQuery cq = CursorQuery(Batch) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) cq.inner_join(BatchPanel, batchpanel=int(panel_id)) results = {'count': cq.count()} return HttpResponseRest(request, results)
def get_groups_list_count(request): cq = CursorQuery(Group) if request.GET.get('search'): search = json.loads(request.GET['search']) cq.filter(search) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) results = {'perms': [], 'count': cq.count()} return HttpResponseRest(request, results)
def count_accession_panels(request, acc_id): accession = Accession.objects.get(id=int(acc_id)) panels = list(accession.panels.all().values_list('id', flat=True)) from main.cursor import CursorQuery cq = CursorQuery(AccessionPanel) cq.filter(id__in=panels) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) results = {'count': cq.count()} return HttpResponseRest(request, results)
def get_count_organisation_list(request): """ Count organisations. """ cq = CursorQuery(Organisation) if request.GET.get('search'): cq.filter(json.loads(request.GET['search'])) if request.GET.get('filters'): cq.filter(json.loads(request.GET['filters'])) results = {'perms': [], 'count': cq.count()} return HttpResponseRest(request, results)
def get_descriptor_list_count(request): """ Get the count of number of descriptors in JSON """ cq = CursorQuery(Descriptor) if request.GET.get('filters'): cq.filter(json.loads(request.GET['filters'])) if request.GET.get('search'): cq.filter(json.loads(request.GET['search'])) results = {'perms': [], 'count': cq.count()} return HttpResponseRest(request, results)
def get_action_type_list_count(request): from main.cursor import CursorQuery cq = CursorQuery(ActionType) if request.GET.get('search'): search = json.loads(request.GET['search']) cq.filter(search) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_classification_id_list_count(request, cls_id): from main.cursor import CursorQuery cq = CursorQuery(ClassificationEntry) cq.set_synonym_model(ClassificationEntrySynonym) cq.filter(rank__classification=int_arg(cls_id)) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) cq.select_related('rank->classification') count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_classification_list_count(request): from main.cursor import CursorQuery cq = CursorQuery(ClassificationEntry) cq.set_synonym_model(ClassificationEntrySynonym) if request.GET.get('search'): search = json.loads(request.GET['search']) cq.filter(search) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def get_count_establishment_list_for_organisation(request, org_id): """ Count establishment for an organisation. """ cq = CursorQuery(Establishment) cq.filter(organisation=int(org_id)) if request.GET.get('search'): cq.filter(json.loads(request.GET['search'])) if request.GET.get('filters'): cq.filter(json.loads(request.GET['filters'])) results = { 'perms': [], 'count': cq.count() } return HttpResponseRest(request, results)
def get_batch_list_count(request): from main.cursor import CursorQuery cq = CursorQuery(Batch) if request.GET.get('search'): search = json.loads(request.GET['search']) cq.filter(search) if request.GET.get('filters'): filters = json.loads(request.GET['filters']) cq.filter(filters) cq.m2m_to_array_field(relationship=BatchPanel.batches, selected_field='batchpanel_id', from_related_field='id', to_related_field='batch_id', alias='panels') count = cq.count() results = {'count': count} return HttpResponseRest(request, results)
def create_panel(request): name = request.data['name'] selection = request.data['selection']['select'] related_entity = request.data['selection']['from'] search = request.data['selection']['search'] filters = request.data['selection']['filters'] layout_id = request.data['layout'] descriptors = request.data['descriptors'] layout = None # check uniqueness of the name if AccessionPanel.objects.filter(name=name).exists(): raise SuspiciousOperation(_("The name of the panel is already used")) if layout_id is not None: content_type = get_object_or_404(ContentType, app_label="accession", model="accessionpanel") layout = get_object_or_404(Layout, id=int_arg(layout_id), target=content_type) from main.cursor import CursorQuery cq = CursorQuery(Accession) if search: cq.filter(search) if filters: cq.filter(filters) cq.m2m_to_array_field(relationship=AccessionPanel.accessions, selected_field='accessionpanel_id', from_related_field='id', to_related_field='accession_id', alias='panels') cq.m2m_to_array_field(relationship=Accession.classifications_entries, selected_field='classification_entry_id', from_related_field='id', to_related_field='accession_id', alias='classifications') cq.set_synonym_model(AccessionSynonym) if related_entity: label, model = related_entity['content_type'].split('.') content_type = get_object_or_404(ContentType, app_label=label, model=model) model_class = content_type.model_class() cq.inner_join(model_class, **{model: int_arg(related_entity['id'])}) try: with transaction.atomic(): acc_panel = AccessionPanel(name=name) acc_panel.layout = layout acc_panel.count = 0 # descriptors descriptors_builder = DescriptorsBuilder(acc_panel) if layout: descriptors_builder.check_and_update(layout, descriptors) acc_panel.descriptors = descriptors_builder.descriptors acc_panel.save() # update owner on external descriptors descriptors_builder.update_associations() if isinstance(selection, bool): if selection is True: acc_panel.accessions.add(*cq) acc_panel.count = cq.count() elif selection['op'] == 'in': acc_panel.accessions.add(*cq.filter(id__in=selection['value'])) acc_panel.count = cq.filter(id__in=selection['value']).count() elif selection['op'] == 'notin': acc_panel.accessions.add(*cq.filter( id__notin=selection['value'])) acc_panel.count = cq.filter( id__notin=selection['value']).count() except IntegrityError as e: Descriptor.integrity_except(AccessionPanel, e) response = { 'id': acc_panel.pk, 'name': acc_panel.name, 'layout': acc_panel.layout.pk if acc_panel.layout else None, 'descriptors': acc_panel.descriptors, 'accessions_amount': acc_panel.count } return HttpResponseRest(request, response)