Просмотр исходного кода

wiener_linien: fix crash when monitors_data == []

Fabian Peter Hammerle 7 лет назад
Родитель
Сommit
9c5f37b525
1 измененных файлов с 29 добавлено и 19 удалено
  1. 29 19
      scripts/omegalines

+ 29 - 19
scripts/omegalines

@@ -97,26 +97,36 @@ def request_wiener_linien_departures(api_key, rbl):
     server_time_delta = req_time - \
         dateutil.parser.parse(resp_data['message']['serverTime'])
     monitors_data = resp_data['data']['monitors']
-    assert 1 == len(monitors_data), monitors_data
+    if len(monitors_data) == 0:
+        return []
+    else:
+        assert 1 == len(monitors_data), monitors_data
+        departures = []
+        for line_data in monitors_data[0]['lines']:
+            departures.extend(departures_from_wiener_linien_line_data(
+                line_data=line_data,
+                server_time_delta=server_time_delta,
+            ))
+        return departures
+
+
+def departures_from_wiener_linien_line_data(line_data, server_time_delta):
+    assert 1 == len(line_data['departures']), line_data
     departures = []
-    for line_data in monitors_data[0]['lines']:
-        assert 1 == len(line_data['departures'])
-        for departure_data in line_data['departures']['departure']:
-            try:
-                predicted_time_server = dateutil.parser.parse(
-                    departure_data['departureTime']['timeReal'],
-                )
-            except KeyError as e:
-                print(e)
-                predicted_time_server = None
-            if predicted_time_server:
-                departures.append(Departure(
-                    line=departure_data['vehicle']['name']
-                        if 'vehicle' in departure_data else line_data['name'],
-                    towards=departure_data['vehicle']['towards']
-                        if 'vehicle' in departure_data else line_data['towards'],
-                    predicted_time=predicted_time_server - server_time_delta,
-                ))
+    for departure_data in line_data['departures']['departure']:
+        try:
+            predicted_time_server = dateutil.parser.parse(
+                departure_data['departureTime']['timeReal'],
+            )
+        except KeyError as e:
+            raise Exception('{}\ndeparture_data: {!r}'.format(e, departure_data))
+        departures.append(Departure(
+            line=departure_data['vehicle']['name']
+                if 'vehicle' in departure_data else line_data['name'],
+            towards=departure_data['vehicle']['towards']
+                if 'vehicle' in departure_data else line_data['towards'],
+            predicted_time=predicted_time_server - server_time_delta,
+        ))
     return departures