[Pywikipedia-svn] SVN: [7339] branches/rewrite/pywikibot/data/api.py
russblau at svn.wikimedia.org
russblau at svn.wikimedia.org
Wed Sep 30 01:23:04 UTC 2009
Revision: 7339
Author: russblau
Date: 2009-09-30 01:23:04 +0000 (Wed, 30 Sep 2009)
Log Message:
-----------
Add ability to assemble multipart/form-data messages; will be needed for implementation of upload api, but for now is disabled.
Modified Paths:
--------------
branches/rewrite/pywikibot/data/api.py
Modified: branches/rewrite/pywikibot/data/api.py
===================================================================
--- branches/rewrite/pywikibot/data/api.py 2009-09-29 20:33:35 UTC (rev 7338)
+++ branches/rewrite/pywikibot/data/api.py 2009-09-30 01:23:04 UTC (rev 7339)
@@ -186,6 +186,8 @@
"""
from pywikibot.comms import http
+ from email.mime.multipart import MIMEMultipart
+ from email.mime.nonmultipart import MIMENonMultipart
params = self.http_params()
if self.site._loginstatus == -3:
@@ -197,6 +199,7 @@
"protect", "block", "unblock"
)
self.site.throttle(write=write)
+ mime = False # debugging
uri = self.site.scriptpath() + "/api.php"
try:
ssl = False
@@ -205,10 +208,30 @@
ssl = True
elif config.use_SSL_always:
ssl = True
- rawdata = http.request(self.site, uri, ssl, method="POST",
- headers={'Content-Type':
- 'application/x-www-form-urlencoded'},
- body=params)
+ if mime:
+ global container
+ # construct a MIME message containing all API key/values
+ container = MIMEMultipart(_subtype='form-data')
+ for key in self.params:
+ submsg = MIMENonMultipart("text", "plain")
+ submsg.add_header("Content-disposition", "form-data",
+ name=key)
+ submsg.set_payload(self.params[key])
+ container.attach(submsg)
+ # strip the headers to get the HTTP message body
+ body = container.as_string()
+ marker = "\n\n" # separates headers from body
+ eoh = body.find(marker)
+ body = body[ eoh + len(marker): ]
+ # retrieve the headers from the MIME object
+ mimehead = dict(container.items())
+ rawdata = http.request(self.site, uri, ssl, method="POST",
+ headers=mimehead, body=body)
+ else:
+ rawdata = http.request(self.site, uri, ssl, method="POST",
+ headers={'Content-Type':
+ 'application/x-www-form-urlencoded'},
+ body=params)
except Server504Error:
logger.debug(u"Caught 504 error")
raise
More information about the Pywikipedia-svn
mailing list