def post(self, request):
        self.original_filters = request.data.get("filters")
        self.json_request = self.validate_api_request(request.data)
        self.filters = self.json_request.get("filters", None)

        if self.filters is None:
            raise InvalidParameterException(
                "Missing request parameters: filters")

        queryset, values = self.database_data_layer()

        results = bolster_missing_time_periods(
            filter_time_periods=self.filters["time_period"],
            queryset=queryset,
            date_range_type=values[-1],
            columns={"new_award_count_in_period": "count"},
        )
        response = {
            "group":
            self.groupings[self.json_request["group"]],
            "results":
            results,
            "messages":
            get_generic_filters_message(self.original_filters.keys(),
                                        {"time_period", "recipient_id"}),
        }
        return Response(response)
Esempio n. 2
0
    def post(self, request):
        json_request = self.validate_request_data(request.data)
        self.group = json_request["group"]
        self.subawards = json_request["subawards"]
        self.filters = json_request["filters"]

        db_results, values = self.database_data_layer()

        # time_period is optional so we're setting a default window from API_SEARCH_MIN_DATE to end of the current FY.
        # Otherwise, users will see blank results for years
        current_fy = generate_fiscal_year(datetime.now(timezone.utc))
        if self.groupings[self.group] == "fiscal_year":
            end_date = "{}-09-30".format(current_fy)
        else:
            end_date = "{}-{}-30".format(current_fy,
                                         datetime.now(timezone.utc).month)

        default_time_period = {
            "start_date": settings.API_SEARCH_MIN_DATE,
            "end_date": end_date
        }
        time_periods = self.filters.get("time_period", [default_time_period])

        results = bolster_missing_time_periods(
            filter_time_periods=time_periods,
            queryset=db_results,
            date_range_type=values[-1],
            columns={"aggregated_amount": "aggregated_amount"},
        )

        return Response({
            "group": self.groupings[self.group],
            "results": results
        })
    def post(self, request):
        json_request = self.validate_request_data(request.data)
        self.group = json_request["group"]
        self.subawards = json_request["subawards"]
        self.filters = json_request["filters"]

        db_results, values = self.database_data_layer()

        # time_period is optional so we're setting a default window from API_SEARCH_MIN_DATE to end of the current FY.
        # Otherwise, users will see blank results for years
        current_fy = generate_fiscal_year(datetime.now(timezone.utc))
        if self.groupings[self.group] == "fiscal_year":
            end_date = "{}-09-30".format(current_fy)
        else:
            end_date = "{}-{}-30".format(current_fy, datetime.now(timezone.utc).month)

        default_time_period = {"start_date": settings.API_SEARCH_MIN_DATE, "end_date": end_date}
        time_periods = self.filters.get("time_period", [default_time_period])

        results = bolster_missing_time_periods(
            filter_time_periods=time_periods,
            queryset=db_results,
            date_range_type=values[-1],
            columns={"aggregated_amount": "aggregated_amount"},
        )

        return Response({"group": self.groupings[self.group], "results": results})
Esempio n. 4
0
    def post(self, request: Request) -> Response:
        self.original_filters = request.data.get("filters")
        json_request = self.validate_request_data(request.data)
        self.group = GROUPING_LOOKUP[json_request["group"]]
        self.subawards = json_request["subawards"]
        self.filters = json_request["filters"]
        self.elasticsearch = is_experimental_elasticsearch_api(request)
        if not self.elasticsearch:
            mirror_request_to_elasticsearch(request)

        # time_period is optional so we're setting a default window from API_SEARCH_MIN_DATE to end of the current FY.
        # Otherwise, users will see blank results for years
        current_fy = generate_fiscal_year(datetime.now(timezone.utc))
        if self.group == "fiscal_year":
            end_date = "{}-09-30".format(current_fy)
        else:
            current_fiscal_month = generate_fiscal_month(
                datetime.now(timezone.utc))
            days_in_month = monthrange(current_fy, current_fiscal_month)[1]
            end_date = f"{current_fy}-{current_fiscal_month}-{days_in_month}"

        default_time_period = {
            "start_date": settings.API_SEARCH_MIN_DATE,
            "end_date": end_date
        }
        time_periods = self.filters.get("time_period", [default_time_period])

        if self.elasticsearch and not self.subawards:
            logger.info(
                "Using experimental Elasticsearch functionality for 'spending_over_time'"
            )
            results = self.query_elasticsearch(time_periods)
        else:
            db_results, values = self.database_data_layer()
            results = bolster_missing_time_periods(
                filter_time_periods=time_periods,
                queryset=db_results,
                date_range_type=values[-1],
                columns={"aggregated_amount": "aggregated_amount"},
            )

        return Response(
            OrderedDict([
                ("group", self.group),
                ("results", results),
                (
                    "messages",
                    get_generic_filters_message(
                        self.original_filters.keys(),
                        [elem["name"] for elem in AWARD_FILTER]),
                ),
            ]))
    def post(self, request):
        self.json_request = self.validate_api_request(request.data)
        self.filters = self.json_request.get('filters', None)

        if self.filters is None:
            raise InvalidParameterException('Missing request parameters: filters')

        queryset, values = self.database_data_layer()

        results = bolster_missing_time_periods(
            filter_time_periods=self.filters['time_period'],
            queryset=queryset,
            date_range_type=values[-1],
            columns={'new_award_count_in_period': 'count'})
        return Response({'group': self.groupings[self.json_request['group']], 'results': results})
    def post(self, request):
        self.json_request = self.validate_api_request(request.data)
        self.filters = self.json_request.get("filters", None)

        if self.filters is None:
            raise InvalidParameterException("Missing request parameters: filters")

        queryset, values = self.database_data_layer()

        results = bolster_missing_time_periods(
            filter_time_periods=self.filters["time_period"],
            queryset=queryset,
            date_range_type=values[-1],
            columns={"new_award_count_in_period": "count"},
        )
        return Response({"group": self.groupings[self.json_request["group"]], "results": results})
Esempio n. 7
0
    def post(self, request):
        self.json_request = self.validate_api_request(request.data)
        self.filters = self.json_request.get('filters', None)

        if self.filters is None:
            raise InvalidParameterException(
                'Missing request parameters: filters')

        queryset, values = self.database_data_layer()

        results = bolster_missing_time_periods(
            filter_time_periods=self.filters['time_period'],
            queryset=queryset,
            date_range_type=values[-1],
            columns={'new_award_count_in_period': 'count'})
        return Response({
            'group': self.groupings[self.json_request['group']],
            'results': results
        })