Created
August 29, 2016 08:19
-
-
Save urbanecm/9f757b1a3514f118f8cab95aaccc392f to your computer and use it in GitHub Desktop.
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 python | |
# -*- coding: utf-8 -*- | |
import datetime | |
import pywikibot | |
import time | |
import sys | |
import re | |
import logging | |
logger = logging.getLogger("pywiki") | |
logger.setLevel(logging.WARNING) | |
AFD = u'Wikipedie:Diskuse o smazání' | |
testAfd = u'Wikipedista:Martin Urbanec/Random notes/WP:DOS' | |
afdArchiveTitle = u'Wikipedista:Martin Urbanec/Random notes/WP:DOS/A' | |
RE_SECTION = re.compile(r'^==[^=\n]+(|.*[^=\n]+)==\s*$', re.MULTILINE) | |
RE_SUBPAGE = re.compile(r'\{\{/(?P<subpage>[^\}\n]+)\}\}') | |
#RE_LINK = re.compile(r'\[\[(?P<link>[^\]\n\|]+)(\|[^\]\n]+)?\]\]') | |
RE_SINCE = re.compile(r'^;\s*Diskus.{0,2}otev.{0,20}:\s*\n:.*\s+(?P<date>\d{1,2}\.\s*\d{1,2}\.\s\d{2,4}, \d{1,2}:\d{2} \([^\)]+\))', re.MULTILINE) | |
RE_CLOSE = re.compile(r'^;\s*Uzav.{1,3}en.{1,3} diskuse:\s*\n:\s*(?:(?P<default>standardn.{1,3}: t.{1,3}den po zah.{1,3}jen.{1,3}))|(?:.*<!--\s*(?P<custom>.*\S)\s*-->)', re.MULTILINE) | |
def get_afd_candidates(site): | |
afd = pywikibot.Page(site, testAfd) | |
last_section = re.split(RE_SECTION, afd.get())[-1] | |
out = [] | |
for candidate in RE_SUBPAGE.finditer(last_section): | |
subpage_name = candidate.group('subpage') | |
subpage = pywikibot.Page(site, u'%s/%s' % (AFD, subpage_name)) | |
since = RE_SINCE.search(subpage.get()) | |
close = RE_CLOSE.search(subpage.get()) | |
if close == None or (close.group('default') == None and close.group('custom') == None): | |
# fail | |
close_text = u'konec?' | |
elif close.group('custom') != None: | |
# custom close | |
close_text = close.group('custom') | |
elif since == None: | |
close_text = u'začátek?' | |
else: | |
# default close: one week | |
open_ts = datetime.datetime.strptime(since.group('date'), '%d. %m. %Y, %H:%M (%Z)') | |
close_ts = open_ts + datetime.timedelta(7) | |
if close_ts < datetime.datetime.now(): | |
close_text = u'zralé' | |
else: | |
close_text = u'do %d. %d.' % (close_ts.day, close_ts.month) | |
out.append({ | |
'AFD': AFD, | |
'subpage_name': subpage_name, | |
'close': close_text, | |
}) | |
return out | |
def finishClosing(site, candidates): | |
afd = pywikibot.Page(site, testAfd) | |
afdText = afd.get() | |
#Remove AfD from [[WP:DOS]] | |
for candidate in candidates: | |
if candidate['close'] == u"uzavřeno": | |
afdText = afdText.replace(u"{{/" + candidate['subpage_name'] + u"}}", '') | |
if afdText.strip() != afd.get().strip(): | |
summary = "Odebrání uzavřených DoS" | |
afd.put(afdText, comment=summary) | |
#Add to [[WP:DOS/A]] | |
afdArchive = pywikibot.Page(site, afdArchiveTitle) | |
afdArchiveText = afdArchive.get() | |
for candidate in candidates: | |
if candidate['close'] == u"uzavřeno": | |
#Get result | |
dos = pywikibot.Page(site, u"Wikipedie:Diskuse o smazání/" + candidate['subpage_name']) | |
dosText = dos.get() | |
dosTextArray = dosText.split('\n') | |
for row in dosTextArray: | |
if u"Diskuse skončila výsledkem" in row: | |
afdEnded = row | |
break | |
afdEndedArray = afdEnded.split("'") | |
afdEndedArray = filter(None, afdEndedArray) | |
dosResult = afdEndedArray[1] | |
#Get signature | |
afdEndedArray = afdEnded.split("-") | |
sig = afdEndedArray[2] | |
toAdd = u"*[[Wikipedie:Diskuse o smazání/" + candidate['subpage_name'] + u"|" + candidate['subpage_name'] + u"]] – " + dosResult + u" --" + sig | |
#Create new wikitext | |
afdArchiveText = afdArchiveText.replace(u"\n{{/patička}}", toAdd + u"\n\n{{/patička}}") | |
if afdArchiveText.strip() != afdArchive.get().strip(): | |
summary = u"Přidání uzavřených DoS" | |
afdArchive.put(afdArchiveText, comment=summary) | |
if __name__ == '__main__': | |
site = pywikibot.Site() | |
candidates = get_afd_candidates(site) | |
finishClosing(site, candidates) | |
pywikibot.stopme() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment