[ckan-dev] Upload file through the API.

Pabitra Dash pkdash_reena at hotmail.com
Tue Sep 24 15:25:52 UTC 2013


I agree that it would be a great feature to have "uploading files" out of the box in CKAN so that local calls can be made to upload files.  I have a great need for this functionality that now I am able to achieve by using some code from the storage (storage.py) controller in CKAN.
 
Pabitra
 

 
Date: Tue, 24 Sep 2013 12:01:37 +0100
From: rgomes.info at gmail.com
To: ckan-dev at lists.okfn.org
CC: BU1G at tmf.kk.dk
Subject: Re: [ckan-dev] Upload file through the API.


  
    
  
  
    I was using this approach too but I
      found it a bit inconvenient.

      In my case, I have everything running on the same box and I would
      like to attach files "directly" (not via the network), in order to
      achieve better performance.

      

      So, I'm using the OFS API https://github.com/okfn/ofs
      in order to insert files into the file store and the Action API
      (method resource_create) in order to insert a resource in a
      package.

      I'm still working on it. For some unknown reason, despite the
      attached file "is there", I cannot download the file when I click
      on the FileStore URL which is available in CKAN.

      

      I've coded the classes in a ways that everything can be used bot
      locally (for better performance) or remotely.

      My focus is on the local calls. In the case of remote calls, it
      would be basically only move code from CkanClient and some
      adjustments... but I'm not working on it.

      

      It would be great if this "uploading files" would be available out
      of the box.

      

      If there's anyone interested on what I'm doing (and would like to
      help!) please let me know.

      This would lead me to share the code on github more quickly than
      I'm planning to.

      

      Cheers

      

      Richard Gomes

        http://rgomes.info

        http://www.linkedin.com/in/rgomes

        mobile: +44(77)9955-6813

        inum: +883(5100)0800-9804

        

      
      On 24/09/13 08:39, Henrik Aagaard Sørensen wrote:

    
    
      
      
      
      
        
          
            Just to answer myself and ask for some
                other help, this code works for uploading a file to a
                package (not a ressource):
             
            ckan =
                ckanclient.CkanClient(base_location=CKAN-URL',
                api_key=CKAN-API-KEY)
            ckan.upload_file(FILENAME)
            ckan.add_package_resource(DATASET,
                FILENAME, name=FILENAME, resource_type='data',
                format='csv')
             
            However, when running the code multiple
                times, for updating the dataset with a new file, it
                fails with the following:
             
            Traceback (most recent call last):
              File "oracle_csv_ckan.py", line 27, in
                <module>
                ckan.add_package_resource(DATASET,
                FILENAME, name=FILENAME, resource_type='data',
                format='csv')
              File "ckanclient/ckanclient/__init__.py",
                line 630, in add_package_resource
                url, msg = self.upload_file(file_path)
              File "ckanclient/ckanclient/__init__.py",
                line 577, in upload_file
                auth_dict =
                self.storage_auth_get('/form/'+file_key, {})
              File "ckanclient/ckanclient/__init__.py",
                line 447, in storage_auth_get
                self.open_url(url, payload,
                method="POST")
              File "ckanclient/ckanclient/__init__.py",
                line 203, in open_url
                raise
                CkanApiConflictError(self.last_status)
            ckanclient.CkanApiConflictError: 409
             
            Is this due to the fact that I’ve already
                uploaded a file with the same name?
             
            How can I just replace/update a file from a
                resource?
             
            I would like to replace a specific package
                resource as developers most likely are using the
                resource ID for getting data, and then I cannot just
                delete a file and upload a new. I need to replace the
                data in an existing resource.
          
        
      
      

      
      

      _______________________________________________
ckan-dev mailing list
ckan-dev at lists.okfn.org
http://lists.okfn.org/mailman/listinfo/ckan-dev
Unsubscribe: http://lists.okfn.org/mailman/options/ckan-dev

    
    

  


_______________________________________________
ckan-dev mailing list
ckan-dev at lists.okfn.org
http://lists.okfn.org/mailman/listinfo/ckan-dev
Unsubscribe: http://lists.okfn.org/mailman/options/ckan-dev 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20130924/9d92328f/attachment-0001.html>


More information about the ckan-dev mailing list