Skip to content

Commit

Permalink
Merge pull request #2746 from ziv17/2736-bad-location
Browse files Browse the repository at this point in the history
Return 404 if building request params failed.
  • Loading branch information
atalyaalon authored Dec 20, 2024
2 parents dbe68e8 + 7c5f622 commit 9f277f3
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 61 deletions.
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

0 comments on commit 9f277f3

Please sign in to comment.