Revision: 7522
Author:   alexsh
Date:     2009-10-21 02:31:09 +0000 (Wed, 21 Oct 2009)

Log Message:
-----------
revert...not compatible for python 2.5 Orz

Modified Paths:
--------------
    trunk/pywikipedia/interwiki.py
    trunk/pywikipedia/login.py
    trunk/pywikipedia/query.py
    trunk/pywikipedia/upload.py
    trunk/pywikipedia/userlib.py
    trunk/pywikipedia/weblinkchecker.py
    trunk/pywikipedia/wikipedia.py

Property Changed:
----------------
    trunk/pywikipedia/commons_category_redirect.py
    trunk/pywikipedia/maintenance/cleanident


Property changes on: trunk/pywikipedia/commons_category_redirect.py
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: trunk/pywikipedia/interwiki.py
===================================================================
--- trunk/pywikipedia/interwiki.py      2009-10-21 02:12:58 UTC (rev 7521)
+++ trunk/pywikipedia/interwiki.py      2009-10-21 02:31:09 UTC (rev 7522)
@@ -1596,7 +1596,7 @@
             timeout=60
             while 1:
                 try:
-                    status, data = page.put(newtext, comment = mcomment)
+                    status, reason, data = page.put(newtext, comment = 
mcomment)
                 except wikipedia.LockedPage:
                     wikipedia.output(u'Page %s is locked. Skipping.' % 
(page.title(),))
                     raise SaveError
@@ -1628,7 +1628,7 @@
             if str(status) == '302':
                 return True
             else:
-                wikipedia.output(u'%s' % status)
+                wikipedia.output(u'%s %s' % (status, reason))
                 return False
         elif answer == 'g':
             raise GiveUpOnPage

Modified: trunk/pywikipedia/login.py
===================================================================
--- trunk/pywikipedia/login.py  2009-10-21 02:12:58 UTC (rev 7521)
+++ trunk/pywikipedia/login.py  2009-10-21 02:31:09 UTC (rev 7522)
@@ -182,7 +182,7 @@
                     fakepredata['wpPassword'] = fakepredata['lgpassword'] = 
u'XXXXX'
                     wikipedia.output(u"self.site.postData(%s, %s)" % (address, 
self.site.urlEncode(fakepredata)))
                     fakeresponsemsg = re.sub(r"(session|Token)=..........", 
r"session=XXXXXXXXXX", response.msg.__str__())
-                    wikipedia.output(u"%s\n%s" % (response.code, 
fakeresponsemsg))
+                    wikipedia.output(u"%s/%s\n%s" % (response.status, 
response.reason, fakeresponsemsg))
                     wikipedia.output(u"%s" % data)
             Reat=re.compile(': (.*?);')
             L = []


Property changes on: trunk/pywikipedia/maintenance/cleanident
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: trunk/pywikipedia/query.py
===================================================================
--- trunk/pywikipedia/query.py  2009-10-21 02:12:58 UTC (rev 7521)
+++ trunk/pywikipedia/query.py  2009-10-21 02:31:09 UTC (rev 7522)
@@ -115,6 +115,11 @@
                   (('file', params['filename'].encode(site.encoding()), 
cont),),
                   site.cookies(sysop=sysop)
                   )
+            elif site.hostname() in wikipedia.config.authenticate.keys():
+                params["Content-type"] = "application/x-www-form-urlencoded"
+                params["User-agent"] = useragent
+                res = urllib2.urlopen(urllib2.Request(site.protocol() + '://' 
+ site.hostname() + address, site.urlEncode(params)))
+                jsontext = res.read()
             elif params['action'] in postAC:
                 res, jsontext = site.postForm(path, params, sysop, 
site.cookies(sysop = sysop) )
             else:

Modified: trunk/pywikipedia/upload.py
===================================================================
--- trunk/pywikipedia/upload.py 2009-10-21 02:12:58 UTC (rev 7521)
+++ trunk/pywikipedia/upload.py 2009-10-21 02:31:09 UTC (rev 7522)
@@ -347,14 +347,14 @@
             # ATTENTION: if you changed your Wikimedia Commons account not to 
show
             # an English interface, this detection will fail!
             success_msg = self.targetSite.mediawiki_message('successfulupload')
-            if success_msg in returned_html or response.code == 302:
+            if success_msg in returned_html or response.status == 302:
                  wikipedia.output(u"Upload successful.")
             # The following is not a good idea, because the server also gives 
a 200 when
             # something went wrong.
-            #if response.code in [200, 302]:
+            #if response.status in [200, 302]:
             #    wikipedia.output(u"Upload successful.")
 
-            elif response.code == 301:
+            elif response.status == 301:
                 wikipedia.output(u"Following redirect...")
                 address = response.getheader('Location')
                 wikipedia.output(u"Changed upload address to %s. Please update 
%s.py" % (address, self.targetSite.family.__module__))
@@ -368,7 +368,7 @@
                 except:
                     pass
                 wikipedia.output(u'%s\n\n' % returned_html)
-                wikipedia.output(u'%i' % response.code)
+                wikipedia.output(u'%i %s' % (response.status, response.reason))
 
                 if self.targetSite.mediawiki_message('uploadwarning') in 
returned_html:
                     answer = wikipedia.inputChoice(u"You have recevied an 
upload warning message. Ignore?", ['Yes', 'No'], ['y', 'N'], 'N')

Modified: trunk/pywikipedia/userlib.py
===================================================================
--- trunk/pywikipedia/userlib.py        2009-10-21 02:12:58 UTC (rev 7521)
+++ trunk/pywikipedia/userlib.py        2009-10-21 02:31:09 UTC (rev 7522)
@@ -554,7 +554,7 @@
         address = self.site().unblock_address()
 
         response, data = self.site().postForm(address, predata, sysop = True)
-        if response.code != 302:
+        if response.status != 302:
             if 
self.site().mediawiki_message('ipb_cant_unblock').replace('$1',blockID) in data:
                 raise AlreadyUnblockedError
             raise UnblockError, data

Modified: trunk/pywikipedia/weblinkchecker.py
===================================================================
--- trunk/pywikipedia/weblinkchecker.py 2009-10-21 02:12:58 UTC (rev 7521)
+++ trunk/pywikipedia/weblinkchecker.py 2009-10-21 02:31:09 UTC (rev 7522)
@@ -394,7 +394,7 @@
                 return self.resolveRedirect(useHEAD = False)
             else:
                 raise
-        if response.code >= 300 and response.code <= 399:
+        if response.status >= 300 and response.status <= 399:
             #print response.getheaders()
             redirTarget = response.getheader('Location')
             if redirTarget:
@@ -493,10 +493,10 @@
             # read the server's encoding, in case we need it later
             self.readEncodingFromResponse(response)
             # site down if the server status is between 400 and 499
-            alive = response.code not in range(400, 500)
-            if response.code in self.HTTPignore:
+            alive = response.status not in range(400, 500)
+            if response.status in self.HTTPignore:
                 alive = False
-            return alive, '%s' % response.code
+            return alive, '%s %s' % (response.status, response.reason)
 
 class LinkCheckThread(threading.Thread):
     '''

Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py      2009-10-21 02:12:58 UTC (rev 7521)
+++ trunk/pywikipedia/wikipedia.py      2009-10-21 02:31:09 UTC (rev 7522)
@@ -123,7 +123,7 @@
 __version__ = '$Id$'
 
 import os, sys
-import socket, urllib, urllib2
+import httplib, socket, urllib, urllib2
 import traceback
 import time, threading, Queue
 import math
@@ -1647,6 +1647,8 @@
                 response, data = query.GetData(params, self.site(), 
sysop=sysop, back_response = True)
                 if query.IsString(data):
                     raise KeyError
+            except httplib.BadStatusLine, line:
+                raise PageNotSaved('Bad status line: %s' % line.line)
             except ServerError:
                 output(u''.join(traceback.format_exception(*sys.exc_info())))
                 retry_attempt += 1
@@ -1671,7 +1673,7 @@
             # Check blocks
             self.site().checkBlocks(sysop = sysop)
             # A second text area means that an edit conflict has occured.
-            if response.code == 500:
+            if response.status == 500:
                 output(u"Server error encountered; will retry in %i minute%s."
                        % (retry_delay, retry_delay != 1 and "s" or ""))
                 time.sleep(60 * retry_delay)
@@ -1696,8 +1698,8 @@
                 #for debug only
                 #------------------------
                 if verbose:
-                    output("error occured, code:%s\ninfo:%s\nstatus:%s" % (
-                        data['error']['code'], data['error']['info'], 
response.code))
+                    output("error occured, 
code:%s\ninfo:%s\nstatus:%s\nresponse:%s" % (
+                        data['error']['code'], data['error']['info'], 
response.status, response.reason))
                     faked = params
                     if 'text' in faked:
                         del faked['text']
@@ -1706,7 +1708,7 @@
                 #------------------------
                 errorCode = data['error']['code']
                 #cannot handle longpageerror and PageNoSave yet
-                if errorCode == 'maxlag' or response.code == 503:
+                if errorCode == 'maxlag' or response.status == 503:
                     # server lag; wait for the lag time and retry
                     m = re.search('Waiting for (.+?): (.+?) seconds lagged', 
data['error']['info'])
                     timelag = int(m.group(2))
@@ -1791,13 +1793,13 @@
                     # if the page update is successed, we need to return code 
302 for cheat script who
                     # using status code
                     #
-                    return 302, data['edit']
+                    return 302, response.reason, data['edit']
 
             solve = self.site().solveCaptcha(data)
             if solve:
                 return self._putPage(text, comment, watchArticle, minorEdit, 
newPage, token, newToken, sysop, captcha=solve)
 
-            return response.code, data
+            return response.status, response.reason, data
 
 
     def _putPageOld(self, text, comment=None, watchArticle=False, 
minorEdit=True,
@@ -1884,7 +1886,7 @@
                 return None
             try:
                 response, data = self.site().postForm(address, predata, sysop)
-                if response.code == 503:
+                if response.status == 503:
                     if 'x-database-lag' in response.msg.keys():
                         # server lag; Mediawiki recommends waiting 5 seconds
                         # and retrying
@@ -1896,7 +1898,9 @@
                         wait = min(wait*2, 300)
                         continue
                     # Squid error 503
-                    raise ServerError(response.code)
+                    raise ServerError(response.status)
+            except httplib.BadStatusLine, line:
+                raise PageNotSaved('Bad status line: %s' % line.line)
             except ServerError:
                 output(u''.join(traceback.format_exception(*sys.exc_info())))
                 retry_attempt += 1
@@ -1988,7 +1992,7 @@
             # to "Wikipedia has a problem", but I'm not sure. Maybe we could
             # just check for HTTP Status 500 (Internal Server Error)?
             if ("<title>Wikimedia Error</title>" in data or "has a 
problem</title>" in data) \
-                or response.code == 500:
+                or response.status == 500:
                 output(u"Server error encountered; will retry in %i minute%s."
                        % (retry_delay, retry_delay != 1 and "s" or ""))
                 time.sleep(60 * retry_delay)
@@ -2049,7 +2053,7 @@
                 # Something went wrong, and we don't know what. Show the
                 # HTML code that hopefully includes some error message.
                 output(u"ERROR: Unexpected response from wiki server.")
-                output(u"       %s" % response.code)
+                output(u"       %s (%s) " % (response.status, response.reason))
                 output(data)
                 # Unexpected responses should raise an error and not pass,
                 # be it silently or loudly. This should raise an error
@@ -2058,7 +2062,7 @@
                 # We are on the preview page, so the page was not saved
                 raise PageNotSaved
 
-            return response.code, data
+            return response.status, response.reason, data
 
     def canBeEdited(self):
         """Return bool indicating whether this page can be edited.
@@ -3281,7 +3285,7 @@
         else:
             response, data = self.site().postForm(address, predata, sysop=True)
 
-        if response.code == 302 and not data:
+        if response.status == 302 and not data:
             output(u'Changed protection level of page %s.' % self.aslink())
             return True
         else:
@@ -3289,7 +3293,7 @@
             self.site().checkBlocks(sysop = True)
             output(u'Failed to change protection level of page %s:'
                    % self.aslink())
-            output(u"HTTP response code %s" % response.code)
+            output(u"HTTP response code %s" % response.status)
             output(data)
             return False
 
@@ -3687,7 +3691,7 @@
             while True:
                 try:
                     data = self.getData()
-                except (socket.error, ServerError):
+                except (socket.error, httplib.BadStatusLine, ServerError):
                     # Print the traceback of the caught exception
                     
output(u''.join(traceback.format_exception(*sys.exc_info())))
                     output(u'DBG> got network error in _GetAll.run. ' \
@@ -5134,6 +5138,14 @@
             if not language[0].upper() + language[1:] in self.namespaces():
                 self._validlanguages.append(language)
 
+        #if persistent_http is None:
+        #    persistent_http = config.persistent_http
+        #self.persistent_http = persistent_http and self.protocol() in 
('http', 'https')
+        #if persistent_http:
+        #    if self.protocol() == 'http':
+        #        self.conn = httplib.HTTPConnection(self.hostname())
+        #    elif self.protocol() == 'https':
+        #        self.conn = httplib.HTTPSConnection(self.hostname())
         self.persistent_http = False
 
     def _userIndex(self, sysop = False):
@@ -5377,94 +5389,75 @@
         """
 
         # TODO: add the authenticate stuff here
-        if self.hostname() in config.authenticate.keys():
-            uo = authenticateURLopener
+
+        #if False: #self.persistent_http:
+        #    conn = self.conn
+        #else:
+        if config.proxy['host']:
+            conn = httplib.HTTPConnection(config.proxy['host'])
+            proxyPutAddr = '%s://%s%s' % (self.protocol(), self.hostname(), 
address)
+            conn.putrequest('POST', proxyPutAddr)
+            if type(config.proxy['auth']) == tuple:
+                import base64
+                authcode = base64.b64encode("%s:%s" % 
(config.proxy['auth'][0], config.proxy['auth'][1]) )
+                conn.putheader('Proxy-Authorization', "Basic %s" % authcode )
+        
         else:
-            if config.proxy['host'] and type(config.proxy['auth']) == tuple:
-                proxyHandle = {'http':'http://%s:%...@%s' % 
(config.proxy['auth'][0], config.proxy['auth'][1], config.proxy['host'] )}
-            elif config.proxy['host']:
-                proxyHandle = {'http':'http://%s' % config.proxy['host'] }
-            else:
-                proxyHandle = None
+            if self.protocol() == 'http':
+                conn = httplib.HTTPConnection(self.hostname())
+            elif self.protocol() == 'https':
+                conn = httplib.HTTPSConnection(self.hostname())
             
-            uo = MyURLopener(proxies = proxyHandle)
-            uo.addheader('Cookie', cookies)
-            if compress:
-                uo.addheader('Accept-encoding', 'gzip')
+            conn.putrequest('POST', address)
+        
+        # Encode all of this into a HTTP request
+        # otherwise, it will crash, as other protocols are not supported
+
         if address[-1] == "?":
             address = address[:-1]
-        url = '%s://%s%s' % (self.protocol(), self.hostname(), address)
+        if self.hostname() in config.authenticate.keys():
+            import base64
+            authcode = base64.b64encode("%s:%s" % 
(config.authenticate[self.hostname()][0], 
config.authenticate[self.hostname()][1]) )
+            conn.putheader("Authorization", "Basic %s" % authcode )
+        
+        conn.putheader('Content-Length', str(len(data)))
+        conn.putheader('Content-type', contentType)
+        conn.putheader('User-agent', useragent)
+        if cookies:
+            conn.putheader('Cookie', cookies)
+        #if False: #self.persistent_http:
+        #    conn.putheader('Connection', 'Keep-Alive')
+        if compress:
+            conn.putheader('Accept-encoding', 'gzip')
+        conn.endheaders()
+        conn.send(data)
 
-        # Try to retrieve the page until it was successfully loaded (just in
-        # case the server is down or overloaded).
-        # Wait for retry_idle_time minutes (growing!) between retries.
-        retry_idle_time = 1
-        while True:
-            try:
-                if self.hostname() in config.authenticate.keys():
-                    request = urllib2.Request(url, data)
-                    request.add_header('User-agent', useragent)
-                    opener = urllib2.build_opener()
-                    f = opener.open(request)
-                else:
-                    f = uo.open(url, data)
+        # Prepare the return values
+        # Note that this can raise network exceptions which are not
+        # caught here.
+        try:
+            response = conn.getresponse()
+        except httplib.BadStatusLine:
+            # Blub.
+            conn.close()
+            conn.connect()
+            return self.postData(address, data, contentType, sysop, compress, 
cookies)
 
-                # read & info can raise socket.error
-                text = f.read()
-                headers = f.info()
-                break
-            except KeyboardInterrupt:
-                raise
-            except Exception, e:
-                if retry:
-                    # We assume that the server is down. Wait some time, then 
try again.
-                    output(u"%s" % e)
-                    output(u"WARNING: Could not open '%s'. Maybe the server 
or" % url)
-                    output(u"your connection is down. Retrying in %i 
minutes..." % retry_idle_time)
-                    time.sleep(retry_idle_time * 60)
-                    # Next time wait longer, but not longer than half an hour
-                    retry_idle_time *= 2
-                    if retry_idle_time > 30:
-                        retry_idle_time = 30
-                else:
-                    raise
+        data = response.read()
 
-        contentType = headers.get('content-type', '')
-        contentEncoding = headers.get('content-encoding', '')
+        if compress and response.getheader('Content-Encoding') == 'gzip':
+            data = decompress_gzip(data)
 
-        # Ensure that all sent data is received
-        if int(headers.get('content-length', '0')) != len(text) and 
'content-length' in headers:
-            output(u'Warning! len(text) does not match content-length: %s != 
%s' % \
-                (len(text), headers.get('content-length')))
-            return self.postData(path, address, data, contentType, sysop, 
compress, cookie)
+        data = data.decode(self.encoding())
+        response.close()
 
-        if compress and contentEncoding == 'gzip':
-            text = decompress_gzip(text)
+        if True: #not self.persistent_http:
+            conn.close()
 
-        R = re.compile('charset=([^\'\";]+)')
-        m = R.search(contentType)
-        if m:
-            charset = m.group(1)
-        else:
-            if verbose:
-                output(u"WARNING: No character set found.")
-            # UTF-8 as default
-            charset = 'utf-8'
-        # Check if this is the charset we expected
-        self.checkCharset(charset)
-        # Convert HTML to Unicode
-        try:
-            text = unicode(text, charset, errors = 'strict')
-        except UnicodeDecodeError, e:
-            print e
-            output(u'ERROR: Invalid characters found on %s://%s%s, replaced by 
\\ufffd.' % (self.protocol(), self.hostname(), path))
-            # We use error='replace' in case of bad encoding.
-            text = unicode(text, charset, errors = 'replace')
-
         # If a wiki page, get user data
-        self._getUserDataOld(text, sysop = sysop)
+        self._getUserDataOld(data, sysop = sysop)
 
-        return f, text
+        return response, data
 
     def getUrl(self, path, retry = None, sysop = False, data = None,
                compress = True, no_hostname = False, cookie_only=False, 
back_response=False):
@@ -5531,8 +5524,10 @@
                 if retry:
                     # We assume that the server is down. Wait some time, then 
try again.
                     output(u"%s" % e)
-                    output(u"WARNING: Could not open '%s'. Maybe the server 
or" % url)
-                    output("your connection is down. Retrying in %i 
minutes..." % retry_idle_time)
+                    output(u"""\
+WARNING: Could not open '%s'. Maybe the server or
+your connection is down. Retrying in %i minutes..."""
+                           % (url, retry_idle_time))
                     time.sleep(retry_idle_time * 60)
                     # Next time wait longer, but not longer than half an hour
                     retry_idle_time *= 2
@@ -5550,6 +5545,9 @@
         if int(headers.get('content-length', '0')) != len(text) and 
'content-length' in headers:
             output(u'Warning! len(text) does not match content-length: %s != 
%s' % \
                 (len(text), headers.get('content-length')))
+            #if False: #self.persistent_http
+            #    self.conn.close()
+            #    self.conn.connect()
             return self.getUrl(path, retry, sysop, data, compress, 
no_hostname, cookie_only, back_response)
 
         if compress and contentEncoding == 'gzip':



_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to