From 8a0d9be718637205c4cd57241b62e74d9af4b08e Mon Sep 17 00:00:00 2001 From: Kevin Glisson Date: Thu, 2 Feb 2023 12:41:29 -0800 Subject: [PATCH 1/2] Adds a query param that expands incident pagination to return the fully populated object --- src/dispatch/incident/models.py | 7 +++++ src/dispatch/incident/views.py | 27 ++++++++++++------- .../static/dispatch/src/incident/api.js | 2 +- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/dispatch/incident/models.py b/src/dispatch/incident/models.py index 50290fd00d4e..c7057fb5e064 100644 --- a/src/dispatch/incident/models.py +++ b/src/dispatch/incident/models.py @@ -361,6 +361,13 @@ class IncidentRead(IncidentBase): workflow_instances: Optional[List[WorkflowInstanceRead]] = [] +class IncidentExpandedPagination(DispatchBase): + total: int + itemsPerPage: int + page: int + items: List[IncidentRead] = [] + + class IncidentPagination(DispatchBase): total: int itemsPerPage: int diff --git a/src/dispatch/incident/views.py b/src/dispatch/incident/views.py index b54da5cb17a3..46f53695d883 100644 --- a/src/dispatch/incident/views.py +++ b/src/dispatch/incident/views.py @@ -1,23 +1,21 @@ import calendar import json import logging - from datetime import date -from dateutil.relativedelta import relativedelta from typing import List -from starlette.requests import Request +from dateutil.relativedelta import relativedelta from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Query, status - from sqlalchemy.orm import Session +from starlette.requests import Request +from dispatch.auth.models import DispatchUser from dispatch.auth.permissions import ( IncidentEditPermission, IncidentJoinOrSubscribePermission, IncidentViewPermission, PermissionsDependency, ) -from dispatch.auth.models import DispatchUser from dispatch.auth.service import get_current_user from dispatch.common.utils.views import create_pydantic_include from dispatch.database.core import get_db @@ -27,7 +25,7 @@ from dispatch.models import OrganizationSlug, PrimaryKey from dispatch.participant.models import ParticipantUpdate from dispatch.report import flows as report_flows -from dispatch.report.models import TacticalReportCreate, ExecutiveReportCreate +from dispatch.report.models import ExecutiveReportCreate, TacticalReportCreate from .flows import ( incident_add_or_reactivate_participant_flow, @@ -37,11 +35,17 @@ incident_create_stable_flow, incident_update_flow, ) -from .metrics import make_forecast, create_incident_metric_query -from .models import Incident, IncidentCreate, IncidentPagination, IncidentRead, IncidentUpdate +from .metrics import create_incident_metric_query, make_forecast +from .models import ( + Incident, + IncidentCreate, + IncidentExpandedPagination, + IncidentPagination, + IncidentRead, + IncidentUpdate, +) from .service import create, delete, get, update - log = logging.getLogger(__name__) router = APIRouter() @@ -63,10 +67,15 @@ def get_incidents( *, common: dict = Depends(common_parameters), include: List[str] = Query([], alias="include[]"), + expand: bool = Query(default=False), ): """Retrieves a list of incidents.""" + print(expand) pagination = search_filter_sort_paginate(model="Incident", **common) + if expand: + return json.loads(IncidentExpandedPagination(**pagination).json()) + if include: # only allow two levels for now include_sets = create_pydantic_include(include) diff --git a/src/dispatch/static/dispatch/src/incident/api.js b/src/dispatch/static/dispatch/src/incident/api.js index eefb311c8392..c787d7e15e0d 100644 --- a/src/dispatch/static/dispatch/src/incident/api.js +++ b/src/dispatch/static/dispatch/src/incident/api.js @@ -5,7 +5,7 @@ const resource = "incidents" export default { getAll(options) { return API.get(`/${resource}`, { - params: { ...options }, + params: { ...options, expand: true }, }) }, From 4954cb970fd2c91ab6f1d15182541fe216762f3f Mon Sep 17 00:00:00 2001 From: Kevin Glisson Date: Thu, 2 Feb 2023 12:42:11 -0800 Subject: [PATCH 2/2] Remove default api call --- src/dispatch/static/dispatch/src/incident/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dispatch/static/dispatch/src/incident/api.js b/src/dispatch/static/dispatch/src/incident/api.js index c787d7e15e0d..eefb311c8392 100644 --- a/src/dispatch/static/dispatch/src/incident/api.js +++ b/src/dispatch/static/dispatch/src/incident/api.js @@ -5,7 +5,7 @@ const resource = "incidents" export default { getAll(options) { return API.get(`/${resource}`, { - params: { ...options, expand: true }, + params: { ...options }, }) },