Revision: 8097 Author: xqt Date: 2010-04-16 05:54:38 +0000 (Fri, 16 Apr 2010)
Log Message: ----------- use pywikibot prefix, update from trunk
Modified Paths: -------------- branches/rewrite/scripts/interwiki_graph.py trunk/pywikipedia/interwiki_graph.py
Modified: branches/rewrite/scripts/interwiki_graph.py =================================================================== --- branches/rewrite/scripts/interwiki_graph.py 2010-04-16 05:30:26 UTC (rev 8096) +++ branches/rewrite/scripts/interwiki_graph.py 2010-04-16 05:54:38 UTC (rev 8097) @@ -1,4 +1,9 @@ """ Module with the graphviz drawing calls """ +# +# (C) Pywikipedia bot team, 2006-2010 +# +# Distributed under the terms of the MIT license. +# __version__ = '$Id$' import threading pydotfound = True @@ -33,11 +38,12 @@
def run(self): for format in config.interwiki_graph_formats: - filename = 'interwiki-graphs/' + getFilename(self.originPage, format) + filename = 'interwiki-graphs/' + getFilename(self.originPage, + format) if self.graph.write(filename, prog = 'dot', format = format): - wikipedia.output(u'Graph saved as %s' % filename) + pywikibot.output(u'Graph saved as %s' % filename) else: - wikipedia.output(u'Graph could not be saved as %s' % filename) + pywikibot.output(u'Graph could not be saved as %s' % filename)
class GraphDrawer: def __init__(self, subject): @@ -47,11 +53,14 @@ self.subject = subject
def getLabel(self, page): - return (u'""%s:%s""' % (page.site().language(), page.title())).encode('utf-8') + return (u'""%s:%s""' % (page.site().language(), + page.title())).encode('utf-8')
def addNode(self, page): node = pydot.Node(self.getLabel(page), shape = 'rectangle') - node.set_URL(""http://%s%s%5C"" % (page.site().hostname(), page.site().get_address(page.urlname()))) + node.set_URL(""http://%s%s%5C"" + % (page.site().hostname(), + page.site().get_address(page.urlname()))) node.set_style('filled') node.set_fillcolor('white') node.set_fontsize('11') @@ -65,7 +74,9 @@ node.set_color('green') node.set_style('filled,bold') # if we found more than one valid page for this language: - if len(filter(lambda p: p.site() == page.site() and p.exists() and not p.isRedirectPage(), self.subject.foundIn.keys())) > 1: + if len(filter(lambda p: p.site() == page.site() and p.exists() \ + and not p.isRedirectPage(), + self.subject.foundIn.keys())) > 1: # mark conflict by octagonal node node.set_shape('octagon') self.graph.add_node(node) @@ -83,7 +94,9 @@ # workaround for bug [ 1722739 ]: prevent duplicate edges # (it is unclear why duplicate edges occur) elif self.graph.get_edge(sourceLabel, targetLabel): - wikipedia.output(u'BUG: Tried to create duplicate edge from %s to %s' % (refPage.aslink(), page.aslink())) + pywikibot.output( + u'BUG: Tried to create duplicate edge from %s to %s' + % (refPage.title(asLink=True), page.title(asLink=True))) # duplicate edges would be bad because then get_edge() would # give a list of edges, not a single edge when we handle the # opposite edge. @@ -110,7 +123,8 @@ """ See http://meta.wikimedia.org/wiki/Interwiki_graphs """ - wikipedia.output(u'Preparing graph for %s' % self.subject.originPage.title()) + pywikibot.output(u'Preparing graph for %s' + % self.subject.originPage.title()) # create empty graph self.graph = pydot.Dot() # self.graph.set('concentrate', 'true') @@ -131,9 +145,11 @@ pass
def getToken(self): - formR = re.compile('<form target=_top method="post" action="upload.php?(\d+)"') + formR = re.compile( + '<form target=_top method="post" action="upload.php?(\d+)"')
- uploadPage = urllib2.urlopen('http://www.speedyshare.com/index_upload.php') + uploadPage = urllib2.urlopen( + 'http://www.speedyshare.com/index_upload.php') text = uploadPage.read() token = formR.search(text).group(1) return token @@ -142,17 +158,19 @@ """ Post fields and files to an http host as multipart/form-data. fields is a sequence of (name, value) elements for regular form fields. - files is a sequence of (name, filename, value) elements for data to be uploaded as files - Return the server's response page. + files is a sequence of (name, filename, value) elements for data to be + uploaded as files. Return the server's response page. """ content_type, body = self.encode_multipart_formdata(fields, files) h = httplib.HTTP(host) h.putrequest('POST', selector) h.putheader('Content-Type', content_type) h.putheader('Content-Length', str(len(body))) - h.putheader('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5') + h.putheader('User-Agent', + 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5') h.putheader('Referer', 'http://www.speedyshare.com/index_upload.php') - h.putheader('Accept', 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5') + h.putheader('Accept', + 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5') h.putheader('Accept-Language', 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3') h.putheader('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7') h.putheader('Keep-Alive', '30') @@ -166,8 +184,9 @@ def encode_multipart_formdata(self, fields, files): """ fields is a sequence of (name, value) elements for regular form fields. - files is a sequence of (name, filename, value) elements for data to be uploaded as files - Return (content_type, body) ready for httplib.HTTP instance + files is a sequence of (name, filename, value) elements for data to be + uploaded as files. Return (content_type, body) ready for httplib.HTTP + instance """ BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$' CRLF = '\r\n' @@ -179,7 +198,9 @@ L.append(value) for (key, filename, value) in files: L.append('--' + BOUNDARY) - L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) + L.append( + 'Content-Disposition: form-data; name="%s"; filename="%s"' + % (key, filename)) L.append('Content-Type: %s' % self.get_content_type(filename)) L.append('') L.append(value) @@ -190,7 +211,8 @@ return content_type, body
def get_content_type(self, filename): - return mimetypes.guess_type(filename)[0] or 'application/octet-stream' + return mimetypes.guess_type(filename)[0] \ + or 'application/octet-stream'
def upload(self, filename): token = self.getToken() @@ -218,4 +240,5 @@
if __name__ == "__main__": uploader = SpeedyShareUploader() - uploader.upload('/home/daniel/projekte/pywikipedia/interwiki-graphs/wikipedia-de-CEE.svg') + uploader.upload( + '/home/daniel/projekte/pywikipedia/interwiki-graphs/wikipedia-de-CEE.svg')
Modified: trunk/pywikipedia/interwiki_graph.py =================================================================== --- trunk/pywikipedia/interwiki_graph.py 2010-04-16 05:30:26 UTC (rev 8096) +++ trunk/pywikipedia/interwiki_graph.py 2010-04-16 05:54:38 UTC (rev 8097) @@ -1,4 +1,9 @@ """ Module with the graphviz drawing calls """ +# +# (C) Pywikipedia bot team, 2006-2010 +# +# Distributed under the terms of the MIT license. +# __version__ = '$Id$' import threading pydotfound = True @@ -6,7 +11,8 @@ import pydot except ImportError: pydotfound = False -import wikipedia, config +import wikipedia as pywikibot +import config
# for speedyshare import re @@ -32,11 +38,12 @@
def run(self): for format in config.interwiki_graph_formats: - filename = 'interwiki-graphs/' + getFilename(self.originPage, format) + filename = 'interwiki-graphs/' + getFilename(self.originPage, + format) if self.graph.write(filename, prog = 'dot', format = format): - wikipedia.output(u'Graph saved as %s' % filename) + pywikibot.output(u'Graph saved as %s' % filename) else: - wikipedia.output(u'Graph could not be saved as %s' % filename) + pywikibot.output(u'Graph could not be saved as %s' % filename)
class GraphDrawer: def __init__(self, subject): @@ -46,11 +53,14 @@ self.subject = subject
def getLabel(self, page): - return (u'""%s:%s""' % (page.site().language(), page.title())).encode('utf-8') + return (u'""%s:%s""' % (page.site().language(), + page.title())).encode('utf-8')
def addNode(self, page): node = pydot.Node(self.getLabel(page), shape = 'rectangle') - node.set_URL(""http://%s%s%5C"" % (page.site().hostname(), page.site().get_address(page.urlname()))) + node.set_URL(""http://%s%s%5C"" + % (page.site().hostname(), + page.site().get_address(page.urlname()))) node.set_style('filled') node.set_fillcolor('white') node.set_fontsize('11') @@ -64,7 +74,9 @@ node.set_color('green') node.set_style('filled,bold') # if we found more than one valid page for this language: - if len(filter(lambda p: p.site() == page.site() and p.exists() and not p.isRedirectPage(), self.subject.foundIn.keys())) > 1: + if len(filter(lambda p: p.site() == page.site() and p.exists() \ + and not p.isRedirectPage(), + self.subject.foundIn.keys())) > 1: # mark conflict by octagonal node node.set_shape('octagon') self.graph.add_node(node) @@ -82,7 +94,9 @@ # workaround for bug [ 1722739 ]: prevent duplicate edges # (it is unclear why duplicate edges occur) elif self.graph.get_edge(sourceLabel, targetLabel): - wikipedia.output(u'BUG: Tried to create duplicate edge from %s to %s' % (refPage.aslink(), page.aslink())) + pywikibot.output( + u'BUG: Tried to create duplicate edge from %s to %s' + % (refPage.aslink(), page.aslink())) # duplicate edges would be bad because then get_edge() would # give a list of edges, not a single edge when we handle the # opposite edge. @@ -109,7 +123,8 @@ """ See http://meta.wikimedia.org/wiki/Interwiki_graphs """ - wikipedia.output(u'Preparing graph for %s' % self.subject.originPage.title()) + pywikibot.output(u'Preparing graph for %s' + % self.subject.originPage.title()) # create empty graph self.graph = pydot.Dot() # self.graph.set('concentrate', 'true') @@ -130,9 +145,11 @@ pass
def getToken(self): - formR = re.compile('<form target=_top method="post" action="upload.php?(\d+)"') + formR = re.compile( + '<form target=_top method="post" action="upload.php?(\d+)"')
- uploadPage = urllib2.urlopen('http://www.speedyshare.com/index_upload.php') + uploadPage = urllib2.urlopen( + 'http://www.speedyshare.com/index_upload.php') text = uploadPage.read() token = formR.search(text).group(1) return token @@ -141,17 +158,19 @@ """ Post fields and files to an http host as multipart/form-data. fields is a sequence of (name, value) elements for regular form fields. - files is a sequence of (name, filename, value) elements for data to be uploaded as files - Return the server's response page. + files is a sequence of (name, filename, value) elements for data to be + uploaded as files. Return the server's response page. """ content_type, body = self.encode_multipart_formdata(fields, files) h = httplib.HTTP(host) h.putrequest('POST', selector) h.putheader('Content-Type', content_type) h.putheader('Content-Length', str(len(body))) - h.putheader('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5') + h.putheader('User-Agent', + 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8) Gecko/20051128 SUSE/1.5-0.1 Firefox/1.5') h.putheader('Referer', 'http://www.speedyshare.com/index_upload.php') - h.putheader('Accept', 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5') + h.putheader('Accept', + 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5') h.putheader('Accept-Language', 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3') h.putheader('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7') h.putheader('Keep-Alive', '30') @@ -165,8 +184,9 @@ def encode_multipart_formdata(self, fields, files): """ fields is a sequence of (name, value) elements for regular form fields. - files is a sequence of (name, filename, value) elements for data to be uploaded as files - Return (content_type, body) ready for httplib.HTTP instance + files is a sequence of (name, filename, value) elements for data to be + uploaded as files. Return (content_type, body) ready for httplib.HTTP + instance """ BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$' CRLF = '\r\n' @@ -178,7 +198,9 @@ L.append(value) for (key, filename, value) in files: L.append('--' + BOUNDARY) - L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) + L.append( + 'Content-Disposition: form-data; name="%s"; filename="%s"' + % (key, filename)) L.append('Content-Type: %s' % self.get_content_type(filename)) L.append('') L.append(value) @@ -189,7 +211,8 @@ return content_type, body
def get_content_type(self, filename): - return mimetypes.guess_type(filename)[0] or 'application/octet-stream' + return mimetypes.guess_type(filename)[0] \ + or 'application/octet-stream'
def upload(self, filename): token = self.getToken() @@ -217,4 +240,5 @@
if __name__ == "__main__": uploader = SpeedyShareUploader() - uploader.upload('/home/daniel/projekte/pywikipedia/interwiki-graphs/wikipedia-de-CEE.svg') + uploader.upload( + '/home/daniel/projekte/pywikipedia/interwiki-graphs/wikipedia-de-CEE.svg')
pywikipedia-svn@lists.wikimedia.org