1

So I have a little script that I would like to use to upload some PDFs to my citation-site-of-choice (citeulike.org)

Thing is its not working. It does this:

so want to upload /Users/willwade/Dropbox/Papers/price_promoting_643127.pdf  to  12589610
Traceback (most recent call last):
  File "citeuupload.py", line 167, in <module>
    cureader.parseUserBibTex()
  File "citeuupload.py", line 160, in parseUserBibTex
    self.uploadFileToCitation(b['citeulike-article-id'],self.localpapers+fileorfalse)
  File "citeuupload.py", line 138, in uploadFileToCitation
    resp = self.browser.submit()
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_mechanize.py", line 541, in submit
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_mechanize.py", line 203, in open
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_mechanize.py", line 230, in _mech_open
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_opener.py", line 193, in open
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 344, in _open
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 332, in _call_chain
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 1142, in http_open
  File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 1115, in do_open
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 955, in request
    self._send_request(method, url, body, headers)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 989, in _send_request
    self.endheaders(body)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 951, in endheaders
    self._send_output(message_body)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 809, in _send_output
    msg += message_body
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 544: ordinal not in range(128)

and the code:

def uploadFileToCitation(self,artid,file):
    print 'so want to upload', file, ' to ', artid
    self.browser.open('http://www.citeulike.org/user/'+cUser+'/article/'+artid)
    self.browser.select_form(name="fileupload_frm")
    self.browser.form.add_file(open(file, 'rb'), 'application/pdf', file, name='file')
    try:
        resp = self.browser.submit()
        self.wait_for_api_limit()
    except mechanize.HTTPError, e:
        print 'error'
        print e.getcode()
        print resp.read()
        exit()

NB: I can see it's reading in the file correctly (and it does exist). Also note that I'm doing this elsewhere

    self.browser = mechanize.Browser()
    self.browser.set_handle_robots(False)
    self.browser.addheaders = [
      ("User-agent", 'me@me.com citeusyncpy/1.0'),
    ]

Full code is here

willwade
  • 1,998
  • 2
  • 16
  • 22

1 Answers1

2

Try to check this similar question.

To clarify, the message is constructed in httplib from the method, URL, headers, etc. If any of these is Unicode, the whole string gets converted to Unicode (I presume this is normal Python behavior). Then if you try to append a UTF-8 string you get the error I described in the original question...

From looks of it's a problem with encoding that proper header can fix.

Also you can check this issue.

Community
  • 1
  • 1
4d4c
  • 8,049
  • 4
  • 24
  • 29
  • thanks for that. To confirm [the patch in the issue](http://bugs.python.org/issue11898) @ton1c mentioned solved the problem – willwade Aug 25 '13 at 17:48