Difference between revisions of "User:GrabberBot/cleaner.py"
From The Battle for Wesnoth Wiki
(pasted code) |
|||
| Line 7: | Line 7: | ||
url3 = "http://allefant.sourceforge.net/wesnoth/graphiclibrary.py?acquire=1" | url3 = "http://allefant.sourceforge.net/wesnoth/graphiclibrary.py?acquire=1" | ||
| − | |||
NO_UPDATE = False | NO_UPDATE = False | ||
COMMANDS_FILE = "" | COMMANDS_FILE = "" | ||
| Line 20: | Line 19: | ||
skip -= 1 | skip -= 1 | ||
else: | else: | ||
| − | if | + | if sys.argv[i] == "-n": |
| − | |||
| − | |||
NO_UPDATE = True | NO_UPDATE = True | ||
elif sys.argv[i] == "-c": | elif sys.argv[i] == "-c": | ||
| Line 58: | Line 55: | ||
moves = {} | moves = {} | ||
modified = 0 | modified = 0 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
def repl(mob): | def repl(mob): | ||
| − | global commands, moves, modified | + | global commands, moves, modified, VERBOSE, NO_UPDATE, MOVE_ALL, stats |
item = mob.group(0) | item = mob.group(0) | ||
| − | name = re.compile("""\\* \\[http://wesnoth.org/wiki/.*? | + | name = re.compile("""\\* \\[http://wesnoth.org/wiki/Contrib:.*? (.*?)\\]""").search(item).group(1) |
| − | + | image = re.compile("\\| (http://.*) \\|").search(item).group(1) | |
| − | |||
| − | |||
| − | |||
| − | |||
if VERBOSE: | if VERBOSE: | ||
print name, image | print name, image | ||
if mob: | if mob: | ||
for com in commands: | for com in commands: | ||
| − | + | if com == "delete " + image: | |
| − | if com == "delete | ||
modified = 1 | modified = 1 | ||
stats[0] += 1 | stats[0] += 1 | ||
| Line 89: | Line 72: | ||
print " delete" | print " delete" | ||
return "" | return "" | ||
| − | elif (com == "move | + | elif (com == "move " + name + " " + image) or MOVE_ALL: |
modified = 1 | modified = 1 | ||
stats[1] += 1 | stats[1] += 1 | ||
| Line 118: | Line 101: | ||
for move in moves: | for move in moves: | ||
anything = 0 | anything = 0 | ||
| − | + | ||
if VERBOSE: | if VERBOSE: | ||
| − | print | + | print move |
| − | contrib = mw.fetch( | + | contrib = mw.fetch("Contrib:" + move) |
if contrib.strip() == "": # doesn't exist yet | if contrib.strip() == "": # doesn't exist yet | ||
contrib = "== %s ==\n\n\n== See Also ==\n\n[[GraphicLibrary]]" % move | contrib = "== %s ==\n\n\n== See Also ==\n\n[[GraphicLibrary]]" % move | ||
miss = file("missing_artists.txt", "a") | miss = file("missing_artists.txt", "a") | ||
| − | miss.write( | + | miss.write(move + "\n") |
if VERBOSE: | if VERBOSE: | ||
print " creating new page" | print " creating new page" | ||
| Line 136: | Line 119: | ||
contrib = "" | contrib = "" | ||
if VERBOSE: | if VERBOSE: | ||
| − | print " page %s for %s" % (( | + | print " page %s for %s" % (("Contrib:" + move), move) |
mob = re.compile("\\s*==.*?== *\n\n").search(contrib) | mob = re.compile("\\s*==.*?== *\n\n").search(contrib) | ||
| Line 142: | Line 125: | ||
newcontrib = contrib[:mob.end(0)] | newcontrib = contrib[:mob.end(0)] | ||
for pic in moves[move]: | for pic in moves[move]: | ||
| − | if not check_already( | + | if not check_already(move, pic): |
newcontrib += pic + "\n" | newcontrib += pic + "\n" | ||
anything += 1 | anything += 1 | ||
| Line 153: | Line 136: | ||
contrib = newcontrib | contrib = newcontrib | ||
else: | else: | ||
| − | print "Could not add %s for %s." % (moves[move], | + | print "Could not add %s for %s." % (moves[move], move) |
if anything and not NO_UPDATE: | if anything and not NO_UPDATE: | ||
# Update contributor page | # Update contributor page | ||
| − | mw.post( | + | mw.post("Contrib:" + move, contrib, "added %d images" % anything) |
if ONE_A_TIME and anything: | if ONE_A_TIME and anything: | ||
Latest revision as of 13:21, 1 November 2005
#!/usr/bin/python
import urllib, urllib2, sys, re, os
import mediawiki
url3 = "http://allefant.sourceforge.net/wesnoth/graphiclibrary.py?acquire=1"
NO_UPDATE = False
COMMANDS_FILE = ""
WIKI_FILE = ""
VERBOSE = False
ONE_A_TIME = False
MOVE_ALL = False
skip = 0
for i in range(len(sys.argv)):
if skip:
skip -= 1
else:
if sys.argv[i] == "-n":
NO_UPDATE = True
elif sys.argv[i] == "-c":
COMMANDS_FILE = sys.argv[i + 1]
skip += 1
elif sys.argv[i] == "-w":
WIKI_FILE = sys.argv[i + 1]
skip += 1
elif sys.argv[i] == "-v":
VERBOSE = True
elif sys.argv[i] == "-o":
ONE_A_TIME = True
elif sys.argv[i] == "-a":
MOVE_ALL = True
if COMMANDS_FILE:
commands = file(COMMANDS_FILE).read().splitlines()
else:
# read commands
commands = urllib2.urlopen(url3).read().splitlines()
if len(commands) == 0:
sys.exit(0)
commands.reverse() # that way, last (most recent) command has priority
mw = mediawiki.MediaWiki()
if WIKI_FILE:
data = file(WIKI_FILE).read()
else:
# read current contents of wiki page
data = mw.fetch("UnsortedContrib")
stats = [0, 0]
moves = {}
modified = 0
def repl(mob):
global commands, moves, modified, VERBOSE, NO_UPDATE, MOVE_ALL, stats
item = mob.group(0)
name = re.compile("""\\* \\[http://wesnoth.org/wiki/Contrib:.*? (.*?)\\]""").search(item).group(1)
image = re.compile("\\| (http://.*) \\|").search(item).group(1)
if VERBOSE:
print name, image
if mob:
for com in commands:
if com == "delete " + image:
modified = 1
stats[0] += 1
if VERBOSE:
print " delete"
return ""
elif (com == "move " + name + " " + image) or MOVE_ALL:
modified = 1
stats[1] += 1
if name in moves:
moves[name] += [image]
else:
moves[name] = [image]
if VERBOSE:
print " move"
if not NO_UPDATE:
return ""
break
# return unmodified
return item
data = re.compile("\\* \\[http://.*?\n", re.S).sub(repl, data)
def check_already(name, link):
mob = re.compile(".*/(.+\\.(?:png|gif|bmp|jpg))").search(link)
pic = mob.group(1)
f = "/home/elias/prog/python/wesnoth/glib/art/%s/%s" % (name, pic)
try:
file(f)
return True
except IOError:
return False
for move in moves:
anything = 0
if VERBOSE:
print move
contrib = mw.fetch("Contrib:" + move)
if contrib.strip() == "": # doesn't exist yet
contrib = "== %s ==\n\n\n== See Also ==\n\n[[GraphicLibrary]]" % move
miss = file("missing_artists.txt", "a")
miss.write(move + "\n")
if VERBOSE:
print " creating new page"
firstline = contrib.split("\n", 1)[0].lower()
if firstline.find(move.lower()) < 0 and\
firstline.find(move.split(" ")[0].lower()) < 0:
print "Right page? %s not in \"%s\"" % (move, firstline)
contrib = ""
if VERBOSE:
print " page %s for %s" % (("Contrib:" + move), move)
mob = re.compile("\\s*==.*?== *\n\n").search(contrib)
if mob:
newcontrib = contrib[:mob.end(0)]
for pic in moves[move]:
if not check_already(move, pic):
newcontrib += pic + "\n"
anything += 1
if VERBOSE:
print " add: %s" % pic
else:
if VERBOSE:
print " already: %s" % pic
newcontrib += contrib[mob.end(0):]
contrib = newcontrib
else:
print "Could not add %s for %s." % (moves[move], move)
if anything and not NO_UPDATE:
# Update contributor page
mw.post("Contrib:" + move, contrib, "added %d images" % anything)
if ONE_A_TIME and anything:
sys.exit(0)
if modified and WIKI_FILE:
print "Writing data"
file(WIKI_FILE, "w").write(data)
if modified and not NO_UPDATE and not WIKI_FILE:
# Update UnsortedContrib page
mw.post("UnsortedContrib", data, "cleared %d and sorted %d images" %
(stats[0], stats[1]))
This page was last edited on 1 November 2005, at 13:21.