diff --git a/src/python/PyBis/pybis/pybis.py b/src/python/PyBis/pybis/pybis.py index 75a670f1b2cce5cc97eabeb3d1069ed5a3d9d932..a14dc1bba3354638e73d482ec48fdb801fddfe78 100644 --- a/src/python/PyBis/pybis/pybis.py +++ b/src/python/PyBis/pybis/pybis.py @@ -641,7 +641,7 @@ class Openbis: "get_tags()", "get_terms()", 'new_space(name, description)', - 'new_project(space, code, description)', + 'new_project(space, code, description, attachments)', 'new_experiment(type, code, project, props={})', 'new_sample(type, space, project, experiment, parents)', 'new_object(type, space, project, experiment, parents)', # 'new_sample(type, space, project, experiment)' alias @@ -1357,13 +1357,16 @@ class Openbis: fo[option] = fetch_option[option] return fo - def get_project(self, projectId): + def get_project(self, projectId, only_data=False): options = ['space', 'registrator', 'modifier', 'attachments'] - if is_identifier(projectId): + if is_identifier(projectId) or is_permid(projectId): request = self._create_get_request( 'getProjects', 'project', projectId, options ) resp = self._post_request(self.as_v3, request) + if only_data: + return resp[projectId] + return Project(self, resp[projectId]) else: @@ -1380,6 +1383,9 @@ class Openbis: resp = self._post_request(self.as_v3, request) if len(resp['objects']) == 0: raise ValueError("No such project: %s" % projectId) + if only_data: + return resp['objects'][0] + return Project(self, resp['objects'][0]) def get_projects(self, space=None, code=None): @@ -3410,7 +3416,7 @@ class Space(OpenBisObject): return [ 'code', 'permId', 'description', 'registrator', 'registrationDate', 'modificationDate', 'get_projects()', - "new_project(code='', description='')", + "new_project(code='', description='', attachments)", 'get_samples()', 'delete()' ] @@ -3866,9 +3872,12 @@ class Project(OpenBisObject): def save(self): if self.is_new: request = self._new_attrs() - self.openbis._post_request(self.openbis.as_v3, request) + resp = self.openbis._post_request(self.openbis.as_v3, request) self.a.__dict__['_is_new'] = False print("Project successfully created.") + new_project_data = self.openbis.get_project(resp[0]['permId'], only_data=True) + self._set_data(new_project_data) + return self else: request = self._up_attrs() self.openbis._post_request(self.openbis.as_v3, request) diff --git a/src/python/PyBis/tests/test_project.py b/src/python/PyBis/tests/test_project.py index 2b7d4f4429a84f1a3a3437a7db6ad0f6ede36ce7..033360fc2923129ce2be6190de601d07f6f67386 100644 --- a/src/python/PyBis/tests/test_project.py +++ b/src/python/PyBis/tests/test_project.py @@ -4,6 +4,7 @@ import re import pytest import time +import os from pybis import DataSet from pybis import Openbis @@ -28,3 +29,23 @@ def test_create_delete_project(space): with pytest.raises(ValueError): project_no_longer_exists=o.get_project(project_name) assert "project {} should have been deleted".format(project_name) is None + + +def test_create_project_with_attachment(space): + o=space.openbis + + timestamp = time.strftime('%a_%y%m%d_%H%M%S').upper() + project_name = 'project_'+timestamp + filename = os.path.join(os.path.dirname(__file__), 'testfile') + + if not os.path.exists(filename): + raise ValueError("File not found: {}".format(filename)) + + project=o.new_project(space=space, code=project_name, attachments=filename) + assert project.attachments is not None + project.save() + + project_exists=o.get_project(project_name) + assert project_exists is not None + assert project_exists.attachments is not None + diff --git a/src/python/PyBis/tests/testfile b/src/python/PyBis/tests/testfile new file mode 100644 index 0000000000000000000000000000000000000000..778168770e0e8f9eefb4c99e657401c8769c1add --- /dev/null +++ b/src/python/PyBis/tests/testfile @@ -0,0 +1 @@ +Hello, Test!