[ckan-dev] Creating resource with upload from an extension

Pedro G Silva pedro.gracio at deimos.com.pt
Fri Apr 29 09:01:36 UTC 2016


Hi Lucia
Thank you for your code. You are using the API from ckan and what I'm
looking for is using CKAN internal methods, like
this plugins.toolkit.get_action('resource_create')(context,resource_dict)

On Fri, Apr 29, 2016 at 9:15 AM, <lucia.espona at wsl.ch> wrote:

> Dear Pedro
>
> I am a just a newbie but in case this is helpful, for creating resources
> to the FileStore using the API I put an empty string as a value for URL and
> it worked, maybe you can try :) See below my code.
>
> Good luck
> Lucia
>
> ################## CREATE RESOURCE (UPLOAD FILE) #################
>
> ckan_api_url = ckan_url + 'resource_create'
> request_header = {'X-CKAN-API-Key':user_token}
>
> resource_dict = {}
> resource_dict['package_id'] = package_id
> resource_dict['name'] =  'Tree Report Table'
> resource_dict['description'] = 'Report with measurements of trees'
> resource_dict['format'] = 'csv'
> resource_dict['id'] = 'tree-data-99999-2015'
> resource_dict['url'] = ''
>
> requests.post(ckan_api_url, data=resource_dict, headers=request_header,
> files=[('upload',
> file('H:\\Envidat_project\\dev\\test\\API-test\\data\\treedata_99999_2015.txt'))])
>
> data_string = urllib.quote(json.dumps(resource_dict))
>
> # Make the HTTP request.
> response = urllib2.urlopen(request, data_string)
> assert response.code == 200
>
> # Use the json module to load CKAN's response into a dictionary.
> response_dict = json.loads(response.read())
>
> # Check the contents of the response.
> assert response_dict['success'] is True
> result = response_dict['result']
> pprint.pprint(result)
>
> _________________________________________________________
> Dr. Lucia Espona Pernas
>
> Swiss Federal Institute for Forest, Snow and Landscape Research WSL
> Hauptgebäaude Labortrakt (HL D34)
> Zürcherstrasse 111
> 8903 Birmensdorf
> Switzerland
>
> +41 44 739 28 71 phone direct
> +41 44 739 21 11 reception
>
> www.wsl.ch
>
> -----"ckan-dev" <ckan-dev-bounces at lists.okfn.org> wrote: -----
> To: Jonas Oppenlaender <jonas.oppenlaender at seme4.com>
> From: Pedro G Silva
> Sent by: "ckan-dev"
> Date: 28.04.2016 14:11
> Cc: CKAN Development Discussions <ckan-dev at lists.okfn.org>
> Subject: Re: [ckan-dev] Creating resource with upload from an extension
>
>
> Hi
> Your solution does not produce any error, although if I have resource_dict['url']
> = None,
> [ckanext.harvest.model] Validation Error: {'URL': 'Missing value'}
>
> If I had a value I get that value on the resource link, not a resource
> pointing to the filestore (or ckan internal storage).
>
> Any ideas?
> I'm thinking on using the API inside the extension, but this is a very
> hacky solution..
>
> On Wed, Apr 27, 2016 at 7:29 PM, Jonas Oppenlaender <
> jonas.oppenlaender at seme4.com> wrote:
>
>> Hi Pedro,
>>
>>
>>
>> You can just pass it an open file pointer, like this:
>>
>> resource_dict['upload'] = open(‘/path/to/file’, ‘rb’)
>>
>>
>>
>> If you use an already open file, you might need to reset the current
>> position before calling the API:
>>
>> existingfilepointer.seek(0)
>>
>>
>>
>> Regards,
>>
>> Jonas Oppenlaender
>>
>>
>>
>>
>>
>>
>>
>> *From: *Pedro G Silva <pedro.gracio at deimos.com.pt>
>> *Sent: *27 April 2016 17:51
>> *To: *CKAN Development Discussions <ckan-dev at lists.okfn.org>
>> *Subject: *[ckan-dev] Creating resource with upload from an extension
>>
>>
>>
>> Hi
>>
>> I have a custom extension which does some parsing on files and then adds
>> them to the dataset created. How should I use the field upload to pass a
>> file? Any ideas?
>>
>>
>>
>> resource_dict={}
>>
>> resource_dict['package_id'] = package_id
>>
>> resource_dict['upload'] = ????
>>
>> resource_dict['name'] = 'Product Download'
>>
>> oi = plugins.toolkit.get_action('resource_create')(context,resource_dict)
>>
>>
>>
>> --
>>
>>
>>
>>
>>
>> [image: DEIMOS Engenharia, SA] <http://www.deimos.pt>
>>
>> *Pedro Gracio Silva*
>> Aerospace Systems / Production Center
>>
>> *Av. D. Joao II, Lt 1.17.01, 10 • 1998-023 Lisboa, Portugal*
>> Ph: +351 21 893 3020 • Fax: +351 21 896 9099
>>
>>
>>
>>
>>
>>
>>
>
>
>
> --
>
>
> [image: DEIMOS Engenharia, SA] <http://www.deimos.pt>
> *Pedro Gracio Silva*
> Aerospace Systems / Production Center
>
> *Av. D. Joao II, Lt 1.17.01, 10 • 1998-023 Lisboa, Portugal*
> Ph: +351 21 893 3020 • Fax: +351 21 896 9099
>
> _______________________________________________
> ckan-dev mailing list
> ckan-dev at lists.okfn.org
> https://lists.okfn.org/mailman/listinfo/ckan-dev
> Unsubscribe: https://lists.okfn.org/mailman/options/ckan-dev
>



-- 


[image: DEIMOS Engenharia, SA] <http://www.deimos.pt>
*Pedro Gracio Silva*
Aerospace Systems / Production Center

*Av. D. Joao II, Lt 1.17.01, 10 • 1998-023 Lisboa, Portugal*
Ph: +351 21 893 3020 • Fax: +351 21 896 9099
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20160429/6908ae67/attachment-0003.html>


More information about the ckan-dev mailing list