Create function update_wrintermapsreport().
[philipp/winterrodeln/wrpylib.git] / wrpylib / wrintermaps.py
index 71746a2bf8ac0067993118f18dab8a74ecae7b65..53269dd37e72875fa1c8a0561f70177d0472370e 100644 (file)
@@ -1,8 +1,8 @@
+import datetime
 import itertools
 import json
 from sqlalchemy import orm
-from wrpylib import mwdb, wrmwdb
-from wrpylib.wrorm import Page, WrIntermapsSledrun
+from wrpylib.wrorm import Page, WrIntermapsSledrun, WrIntermapsReport, WrIntermapsReportHistory
 
 
 def investigate(filename: str, write_back_formatted: bool):
@@ -34,6 +34,16 @@ def find_intermaps_sledrun(intermaps_sledrun_id: str, json_content: dict):
                 yield region, sledrun
 
 
+def region_to_region_with_sledrun_dict(region: dict):
+    region = region.copy()
+    region.update({'sledruns': {sledrun['id']: sledrun for sledrun in region['sledruns']['items']}})
+    return region
+
+
+def json_content_to_region_dict(json_content: dict) -> dict:
+    return {region['id']: region_to_region_with_sledrun_dict(region) for region in json_content['items']}
+
+
 def update_wrintermapssledrun(session, json_content: dict):
     """Updates the wrintermapssledrun table from the wiki. By filling in the missing fields of rows as long as
     intermaps_sledrun_id and wr_page_id are set.
@@ -73,6 +83,32 @@ def update_wrintermapssledrun(session, json_content: dict):
     session.commit()
 
 
+def update_wrintermapsreport(session, json_content: dict):
+    # add current content of intermaps_report to intermaps_history
+    pass
+
+    # delete content of intermaps_report
+    session.query(WrIntermapsReport).delete()
+
+    # add JSON content to intermaps_report
+    regions = json_content_to_region_dict(json_content)
+    for sledrun in session.query(WrIntermapsSledrun):
+        region = regions.get(sledrun.intermaps_region_id)
+        if region is None:
+            continue
+        sledrun_json = region['sledruns'].get(sledrun.intermaps_sledrun_id)
+        if sledrun_json is None:
+            continue
+        report = WrIntermapsReport()
+        report.intermaps_sledrun_id = sledrun.intermaps_sledrun_id
+        report.status = sledrun_json['status']
+        report.last_update = region['lastUpdate']
+        report.last_check = datetime.datetime.now()
+        report.utc_offset = 1
+        session.add(report)
+    session.commit()
+
+
 if __name__ == '__main__':
     from sqlalchemy.engine import create_engine
     engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1')
@@ -80,4 +116,6 @@ if __name__ == '__main__':
     filename = '/home/philipp/daten/Winterrodeln/Intermaps/intermaps_winterrodeln_2019-12-06_090501.json'
     with open(filename) as fp:
         content = json.load(fp)
-    update_wrintermapssledrun(Session(), content)
+    session = Session()
+    update_wrintermapssledrun(session, content)
+    update_wrintermapsreport(session, content)