Skip to content

Commit

Permalink
Merge branch 'feat-2532-ChangeRoadSegmentWidgetsToAllLocations' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
EliorGigi committed Jan 12, 2024
2 parents 30003a4 + 3c40ebe commit 34e63fe
Show file tree
Hide file tree
Showing 11 changed files with 108 additions and 80 deletions.
5 changes: 5 additions & 0 deletions anyway/widgets/all_locations_widgets/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
from . import (
accident_count_by_severity_widget,
injured_count_by_severity_widget,
injured_count_by_accident_year_widget,
most_severe_accidents_widget,
most_severe_accidents_table_widget,
seriously_injured_killed_in_bicycles_scooter_widget,
killed_and_injured_count_per_age_group_stacked_widget,
accidents_heat_map_widget,
accident_count_by_day_night_widget,
accident_count_by_accident_type_widget,
accident_count_by_accident_year_widget,
killed_and_injured_count_per_age_group_widget
)
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from anyway.request_params import RequestParams
from anyway.widgets.widget_utils import get_accidents_stats
from anyway.widgets.widget_utils import get_accidents_stats, get_location_text
from anyway.models import AccidentMarkerView
from anyway.widgets.widget import register
from anyway.widgets.road_segment_widgets.road_segment_widget import RoadSegmentWidget
from anyway.widgets.all_locations_widgets.all_locations_widget import AllLocationsWidget
from typing import Dict

# noinspection PyProtectedMember
Expand All @@ -11,7 +11,7 @@


@register
class AccidentCountByAccidentTypeWidget(RoadSegmentWidget):
class AccidentCountByAccidentTypeWidget(AllLocationsWidget):
name: str = "accident_count_by_accident_type"
files = [__file__]

Expand Down Expand Up @@ -54,8 +54,11 @@ def get_accident_count_by_accident_type(location_info, start_time, end_time):

@staticmethod
def localize_items(request_params: RequestParams, items: Dict) -> Dict:
items["data"]["text"] = {"title": _("Number of accidents by accident type"),
"subtitle": f'{_("in segment")} {_(request_params.location_info["road_segment_name"])}'}
location_text = get_location_text(request_params)
items["data"]["text"] = {
"title": _("Number of accidents by accident type"),
"subtitle": _(location_text),
}
for item in items["data"]["items"]:
to_translate = item["accident_type"]
item["accident_type"] = _(to_translate)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@
from flask_babel import _

from anyway.backend_constants import AccidentSeverity
from anyway.infographics_dictionaries import segment_dictionary
from anyway.models import AccidentMarkerView
from anyway.request_params import RequestParams
from anyway.widgets.road_segment_widgets.road_segment_widget import RoadSegmentWidget
from anyway.widgets.all_locations_widgets.all_locations_widget import AllLocationsWidget
from anyway.widgets.widget import register
from anyway.widgets.widget_utils import (
get_accidents_stats,
gen_entity_labels,
format_2_level_items,
sort_and_fill_gaps_for_stacked_bar,
get_location_text,
)


@register
class AccidentCountByAccidentYearWidget(RoadSegmentWidget):
class AccidentCountByAccidentYearWidget(AllLocationsWidget):
name: str = "accident_count_by_accident_year"
files = [__file__]

Expand All @@ -30,7 +30,6 @@ def __init__(self, request_params: RequestParams):
self.information = "Fatal, severe and light accidents count in the specified years, split by accident severity"

def generate_items(self) -> None:

res1 = get_accidents_stats(
table_obj=AccidentMarkerView,
filters=self.request_params.location_info,
Expand All @@ -52,9 +51,10 @@ def generate_items(self) -> None:

@staticmethod
def localize_items(request_params: RequestParams, items: Dict) -> Dict:
location_text = get_location_text(request_params)
items["data"]["text"] = {
"title": _("Number of accidents, per year, split by severity"),
"subtitle": f'{_("in segment")} {_(segment_dictionary[request_params.location_info["road_segment_name"]])}',
"subtitle": _(location_text),
"labels_map": gen_entity_labels(AccidentSeverity),
}
return items
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from anyway.request_params import RequestParams
from anyway.widgets.widget_utils import get_accidents_stats
from anyway.widgets.widget_utils import get_accidents_stats, get_location_text
from anyway.models import AccidentMarkerView
from anyway.widgets.widget import register
from anyway.widgets.road_segment_widgets.road_segment_widget import RoadSegmentWidget
from anyway.widgets.all_locations_widgets.all_locations_widget import AllLocationsWidget
from typing import Dict
from flask_babel import _


@register
class AccidentCountByDayNightWidget(RoadSegmentWidget):
class AccidentCountByDayNightWidget(AllLocationsWidget):
name: str = "accident_count_by_day_night"
files = [__file__]

Expand All @@ -32,8 +32,8 @@ def generate_items(self) -> None:

@staticmethod
def localize_items(request_params: RequestParams, items: Dict) -> Dict:
items["data"]["text"] = {"title": _("Accidents by time"),
"subtitle": f'{_("in segment")} {_(request_params.location_info["road_segment_name"])}'}
location_text = get_location_text(request_params)
items["data"]["text"] = {"title": _("Accidents by time"), "subtitle": _(location_text)}
return items


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,44 +61,46 @@ def get_accident_count_by_severity(location_info, start_time, end_time):
def get_transcription(request_params: RequestParams, items: Dict):
total_accidents_count = items.get("total_accidents_count")
if total_accidents_count == 0:
return ''
return ""
severity_light_count = items.get("severity_light_count")
if severity_light_count == 0:
severity_light_count_text = ''
severity_light_count_text = ""
elif severity_light_count == 1:
severity_light_count_text = _("one light")
else:
severity_light_count_text = f'{severity_light_count} ' + _("light plural")
severity_light_count_text = f"{severity_light_count} " + _("light plural")
severity_severe_count = items.get("severity_severe_count")
if severity_severe_count == 0:
severity_severe_count_text = ''
severity_severe_count_text = ""
elif severity_severe_count == 1:
severity_severe_count_text = _("one severe")
else:
severity_severe_count_text = f'{severity_severe_count} '+ _("severe plural")
severity_severe_count_text = f"{severity_severe_count} " + _("severe plural")
severity_fatal_count = items.get("severity_fatal_count")
if severity_fatal_count == 0:
severity_fatal_count_text = ''
severity_fatal_count_text = ""
elif severity_fatal_count == 1:
severity_fatal_count_text = _("one fatal")
else:
severity_fatal_count_text = f'{severity_fatal_count} ' + _("fatal plural")
severity_fatal_count_text = f"{severity_fatal_count} " + _("fatal plural")
if request_params.resolution == BE_CONST.ResolutionCategories.STREET:
text = "{in_yishuv_keyword} {yishuv_name} {in_street_keyword} {street_name} ".format(
in_yishuv_keyword=_("in yishuv"),
yishuv_name=_(request_params.location_info.get('yishuv_name')),
yishuv_name=_(request_params.location_info.get("yishuv_name")),
in_street_keyword=_("in street"),
street_name=_(request_params.location_info.get('street1_hebrew')),
street_name=_(request_params.location_info.get("street1_hebrew")),
)
elif request_params.resolution == BE_CONST.ResolutionCategories.SUBURBAN_ROAD:
text = "{in_road_keyword} {road_num} {in_segment_keyword} {segment_name} ".format(
in_road_keyword=_("in road"),
road_num=request_params.location_info.get('road1'),
road_num=request_params.location_info.get("road1"),
in_segment_keyword=_("in segment"),
segment_name=_(request_params.location_info.get('road_segment_name')),
segment_name=_(request_params.location_info.get("road_segment_name")),
)
else:
raise Exception(f"cannot convert to hebrew for resolution : {request_params.resolution.get('resolution')}")
raise Exception(
f"cannot convert to hebrew for resolution : {request_params.resolution.get('resolution')}"
)
text += "{between_years_keyword} {start_year} - {end_year}, {separator_keyword} {incidents_num} {incident_keyword}, {out_of_them_keywoard} ".format(
between_years_keyword=_("between the years"),
start_year=request_params.start_time.year,
Expand All @@ -108,24 +110,32 @@ def get_transcription(request_params: RequestParams, items: Dict):
incident_keyword=_("accidents"),
out_of_them_keywoard=_("out of them"),
)
text += join_strings([severity_fatal_count_text, severity_severe_count_text, severity_light_count_text],
sep_a=" ,",
sep_b=_(" and "))
text += join_strings(
[severity_fatal_count_text, severity_severe_count_text, severity_light_count_text],
sep_a=" ,",
sep_b=_(" and "),
)
return text

@staticmethod
def localize_items(request_params: RequestParams, items: Dict) -> Dict:
if request_params.resolution in (BE_CONST.ResolutionCategories.SUBURBAN_ROAD,
BE_CONST.ResolutionCategories.SUBURBAN_JUNCTION):
if request_params.resolution in (
BE_CONST.ResolutionCategories.SUBURBAN_ROAD,
BE_CONST.ResolutionCategories.SUBURBAN_JUNCTION,
):
is_segment = request_params.resolution == BE_CONST.ResolutionCategories.SUBURBAN_ROAD
items["data"]["text"] = {
"title": _("Number of accidents by severity"),
"subtitle": _(request_params.location_info['road_segment_name']) if is_segment else
_(request_params.location_info['non_urban_intersection_hebrew']),
"transcription": AccidentCountBySeverityWidget.get_transcription(request_params=request_params,
items=items["data"]["items"])
"subtitle": _(request_params.location_info["road_segment_name"])
if is_segment
else _(request_params.location_info["non_urban_intersection_hebrew"]),
"transcription": AccidentCountBySeverityWidget.get_transcription(
request_params=request_params, items=items["data"]["items"]
),
}
items["meta"]["information"] = "{incident_description}{incident_location} {incident_time}.".format(
items["meta"][
"information"
] = "{incident_description}{incident_location} {incident_time}.".format(
incident_description=_("Fatal, severe and light accidents count in "),
incident_location=_("segment") if is_segment else _("junction"),
incident_time=_("in the selected time"),
Expand All @@ -141,11 +151,22 @@ def localize_items(request_params: RequestParams, items: Dict) -> Dict:
incidents_num=num_accidents,
incident_keyword=_("accidents"),
)
subtitle = _("{street_name}, {yishuv_name}".format(street_name=request_params.location_info["street1_hebrew"],
yishuv_name=request_params.location_info["yishuv_name"]))
items["data"]["text"] = {"title": s, "subtitle": subtitle, "transcription": AccidentCountBySeverityWidget.get_transcription(request_params=request_params,
items=items["data"]["items"])}
items["meta"]["information"] = "{incident_description}{incident_location} {incident_time}.".format(
subtitle = _(
"{street_name}, {yishuv_name}".format(
street_name=request_params.location_info["street1_hebrew"],
yishuv_name=request_params.location_info["yishuv_name"],
)
)
items["data"]["text"] = {
"title": s,
"subtitle": subtitle,
"transcription": AccidentCountBySeverityWidget.get_transcription(
request_params=request_params, items=items["data"]["items"]
),
}
items["meta"][
"information"
] = "{incident_description}{incident_location} {incident_time}.".format(
incident_description=_("Fatal, severe and light accidents count in "),
incident_location=_("street"),
incident_time=_("in the selected time"),
Expand All @@ -170,4 +191,4 @@ def localize_items(request_params: RequestParams, items: Dict) -> Dict:
_("out of them")
_("accidents")
_(" and ")
_("in the selected time")
_("in the selected time")
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
from anyway.request_params import RequestParams
from anyway.backend_constants import AccidentSeverity, BE_CONST
from anyway.infographics_dictionaries import segment_dictionary
from anyway.widgets.widget_utils import get_query
from anyway.widgets.widget_utils import get_query, get_location_text
from anyway.models import AccidentMarkerView
from anyway.widgets.widget import register
from anyway.widgets.road_segment_widgets.road_segment_widget import RoadSegmentWidget
from anyway.widgets.all_locations_widgets.all_locations_widget import AllLocationsWidget


@register
class AccidentsHeatMapWidget(RoadSegmentWidget):
class AccidentsHeatMapWidget(AllLocationsWidget):
name: str = "accidents_heat_map"
files = [__file__]

Expand Down Expand Up @@ -49,8 +49,9 @@ def get_accidents_heat_map(filters, start_time, end_time):

@staticmethod
def localize_items(request_params: RequestParams, items: Dict) -> Dict:
location_text = get_location_text(request_params)
items["data"]["text"] = {
"title": _("Fatal and severe accidents heat map"),
"subtitle": _(segment_dictionary[request_params.location_info["road_segment_name"]])
"subtitle": _(location_text),
}
return items
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,20 @@
from anyway.infographics_dictionaries import segment_dictionary
from anyway.models import InvolvedMarkerView
from anyway.request_params import RequestParams
from anyway.widgets.road_segment_widgets.road_segment_widget import RoadSegmentWidget
from anyway.widgets.all_locations_widgets.all_locations_widget import AllLocationsWidget
from anyway.widgets.widget import register
from anyway.widgets.widget_utils import (
get_accidents_stats,
gen_entity_labels,
get_injured_filters,
format_2_level_items,
sort_and_fill_gaps_for_stacked_bar,
get_location_text,
)


@register
class InjuredCountByAccidentYearWidget(RoadSegmentWidget):
class InjuredCountByAccidentYearWidget(AllLocationsWidget):
name: str = "injured_count_by_accident_year"
files = [__file__]

Expand All @@ -32,7 +33,7 @@ def __init__(self, request_params: RequestParams):
def generate_items(self) -> None:
res1 = get_accidents_stats(
table_obj=InvolvedMarkerView,
filters=get_injured_filters(self.request_params.location_info),
filters=get_injured_filters(self.request_params),
group_by=("accident_year", "injury_severity"),
count="injury_severity",
start_time=self.request_params.start_time,
Expand All @@ -51,9 +52,10 @@ def generate_items(self) -> None:

@staticmethod
def localize_items(request_params: RequestParams, items: Dict) -> Dict:
location_text = get_location_text(request_params)
items["data"]["text"] = {
"title": _("Number of injured in accidents, per year, split by severity"),
"subtitle": f'{_("in segment")} {_(segment_dictionary[request_params.location_info["road_segment_name"]])}',
"subtitle": _(location_text),
"labels_map": gen_entity_labels(InjurySeverity),
}
return items
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from anyway.models import InvolvedMarkerView
from anyway.widgets.all_locations_widgets.all_locations_widget import AllLocationsWidget
from anyway.widgets.widget import register
from anyway.widgets.widget_utils import get_accidents_stats, join_strings, get_location_text
from anyway.widgets.widget_utils import get_accidents_stats, join_strings, get_location_text, get_involved_marker_view_location_filters
from anyway.backend_constants import BE_CONST
from flask_babel import _

Expand All @@ -21,41 +21,31 @@ def __init__(self, request_params: RequestParams):

def generate_items(self) -> None:
self.items = InjuredCountBySeverityWidget.get_injured_count_by_severity(
self.request_params.resolution,
self.request_params.location_info,
self.request_params.start_time,
self.request_params.end_time,
self.request_params
)

@staticmethod
def get_injured_count_by_severity(resolution, location_info, start_time, end_time):
filters = {}
def get_injured_count_by_severity(request_params):
filters = get_involved_marker_view_location_filters(request_params)
filters["injury_severity"] = [
InjurySeverity.KILLED.value,
InjurySeverity.SEVERE_INJURED.value,
InjurySeverity.LIGHT_INJURED.value,
]

if resolution == BE_CONST.ResolutionCategories.STREET:
filters["involve_yishuv_name"] = location_info.get("yishuv_name")
filters["street1_hebrew"] = location_info.get("street1_hebrew")
elif resolution == BE_CONST.ResolutionCategories.SUBURBAN_ROAD:
filters["road1"] = location_info.get("road1")
filters["road_segment_name"] = location_info.get("road_segment_name")

count_by_severity = get_accidents_stats(
table_obj=InvolvedMarkerView,
filters=filters,
group_by="injury_severity",
count="injury_severity",
start_time=start_time,
end_time=end_time,
start_time=request_params.start_time,
end_time=request_params.end_time,
)
found_severities = [d["injury_severity"] for d in count_by_severity]
items = {}
total_injured_count = 0
start_year = start_time.year
end_year = end_time.year
start_year = request_params.start_time.year
end_year = request_params.end_time.year
for sev in InjurySeverity:
if sev.value not in found_severities:
count_by_severity.append({"injury_severity": sev.value, "count": 0})
Expand Down
Loading

0 comments on commit 34e63fe

Please sign in to comment.