]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/blob - wrpylib/mwapi.py
bf4df3da6ebc3cf6ab7fe2ca8e6f451e0e5a8aa9
[philipp/winterrodeln/wrpylib.git] / wrpylib / mwapi.py
1 """Helper functions for using the MediaWiki API."""
2 import configparser
3 import json
4 from functools import lru_cache
5 from typing import List
6
7 from pywikiapi import Site
8
9
10 def page_json(page: dict) -> dict:
11     slot = page['revisions'][0]['slots']['main']
12     assert slot['contentmodel'] == 'json'
13     return json.loads(slot['content'])
14
15
16 class WikiSite(Site):
17     def __init__(self, ini_files: List[str]):
18         config = configparser.ConfigParser()
19         config.read(ini_files)
20
21         api_url = config.get('robot', 'wikiurl')
22         api_user = config.get('robot', 'botpassword_bot')
23         api_password = config.get('robot', 'botpassword_password')
24         super().__init__(api_url)
25         self.login(api_user, api_password, True)
26
27     def query_page(self, title: str) -> dict:
28         rv_props = ['ids', 'contentmodel', 'content']
29         return next(self.query_pages(titles=title, prop='revisions', rvprop=rv_props, rvslots='main'))
30
31     @lru_cache
32     def sledrun_schema(self) -> dict:
33         schema = self.query_page('Winterrodeln:Datenschema/Rodelbahn/V1.json')
34         return page_json(schema)