Revision: 7408
Author:   alexsh
Date:     2009-10-09 21:34:35 +0000 (Fri, 09 Oct 2009)

Log Message:
-----------
fix bug and add API upload (current not complete, no act.)

Modified Paths:
--------------
    trunk/pywikipedia/upload.py

Modified: trunk/pywikipedia/upload.py
===================================================================
--- trunk/pywikipedia/upload.py 2009-10-09 21:28:36 UTC (rev 7407)
+++ trunk/pywikipedia/upload.py 2009-10-09 21:34:35 UTC (rev 7408)
@@ -24,7 +24,7 @@
 __version__='$Id$'
 
 import os, sys, time
-import urllib
+import urllib, mimetypes
 import wikipedia, config
 
 def post_multipart(site, address, fields, files, cookies):
@@ -63,7 +63,6 @@
     return content_type, body
 
 def get_content_type(filename):
-    import mimetypes
     return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
 
 
@@ -195,9 +194,6 @@
         # MediaWiki doesn't allow spaces in the file name.
         # Replace them here to avoid an extra confirmation form
         filename = filename.replace(' ', '_')
-        # Convert the filename (currently Unicode) to the encoding used on the
-        # target wiki
-        encodedFilename = filename.encode(self.targetSite.encoding())
         # A proper description for the submission.
         wikipedia.output(u"The suggested description is:")
         wikipedia.output(self.description)
@@ -211,6 +207,7 @@
                 # if user saved / didn't press Cancel
                 if newDescription:
                         self.description = newDescription
+        return filename
     
     def upload_image(self, debug=False):
         """Gets the image at URL self.url, and uploads it to the target wiki.
@@ -218,11 +215,42 @@
            If the upload fails, the user is asked whether to try again or not.
            If the user chooses not to retry, returns null.
         """
+        try:
+            #if config.use_api and self.useApi and 
self.targetSite.versionnumber() >= 16:
+            #    x = self.tgargetSite.api_address()
+            #    del x
+            #else:
+            raise NotImplementedError
+        except NotImplementedError:
+            return self._uploadImageOld(debug)
+        params = {
+            'action': 'upload',
+            'token': self.targetSite.getToken(),
+            'comment': self.description,
+            'filename': filename,
+            #'': '',
+        }
+        if self.uploadByUrl:
+            params['url'] = self.url
+        else:
+            params['file'] = self._contents
+        
+        data = query.GetData(params, self.targetSite)
+        
+        if 'error' in data: # error occured
+            pass
+        else:
+            return 'upload' in data
 
+    def _uploadImageOld(self, debug=False):
         self.read_file_content()
         
-        self.process_filename()
+        filename = self.process_filename()
+        # Convert the filename (currently Unicode) to the encoding used on the
+        # target wiki
+        encodedFilename = filename.encode(self.targetSite.encoding())
 
+
         formdata = {}
         formdata["wpUploadDescription"] = self.description
         formdata["wpUploadAffirm"] = "1"
@@ -263,12 +291,9 @@
                 # Just do a post with all the fields filled out
                 response, returned_html = 
self.targetSite.postForm(self.targetSite.upload_address(), formdata.items(), 
cookies = self.targetSite.cookies())
             else:
-                response, returned_html = post_multipart(self.targetSite,
-                                  self.targetSite.upload_address(),
-                                  formdata.items(),
-                                  (('wpUploadFile', encodedFilename, 
self._contents),),
-                                  cookies = self.targetSite.cookies()
-                                  )
+                response, returned_html = post_multipart(self.targetSite, 
self.targetSite.upload_address(),
+                                  formdata.items(), (('wpUploadFile', 
encodedFilename, self._contents),),
+                                  cookies = self.targetSite.cookies())
             # There are 2 ways MediaWiki can react on success: either it gives
             # a 200 with a success message, or it gives a 302 (redirection).
             # Do we know how the "success!" HTML page should look like?



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

Reply via email to