Ejemplo n.º 1
0
def get_prepare_params(request, project):
    """ This function extract prepare_params from
        * view_id if it's inside of request data
        * selectedItems, filters, ordering if they are in request and there is no view id
    """
    # use filters and selected items from view
    view_id = int_from_request(request.GET, 'view', 0) or int_from_request(request.data, 'view', 0)
    if view_id > 0:
        view = get_object_or_404(View, pk=view_id)
        if view.project.pk != project.pk:
            raise DataManagerException('Project and View mismatch')
        prepare_params = view.get_prepare_tasks_params(add_selected_items=True)

    # use filters and selected items from request if it's specified
    else:
        # query arguments from url
        if 'query' in request.GET:
            data = json.loads(unquote(request.GET['query']))
        # data payload from body
        else:
            data = request.data

        selected = data.get('selectedItems', {"all": True, "excluded": []})
        if not isinstance(selected, dict):
            raise DataManagerException('selectedItems must be dict: {"all": [true|false], '
                                       '"excluded | included": [...task_ids...]}')
        filters = data.get('filters', None)
        ordering = data.get('ordering', [])
        prepare_params = PrepareParams(project=project.id, selectedItems=selected, data=data,
                                       filters=filters, ordering=ordering)
    return prepare_params
Ejemplo n.º 2
0
    def get_prepare_tasks_params(self, add_selected_items=False):
        # convert filters to PrepareParams structure
        filters = None
        if self.filter_group:
            items = []
            for f in self.filter_group.filters.all():
                items.append(
                    dict(
                        filter=f.column,
                        operator=f.operator,
                        type=f.type,
                        value=f.value,
                    ))
            filters = dict(conjunction=self.filter_group.conjunction,
                           items=items)

        ordering = self.ordering
        if not ordering:
            ordering = []  # default empty json field is dict, but we need list

        selected_items = None
        if add_selected_items and self.selected_items:
            selected_items = self.selected_items

        return PrepareParams(project=self.project_id,
                             ordering=ordering,
                             filters=filters,
                             selectedItems=selected_items)
Ejemplo n.º 3
0
def get_prepared_queryset(request, project):
    # use filters and selected items from view
    view_id = int_from_request(request.GET, 'view_id', 0)
    if view_id > 0:
        view = get_object_or_404(request, View, pk=view_id)
        if view.project.pk != project.pk:
            raise DataManagerException('Project and View mismatch')
        prepare_params = view.get_prepare_tasks_params(add_selected_items=True)

    # use filters and selected items from request if it's specified
    else:
        selected = request.data.get('selectedItems', {
            "all": True,
            "excluded": []
        })
        if not isinstance(selected, dict):
            raise DataManagerException(
                'selectedItems must be dict: {"all": [true|false], '
                '"excluded | included": [...task_ids...]}')
        filters = request.data.get('filters', None)
        ordering = request.data.get('ordering', [])
        prepare_params = PrepareParams(project=project.id,
                                       selectedItems=selected,
                                       filters=filters,
                                       ordering=ordering)

    queryset = Task.prepared.all(prepare_params=prepare_params)
    return queryset