Skip to content

Instantly share code, notes, and snippets.

@urbanecm
Created August 29, 2016 08:19
Show Gist options
  • Save urbanecm/9f757b1a3514f118f8cab95aaccc392f to your computer and use it in GitHub Desktop.
Save urbanecm/9f757b1a3514f118f8cab95aaccc392f to your computer and use it in GitHub Desktop.
#!/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&nbsp;%d.&nbsp;%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