Skip to content

Commit 1ca2ac9

Browse files
authored
Merge pull request #85 from frictionlessdata/issue-84-upload-not-wroking-properly
Fix #84: Get uploaded datapackage file from request
2 parents 00451cf + a476822 commit 1ca2ac9

3 files changed

Lines changed: 24 additions & 11 deletions

File tree

ckanext/datapackager/controllers/datapackage.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,14 @@ def import_datapackage():
4646

4747
try:
4848
if hasattr(toolkit.request, "form") and len(list(toolkit.request.form.keys())) > 0:
49-
params = toolkit.request.form
49+
params = toolkit.request.form.to_dict()
5050
else:
5151
params = toolkit.request.params
5252

53+
if toolkit.check_ckan_version(min_version="2.9"):
54+
if 'upload' in toolkit.request.files:
55+
params['upload'] = toolkit.request.files['upload']
56+
5357
dataset = toolkit.get_action('package_create_from_datapackage')(
5458
context,
5559
params,

ckanext/datapackager/logic/action/create.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ def _load_and_validate_datapackage(url=None, upload=None):
8888
try:
8989

9090
if _upload_attribute_is_valid(upload):
91-
dp = datapackage.DataPackage(upload.file)
91+
if toolkit.check_ckan_version(min_version="2.9"):
92+
dp = datapackage.DataPackage(upload)
93+
else:
94+
dp = datapackage.DataPackage(upload.file)
9295
else:
9396

9497
dp = datapackage.DataPackage(url)
@@ -180,16 +183,20 @@ def _create_and_upload_local_resource(context, resource):
180183
def _create_and_upload_resource(context, resource, the_file):
181184
resource['url'] = 'url'
182185
resource['url_type'] = 'upload'
183-
resource['upload'] = FileStorage(the_file, the_file.name, the_file.name)
186+
187+
if toolkit.check_ckan_version(min_version="2.9"):
188+
resource['upload'] = FileStorage(the_file, the_file.name, the_file.name)
189+
else:
190+
resource['upload'] = _UploadLocalFileStorage(the_file)
184191

185192
toolkit.get_action('resource_create')(context, resource)
186193

187194

188195
def _upload_attribute_is_valid(upload):
189-
return hasattr(upload, 'file') and hasattr(upload.file, 'read')
190-
196+
return hasattr(upload, 'read') or hasattr(upload, 'file') and hasattr(upload.file, 'read')
191197

192-
class _UploadLocalFileStorage(FileStorage):
198+
# Used only in CKAN < 2.9
199+
class _UploadLocalFileStorage(cgi.FieldStorage):
193200
def __init__(self, fp, *args, **kwargs):
194201
self.name = fp.name
195202
self.filename = fp.name

ckanext/datapackager/tests/logic/action/test_create.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
import tempfile
3-
from six import StringIO
3+
from six import StringIO, BytesIO
44
import six
55
try:
66
from unittest import mock
@@ -48,9 +48,11 @@ def test_it_raises_if_datapackage_is_unsafe(self):
4848
]
4949
}
5050

51-
upload = mock.MagicMock()
52-
upload.file = StringIO(json.dumps(datapackage))
53-
51+
if toolkit.check_ckan_version(min_version="2.9"):
52+
upload = StringIO(json.dumps(datapackage))
53+
else:
54+
upload = mock.MagicMock()
55+
upload.file = StringIO(json.dumps(datapackage))
5456

5557
with pytest.raises(toolkit.ValidationError):
5658
helpers.call_action('package_create_from_datapackage', upload=upload)
@@ -299,7 +301,7 @@ def test_it_allows_uploading_a_datapackage(self):
299301
tmpfile.flush()
300302

301303
dataset = helpers.call_action('package_create_from_datapackage',
302-
upload=_UploadFile(tmpfile))
304+
upload=tmpfile)
303305
assert dataset['name'] == 'foo'
304306

305307

0 commit comments

Comments
 (0)