From 186030f51f65f9341e5cc0f37a06978fda0252c1 Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Sun, 16 May 2021 16:19:58 +0300 Subject: Group alarms by areas and bump to v1.1.0 (#10) * Group alarms by areas * Remove Unknown label --- alarmpy/alarmpy.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/alarmpy/alarmpy.py b/alarmpy/alarmpy.py index 3d81559..90122b7 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 @@ -103,10 +104,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: @@ -119,12 +120,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 = "" + 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) -- cgit v1.3.1