diff --git a/anyway/flask_app.py b/anyway/flask_app.py index 6d7aae5e..2c6938d4 100755 --- a/anyway/flask_app.py +++ b/anyway/flask_app.py @@ -1285,10 +1285,10 @@ def infographics_data_by_location(): output = get_infographics_mock_data() elif mock_data == "false": request_params = get_request_params_from_request_values(request.values) - output = get_infographics_data_for_location(request_params) - if not output: + if request_params is None: log_bad_request(request) return abort(http_client.NOT_FOUND) + output = get_infographics_data_for_location(request_params) else: log_bad_request(request) return abort(http_client.BAD_REQUEST) diff --git a/anyway/request_params.py b/anyway/request_params.py index 2e35ca9f..d0abc456 100644 --- a/anyway/request_params.py +++ b/anyway/request_params.py @@ -78,67 +78,70 @@ def __eq__(self, other): # todo: merge with get_request_params() def get_request_params_from_request_values(vals: dict) -> Optional[RequestParams]: - news_flash_obj = extract_news_flash_obj(vals) - news_flash_description = ( - news_flash_obj.description - if news_flash_obj is not None and news_flash_obj.description is not None - else None - ) - news_flash_title = ( - news_flash_obj.title - if news_flash_obj is not None and news_flash_obj.title is not None - else None - ) - location = get_location_from_news_flash_or_request_values(news_flash_obj, vals) - if location is None: - return None - years_ago = vals.get("years_ago", BE_CONST.DEFAULT_NUMBER_OF_YEARS_AGO) - lang = vals.get("lang", "he") - location_text = location["text"] - gps = location["gps"] - location_info = location["data"] - - if location_info is None: - return None - resolution = location_info.pop("resolution") - if resolution is None or resolution not in BE_CONST.SUPPORTED_RESOLUTIONS: - logging.error(f"Resolution empty or not supported: {resolution}.") - return None - - if all(value is None for value in location_info.values()): - return None - try: - years_ago = int(years_ago) - except (ValueError, TypeError): - return None - if years_ago < 0 or years_ago > 100: + news_flash_obj = extract_news_flash_obj(vals) + news_flash_description = ( + news_flash_obj.description + if news_flash_obj is not None and news_flash_obj.description is not None + else None + ) + news_flash_title = ( + news_flash_obj.title + if news_flash_obj is not None and news_flash_obj.title is not None + else None + ) + location = get_location_from_news_flash_or_request_values(news_flash_obj, vals) + if location is None: + return None + years_ago = vals.get("years_ago", BE_CONST.DEFAULT_NUMBER_OF_YEARS_AGO) + lang = vals.get("lang", "he") + location_text = location["text"] + gps = location["gps"] + location_info = location["data"] + + if location_info is None: + return None + resolution = location_info.pop("resolution") + if resolution is None or resolution not in BE_CONST.SUPPORTED_RESOLUTIONS: + logging.error(f"Resolution empty or not supported: {resolution}.") + return None + + if all(value is None for value in location_info.values()): + return None + + try: + years_ago = int(years_ago) + except (ValueError, TypeError): + return None + if years_ago < 0 or years_ago > 100: + return None + last_accident_date = get_latest_accident_date(table_obj=AccidentMarkerView, filters=None) + # converting to datetime object to get the date + end_time = last_accident_date.to_pydatetime().date() + start_time = datetime.date(end_time.year + 1 - years_ago, 1, 1) + + widget_specific = {} + if resolution == BE_CONST.ResolutionCategories.SUBURBAN_ROAD: + widget_specific.update({"road_segment_name": location_info.get("road_segment_name")}) + + request_params = RequestParams( + years_ago=years_ago, + location_text=location_text, + location_info=location_info, + # TODO: getting a warning on resolution=resolution: "Expected type 'dict', got 'int' instead" + resolution=resolution, + gps=gps, + start_time=start_time, + end_time=end_time, + lang=lang, + news_flash_description=news_flash_description, + news_flash_title=news_flash_title, + widget_specific=widget_specific + ) + return request_params + except ValueError: + logging.exception(f"Exception while preparing request params. vals:{vals}.") return None - last_accident_date = get_latest_accident_date(table_obj=AccidentMarkerView, filters=None) - # converting to datetime object to get the date - end_time = last_accident_date.to_pydatetime().date() - start_time = datetime.date(end_time.year + 1 - years_ago, 1, 1) - - widget_specific = {} - if resolution == BE_CONST.ResolutionCategories.SUBURBAN_ROAD: - widget_specific.update({"road_segment_name": location_info.get("road_segment_name")}) - - request_params = RequestParams( - years_ago=years_ago, - location_text=location_text, - location_info=location_info, - # TODO: getting a warning on resolution=resolution: "Expected type 'dict', got 'int' instead" - resolution=resolution, - gps=gps, - start_time=start_time, - end_time=end_time, - lang=lang, - news_flash_description=news_flash_description, - news_flash_title=news_flash_title, - widget_specific=widget_specific - ) - return request_params - def get_location_from_news_flash_or_request_values( news_flash_obj: Optional[NewsFlash], vals: dict