Upload fails for some resources!
MWE (should run for @romin.benfer as is, since I just added you to the TestProject)
from getpass import getpass
import coscine
from datetime import datetime
client = coscine.Client(token=getpass())
client.version
#>>> 0.9.2
test_pr = client.project('TestProject')
res2 = test_pr.resource('AtomisticSimulation')
res2.profile
#>>> 'https://purl.org/coscine/ap/sfb1394/AtomisticSimulation/'
form2 = res2.metadata_form()
form2['ID'] = 'any name'
form2['User'] = 'Niklas'
form2['Date'] = datetime.now()
with open('some.txt', 'w') as f:
f.write('some')
res2.upload('MyFileName', 'some.txt', form2)
fails with
---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
File /u/system/SLES12/soft/pyiron/dev/anaconda3/lib/python3.8/site-packages/coscine/client.py:382, in Client._request(self, method, uri, **kwargs)
381 response = self.session.request(method, uri, **kwargs)
--> 382 response.raise_for_status()
383 logger.debug("response: %s", str(response.content))
File /u/system/SLES12/soft/pyiron/dev/anaconda3/lib/python3.8/site-packages/requests/models.py:1021, in Response.raise_for_status(self)
1020 if http_error_msg:
-> 1021 raise HTTPError(http_error_msg, response=self)
HTTPError: 400 Client Error: Bad Request for url: https://coscine.rwth-aachen.de/coscine/api/Coscine.Api.Blob/Blob/cb6bd6fb-2e84-4f9b-a45f-b2bccc9ea025?path=MyFileName
The above exception was the direct cause of the following exception:
RuntimeError Traceback (most recent call last)
Cell In[55], line 1
----> 1 res2.upload('MyFileName', 'some.txt', form2.generate())
File /u/system/SLES12/soft/pyiron/dev/anaconda3/lib/python3.8/site-packages/coscine/resource.py:537, in Resource.upload(self, key, file, metadata, callback)
535 with open(file, "rb") as file_handle:
536 self._upload_file_metadata(key, metadata)
--> 537 self._upload_file_data(key, file_handle, callback)
538 else:
539 raise TypeError("Argument `file` has unexpected type!")
File /u/system/SLES12/soft/pyiron/dev/anaconda3/lib/python3.8/site-packages/coscine/resource.py:571, in Resource._upload_file_data(self, key, file_handle, callback)
569 headers = {"Content-Type": monitor.content_type}
570 params = {"path": key}
--> 571 self.client.put(uri, data=monitor, headers=headers, params=params)
File /u/system/SLES12/soft/pyiron/dev/anaconda3/lib/python3.8/site-packages/coscine/client.py:463, in Client.put(self, uri, **kwargs)
432 def put(self, uri: str, **kwargs) -> requests.Response:
433 """
434 Performs a PUT request to the Coscine API.
435
(...)
460 The response of the Coscine server as a requests.Response object.
461 """
--> 463 return self._request("PUT", uri, **kwargs)
File /u/system/SLES12/soft/pyiron/dev/anaconda3/lib/python3.8/site-packages/coscine/client.py:390, in Client._request(self, method, uri, **kwargs)
388 if exc.response.status_code == 401:
389 raise PermissionError("Invalid Coscine API token!") from exc
--> 390 raise RuntimeError(
391 "Unspecified error occurred when communicating "
392 "with the Coscine servers"
393 ) from exc
RuntimeError: Unspecified error occurred when communicating with the Coscine servers
The same workflow works flawless for some other resources. One difference I see, this resource has some controlled field with a vocabulary...