diff options
| author | Yuval Adam <_@yuv.al> | 2021-05-15 18:50:03 +0300 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2021-05-15 18:50:03 +0300 |
| commit | 2c6fc874f18a65403fe4f9600d46552bb40590fb (patch) | |
| tree | a4edcbcb5b2786443c400a623e300c8fad279e8e | |
| parent | f460b8893d263aabcfc5018d72225e860cf9a811 (diff) | |
Group alarms by areas
| -rw-r--r-- | alarmpy/alarmpy.py | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/alarmpy/alarmpy.py b/alarmpy/alarmpy.py index a7367cf..f230cd4 100644 --- a/alarmpy/alarmpy.py +++ b/alarmpy/alarmpy.py @@ -2,6 +2,7 @@ import click import json import requests +from collections import defaultdict from datetime import datetime from pathlib import Path from time import sleep, time @@ -98,10 +99,10 @@ class Alarm: self.last_routine_output = now self.current_alarms = [] - def output_leading_timestamp(self): + def output_leading_timestamp(self, nl=False): now = datetime.now() ts = now.strftime("%Y-%m-%d %H:%M:%S") - click.secho(f"{ts} ", nl=False) + click.secho(f"{ts} ", nl=nl) def output_error(self, err): if not self.quiet: @@ -114,12 +115,29 @@ class Alarm: click.secho("No active alarms", fg="green") def output_alarms(self, cities, alarm_id): - self.output_leading_timestamp() - cities_str = self.localize_cities(cities) - click.secho(f"{cities_str} ", fg="red", nl=not self.alarm_id) + areas = self.group_areas_and_localize(cities) + multiple_areas = len(areas) > 1 + self.output_leading_timestamp(nl=multiple_areas) + for area, cities in areas.items(): + cities_str = ", ".join(cities) + leading_tab = "\t" if multiple_areas else "" + click.secho(f"{leading_tab}{area} ", fg="red", bold=True, nl=False) + click.secho(f"\t{cities_str} ", fg="red") if self.alarm_id: click.secho(f"({alarm_id})") + def group_areas_and_localize(self, cities): + res = defaultdict(list) + for city in cities: + try: + area = self.labels[city][f"areaname_{self.language}"] + label = self.labels[city][f"label_{self.language}"] + except KeyError: + area = "Unknown" + label = city + res[area].append(label) + return res + def localize_cities(self, cities): localized_cities = [ self.labels.get(city, {}).get(f"label_{self.language}", city) |
