def post(self, request): models = [ {'name': 'fields', 'key': 'fields', 'type': 'array', 'array_type': 'text', 'text_type': 'search'}, ] models.extend(AWARD_FILTER) models.extend(PAGINATION) for m in models: if m['name'] in ('keyword', 'award_type_codes', 'sort'): m['optional'] = False validated_payload = TinyShield(models).block(request.data) if validated_payload['sort'] not in validated_payload['fields']: raise InvalidParameterException("Sort value not found in fields: {}".format(validated_payload['sort'])) lower_limit = (validated_payload['page'] - 1) * validated_payload['limit'] success, response, total = search_transactions(validated_payload, lower_limit, validated_payload['limit'] + 1) if not success: raise InvalidParameterException(response) metadata = get_simple_pagination_metadata(len(response), validated_payload['limit'], validated_payload['page']) results = [] for transaction in response[:validated_payload['limit']]: results.append(transaction) response = { 'limit': validated_payload['limit'], 'results': results, 'page_metadata': metadata } return Response(response)
def post(self, request): models = [ { 'name': 'fields', 'key': 'fields', 'type': 'array', 'array_type': 'text', 'text_type': 'search', 'optional': False }, ] models.extend(copy.deepcopy(AWARD_FILTER)) models.extend(copy.deepcopy(PAGINATION)) for m in models: if m['name'] in ('keywords', 'award_type_codes', 'sort'): m['optional'] = False validated_payload = TinyShield(models).block(request.data) if validated_payload['sort'] not in validated_payload['fields']: raise InvalidParameterException( "Sort value not found in fields: {}".format( validated_payload['sort'])) if "filters" in validated_payload and "no intersection" in validated_payload[ "filters"]["award_type_codes"]: # "Special case": there will never be results when the website provides this value return Response({ "limit": validated_payload["limit"], "results": [], "page_metadata": { "page": validated_payload["page"], "next": None, "previous": None, "hasNext": False, "hasPrevious": False, }, }) lower_limit = (validated_payload['page'] - 1) * validated_payload['limit'] success, response, total = search_transactions( validated_payload, lower_limit, validated_payload['limit'] + 1) if not success: raise InvalidParameterException(response) metadata = get_simple_pagination_metadata(len(response), validated_payload['limit'], validated_payload['page']) results = [] for transaction in response[:validated_payload['limit']]: results.append(transaction) response = { 'limit': validated_payload['limit'], 'results': results, 'page_metadata': metadata } return Response(response)
def post(self, request): models = [{ "name": "fields", "key": "fields", "type": "array", "array_type": "text", "text_type": "search", "optional": False, }] models.extend(copy.deepcopy(AWARD_FILTER)) models.extend(copy.deepcopy(PAGINATION)) for m in models: if m["name"] in ("keywords", "award_type_codes", "sort"): m["optional"] = False validated_payload = TinyShield(models).block(request.data) if validated_payload["sort"] not in validated_payload["fields"]: raise InvalidParameterException( "Sort value not found in fields: {}".format( validated_payload["sort"])) if "filters" in validated_payload and "no intersection" in validated_payload[ "filters"]["award_type_codes"]: # "Special case": there will never be results when the website provides this value return Response({ "limit": validated_payload["limit"], "results": [], "page_metadata": { "page": validated_payload["page"], "next": None, "previous": None, "hasNext": False, "hasPrevious": False, }, }) lower_limit = (validated_payload["page"] - 1) * validated_payload["limit"] success, response, total = search_transactions( validated_payload, lower_limit, validated_payload["limit"] + 1) if not success: raise InvalidParameterException(response) metadata = get_simple_pagination_metadata(len(response), validated_payload["limit"], validated_payload["page"]) results = [] for transaction in response[:validated_payload["limit"]]: results.append(transaction) response = { "limit": validated_payload["limit"], "results": results, "page_metadata": metadata } return Response(response)