Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Return 404 if building request params failed. #2746

Merged
merged 1 commit into from
Dec 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions anyway/flask_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
121 changes: 62 additions & 59 deletions anyway/request_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading