Ticket #364: invenio_connector_fileupload.patch

File invenio_connector_fileupload.patch, 2.4 KB (added by pferreir, 3 years ago)

I have fixed it like this for now. Maybe it will be useful for you guys?

  • invenio_connector.py

    old new  
    4646import tempfile 
    4747import os 
    4848import time 
     49from email import mime, Encoders 
     50import StringIO 
    4951 
    5052try: 
    5153    # if we are running locally, we can optimize :-) 
     
    6264    Creates an connector to a server running Invenio 
    6365    """ 
    6466 
    65     def __init__(self, url, local_import_path="invenio"): 
     67    def __init__(self, url, local_import_path="invenio", 
     68                 user_agent="invenio_connector"): 
    6669        """ 
    6770        Initialize a new instance of the server at given URL. 
    6871 
     
    8184                             will lead to "import invenio.dbquery" 
    8285         """ 
    8386        self.server_url = url 
     87        self.user_agent = user_agent 
    8488        self.cached_queries = {} 
    8589        self.cached_records = {} 
    8690        self.cached_baskets = {} 
     
    219223            marcxml_file_d.close() 
    220224            return task_low_level_submission("bibupload", "", mode, marcxml_filepath) 
    221225        else: 
    222             params = urllib.urlencode({'file': marcxml, 
    223                                         'mode': mode}) 
    224             return urllib2.urlopen(self.server_url + "/batchuploader/robotupload", params) 
     226            # add parameters 
     227            tpart = mime.Text.MIMEText(mode) 
     228            tpart.add_header("Content-Disposition", "form-data", name='mode') 
     229 
     230            # add file 
     231            fpart = mime.Base.MIMEBase('application', "octet-stream") 
     232            fpart.set_payload(marcxml) 
     233            fpart.add_header('Content-Disposition', 
     234                             'form-data; name="file"; filename="marcxml_upload.xml"') 
     235 
     236            Encoders.encode_base64(fpart) 
     237 
     238            BOUNDARY = '------------------------------6510e6bc42e6' 
     239 
     240            data = BOUNDARY + '\n' + fpart.as_string() + '\n\n' + \ 
     241                   BOUNDARY + '\n' + tpart.as_string() + '\n' + BOUNDARY + '--\n' 
     242 
     243            data = data.replace('\n', '\r\n') 
     244 
     245            req = urllib2.Request(self.server_url + "/batchuploader/robotupload", 
     246                                  data, 
     247                                  {'User-Agent': self.user_agent, 
     248                                   'Content-Type': 'multipart/form-data; boundary=%s' % 
     249                                   BOUNDARY[2:]}) 
     250            return urllib2.urlopen(req) 
    225251 
    226252    def _parse_results(self, results, cached_records): 
    227253        """