From: Maxious Date: Wed, 08 May 2013 05:04:50 +0000 Subject: use tempfile for datagov resource upload X-Git-Url: https://maxious.lambdacomplex.org/git/?p=disclosr.git&a=commitdiff&h=c1d072cc0d93a2bf5293e4ba17684e8a105a422a --- use tempfile for datagov resource upload Former-commit-id: 80eae32f084aac5c6ff933def7e5cb072c21b8fc --- --- a/documents/datagov-export.py +++ b/documents/datagov-export.py @@ -12,45 +12,17 @@ class LoaderError(Exception): pass - +import tempfile def add_package_resource_cachedurl(ckan, package_name, url, name, format, size, **kwargs): - # fileupload - ts = datetime.datetime.isoformat(datetime.datetime.now()).replace(':', '').split('.')[0] - - file_key = os.path.join(ts, name) - - auth_dict = ckan.storage_auth_get('/form/' + file_key, {}) - - fields = [(kv['name'].encode('ascii'), kv['value'].encode('ascii')) - for kv in auth_dict['fields']] (url, mime_type, content) = scrape.fetchURL(scrape.docsdb, url, "dataset_resource", "AGIMO", False) - - files = [('file', os.path.basename(file_key), content)] - - errcode, body = ckan._post_multipart(auth_dict['action'].encode('ascii'), fields, files) - - if errcode == 200: - file_metadata = ckan.storage_metadata_get(file_key) - (url, msg) = file_metadata['_location'], '' - else: - (url, msg) = '', body - # fileupload done - - if url == '': - raise CkanApiError(msg) - m = hashlib.sha1(msg) - #todo mime-type dectection based on content - r = dict(name=name, - mimetype=mime_type, - hash=m.hexdigest(), size=size, url=url) - - r.update(kwargs) - if not r.has_key('name'): r['name'] = url - - p = ckan.package_entity_get(package_name) - p['resources'].append(r) - return ckan.package_entity_put(p) + tf = tempfile.NamedTemporaryFile() + tfName = tf.name + tf.seek(0) + tf.write(content) + tf.flush() + add_package_resource (ckan, package_name, tfName, name=name, format=format, size=size) + # Instantiate the CKAN client.