Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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)