]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/blobdiff - scripts/update_public_transport.py
Replace "begin" and "minutes" with "service_date" in schedules.
[philipp/winterrodeln/wrpylib.git] / scripts / update_public_transport.py
index b9741bb5f95aa55802e96c2bfa3c36eb33c130f1..620035000caf705faf2b519dc498ae8b008aa2fd 100644 (file)
@@ -14,6 +14,7 @@ from termcolor import cprint  # python3-termcolor
 
 from wrpylib.cli_tools import unified_diff, input_yes_no_quit, Choice
 from wrpylib.json_tools import order_json_keys, format_json
+from wrpylib.lib_update_public_transport import default_query_date
 from wrpylib.mwapi import WikiSite, page_json
 from wrpylib.vao import Vao
 from wrpylib.wrvalidators import LonLat
@@ -56,7 +57,7 @@ def try_vao_nearby_stops(vao: Vao, lon_lat: LonLat) -> Tuple[List[StopInfo], Dic
     response = vao.get('location.nearbystops', parameter).json()
     stop_info_list: List[StopInfo] = []
     line_info_dict: Dict[str, LineInfo] = {}
-    for stop in response['stopLocationOrCoordLocation']:
+    for stop in response.get('stopLocationOrCoordLocation', []):
         sl = stop['StopLocation']
         line_ids = set()
         for ps in sl['productAtStop']:
@@ -241,7 +242,7 @@ def remove_redundant_stops(stops: List[StopWithDist]) -> List[StopWithDist]:
     return result
 
 
-def update_sledrun(vao: Vao, site: WikiSite, title: str):
+def update_sledrun(vao: Vao, site: WikiSite, title: str, query_date: date):
     sledrun_json_page = site.query_page(f'{title}/Rodelbahn.json')
     sledrun_json = page_json(sledrun_json_page)
 
@@ -255,7 +256,7 @@ def update_sledrun(vao: Vao, site: WikiSite, title: str):
     stops_with_dists = sorted(stops_with_dists, key=lambda s: s.dist.dist_m)
     stops_with_dists = remove_redundant_stops(stops_with_dists)
 
-    journey_date = datetime(2022, 12, 14)
+    journey_date = datetime(query_date.year, query_date.month, query_date.day)
     journey_minutes = 1439
 
     public_transport_stops = []
@@ -289,9 +290,8 @@ def update_sledrun(vao: Vao, site: WikiSite, title: str):
                 })
 
             schedules = [{
+                'service_date': journey_date.date().isoformat(),
                 "day_type": "work_day",
-                "begin": journey_date.isoformat(timespec='minutes'),
-                "minutes": journey_minutes,
                 "departure": departure,
                 "arrival": arrival,
             }]
@@ -357,31 +357,33 @@ def update_sledrun(vao: Vao, site: WikiSite, title: str):
     )
 
 
-def update_public_transport(ini_files: List[str]):
+def update_public_transport(ini_files: List[str], query_date: date, sledrun: Optional[str]):
     config = configparser.ConfigParser()
     config.read(ini_files)
 
     site = WikiSite(ini_files)
     vao = Vao(config.get('vao', 'access_id'))
 
-    # update_sledrun(vao, site, 'Rumer Alm')
-    # update_sledrun(vao, site, 'Kemater Alm')
-    update_sledrun(vao, site, 'Nisslalm')
-    return
+    if sledrun is not None:
+        update_sledrun(vao, site, sledrun, query_date)
+        return
 
     for result in site.query(list='categorymembers', cmtitle='Kategorie:Rodelbahn', cmlimit='max'):
         for page in result['categorymembers']:
-            print(page['title'])
-            # if page['title'] in ['Anzère', 'Hochhäderich (Falkenhütte)', 'Hochlitten-Moosalpe']:
-            #    continue
-            update_sledrun(vao, db_cities, site, page['title'])
+            sledrun = page['title']
+            print(sledrun)
+            update_sledrun(vao, site, sledrun, query_date)
 
 
 def main():
+    query_date = default_query_date(date.today())
     parser = argparse.ArgumentParser(description='Update public transport information in sledrun JSON files.')
+    parser.add_argument('--sledrun', help='If given, work on a single sled run page, otherwise at the whole category.')
+    parser.add_argument('--date', type=date.fromisoformat, default=query_date,
+                        help='Working week date to query the database.')
     parser.add_argument('inifile', nargs='+', help='inifile.ini, see: https://www.winterrodeln.org/trac/wiki/ConfigIni')
     args = parser.parse_args()
-    update_public_transport(args.inifile)
+    update_public_transport(args.inifile, args.date, args.sledrun)
 
 
 if __name__ == '__main__':