Last active
July 24, 2018 17:36
-
-
Save thcipriani/4b5a5e592465fe6c3bd1baa4bfa41aa6 to your computer and use it in GitHub Desktop.
A short script to see which MediaWiki versions are active for all the wikis in a particular list of wikis.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
""" | |
versionsfordblist | |
~~~~~~~~~~~~~~~~~ | |
Dumps out versions in use for any dblist on noc.wikimedia.org | |
Usage: | |
versionsfordblist <dblist> | |
Example: | |
$ versionsfordblist group1 | |
DBList "group1" uses version(s) | |
- php-1.32.0-wmf.6 | |
""" | |
import os | |
import requests | |
import sys | |
def clean(line): | |
return line.strip().strip(',"') | |
def conf_file(file): | |
r = requests.get('https://noc.wikimedia.org/conf/{}'.format(file)) | |
r.raise_for_status() | |
return r.text | |
def get_dblist(list_name): | |
if not list_name.endswith('.dblist'): | |
list_name = '{}.dblist'.format(list_name) | |
raw_list = conf_file(os.path.join('dblists', list_name)) | |
final_list = set() | |
for line in raw_list.splitlines(): | |
line = line.split('#')[0] | |
if not line: | |
continue | |
if line.startswith('%% '): | |
line = eval_dblists(line) | |
final_list |= line | |
continue | |
final_list.add(line) | |
return final_list | |
def eval_dblists(line): | |
line = line[2:].strip() | |
tokens = line.split(' ') | |
final_list = get_dblist(tokens[0].strip()) | |
i = 1 | |
while i < len(tokens): | |
token = tokens[i].strip() | |
if token == '+': | |
final_list |= get_dblist(tokens[i + 1]) | |
if token == '-': | |
final_list = final_list.difference(get_dblist(tokens[i + 1])) | |
i += 1 | |
return final_list | |
def get_active_wikiversions(): | |
active_versions = {} | |
for line in conf_file('wikiversions.json').splitlines(): | |
if ':' not in line: | |
continue | |
wiki, version = line.split(':') | |
active_versions[clean(wiki)] = clean(version) | |
return active_versions | |
if __name__ == '__main__': | |
dblist_name = sys.argv[1] | |
dblist = get_dblist(dblist_name) | |
active_wikiversions = get_active_wikiversions() | |
dblist_versions = set() | |
for wiki in dblist: | |
dblist_versions.add(active_wikiversions[wiki]) | |
print('DBList "{}" uses version(s)'.format(dblist_name)) | |
for version in dblist_versions: | |
print('- {}'.format(version)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment