예제 #1
0
def get_incidents(
        db_session: Session = Depends(get_db),
        page: int = 1,
        items_per_page: int = Query(5, alias="itemsPerPage"),
        query_str: str = Query(None, alias="q"),
        filter_spec: str = Query(None, alias="filter"),
        sort_by: List[str] = Query([], alias="sortBy[]"),
        descending: List[bool] = Query([], alias="descending[]"),
        fields: List[str] = Query([], alias="fields[]"),
        ops: List[str] = Query([], alias="ops[]"),
        values: List[str] = Query([], alias="values[]"),
        current_user: DispatchUser = Depends(get_current_user),
        include: List[str] = Query([], alias="include[]"),
):
    """
    Retrieve a list of all incidents.
    """
    if filter_spec:
        filter_spec = json.loads(filter_spec)

    pagination = search_filter_sort_paginate(
        db_session=db_session,
        model="Incident",
        query_str=query_str,
        filter_spec=filter_spec,
        page=page,
        items_per_page=items_per_page,
        sort_by=sort_by,
        descending=descending,
        fields=fields,
        values=values,
        ops=ops,
        join_attrs=[
            ("tag", "tags"),
        ],
        user_role=current_user.role,
        user_email=current_user.email,
    )

    if include:
        # only allow two levels for now
        include_sets = create_pydantic_include(include)

        include_fields = {
            "items": {
                "__all__": include_sets
            },
            "itemsPerPage":...,
            "page":...,
            "total":...,
        }
        return IncidentPagination(**pagination).dict(include=include_fields)
    return IncidentPagination(**pagination).dict()
예제 #2
0
def get_tasks(
        db_session: Session = Depends(get_db),
        page: int = 1,
        items_per_page: int = Query(5, alias="itemsPerPage"),
        query_str: str = Query(None, alias="q"),
        sort_by: List[str] = Query([], alias="sortBy[]"),
        descending: List[bool] = Query([], alias="descending[]"),
        fields: List[str] = Query([], alias="fields[]"),
        ops: List[str] = Query([], alias="ops[]"),
        values: List[str] = Query([], alias="values[]"),
        include: List[str] = Query([], alias="include[]"),
):
    """
    Retrieve all tasks.
    """
    pagination = search_filter_sort_paginate(
        db_session=db_session,
        model="Task",
        query_str=query_str,
        page=page,
        items_per_page=items_per_page,
        sort_by=sort_by,
        descending=descending,
        fields=fields,
        values=values,
        ops=ops,
        join_attrs=[
            ("incident", "incident"),
            ("incident_type", "incident"),
            ("incident_priority", "incident"),
            ("tags", "tag"),
            ("creator", "creator"),
            ("owner", "owner"),
        ],
    )

    if include:
        # only allow two levels for now
        include_sets = create_pydantic_include(include)

        include_fields = {
            "items": {
                "__all__": include_sets
            },
            "itemsPerPage":...,
            "page":...,
            "total":...,
        }

        return TaskPagination(**pagination).dict(include=include_fields)
    return TaskPagination(**pagination).dict()
예제 #3
0
def get_incidents(
    *,
    common: dict = Depends(common_parameters),
    include: List[str] = Query([], alias="include[]"),
):
    """Retrieve a list of all incidents."""
    pagination = search_filter_sort_paginate(model="Incident", **common)

    if include:
        # only allow two levels for now
        include_sets = create_pydantic_include(include)

        include_fields = {
            "items": {"__all__": include_sets},
            "itemsPerPage": ...,
            "page": ...,
            "total": ...,
        }
        return json.loads(IncidentPagination(**pagination).json(include=include_fields))
    return json.loads(IncidentPagination(**pagination).json())
예제 #4
0
def get_tasks(
    *, include: List[str] = Query([], alias="include[]"), commons: dict = Depends(common_parameters)
):
    """
    Retrieve all tasks.
    """
    pagination = search_filter_sort_paginate(model="Task", **commons)

    if include:
        # only allow two levels for now
        include_sets = create_pydantic_include(include)

        include_fields = {
            "items": {"__all__": include_sets},
            "itemsPerPage": ...,
            "page": ...,
            "total": ...,
        }

        return TaskPagination(**pagination).dict(include=include_fields)
    return TaskPagination(**pagination).dict()