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
@dataclass
class LineInfo:
vao_line_id: str # e.g. 'vvt-8-325-T-j23-1'
- name: str # e.g. '325T'
- display_number: Optional[str] # e.g. 'Anrufsammeltaxi 325T'
+ line: Optional[str] # e.g. '325T', some trains don't have line labels.
category: str # e.g. 'Anrufsammeltaxi'
operator: str # e.g. 'Quaxis Taxi & Busreisen'
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 p in sl['productAtStop']:
- vao_line_id = p['lineId']
+ for ps in sl['productAtStop']:
+ vao_line_id = ps['lineId']
line_ids.add(vao_line_id)
line_info_dict[vao_line_id] = LineInfo(
vao_line_id=vao_line_id,
- name=p['name'],
- display_number=None,
- category=p['catOutL'],
- operator=p['operator'],
+ line=ps['line'],
+ category=ps['catOutL'],
+ operator=ps['operator'],
)
ext_id = sl['mainMastExtId']
stop_info_list.append(StopInfo(sl['name'], sl['dist'], LonLat(sl['mainMastLon'], sl['mainMastLat']), line_ids, ext_id))
departure['directionFlag'], departure['JourneyDetailRef']['ref']))
line_info_dict[vao_line_id] = LineInfo(
vao_line_id=vao_line_id,
- name=ps['name'],
- display_number=ps['displayNumber'],
+ line=ps['line'],
category=ps['catOutL'],
operator=ps['operator'],
)
arrival_list.append(Arrival(vao_line_id, time, arrival['origin'], arrival['JourneyDetailRef']['ref']))
line_info_dict[vao_line_id] = LineInfo(
vao_line_id=vao_line_id,
- name=ps['name'],
- display_number=ps['displayNumber'],
+ line=ps['line'],
category=ps['catOutL'],
operator=ps['operator'],
)
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)
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 = []
})
schedules = [{
+ 'service_date': journey_date.date().isoformat(),
"day_type": "work_day",
- "begin": journey_date.isoformat(timespec='minutes'),
- "minutes": journey_minutes,
"departure": departure,
"arrival": arrival,
}]
line = {
"vao_line_id": vao_line_id,
- "name": line_info.name,
- "label": line_info.display_number,
+ "line": line_info.line,
"category": line_info.category,
"operator": line_info.operator,
"schedules": schedules,
}
- if line["label"] is None:
- del line["label"]
lines.append(line)
public_transport_stop = {
)
-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__':