Skip to content

Instantly share code, notes, and snippets.

@thcipriani
Last active July 24, 2018 17:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thcipriani/4b5a5e592465fe6c3bd1baa4bfa41aa6 to your computer and use it in GitHub Desktop.
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.
#!/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