From 387ed2010ffbc144ec592d3454da3e4437b2d879 Mon Sep 17 00:00:00 2001
From: vermeul <swen@ethz.ch>
Date: Fri, 28 Sep 2018 13:17:21 +0200
Subject: [PATCH] fixed set_properties. Does not directly update the object,
 just sets the property values

---
 pybis/src/python/pybis/dataset.py    | 8 +++++++-
 pybis/src/python/pybis/experiment.py | 7 ++++---
 pybis/src/python/pybis/property.py   | 4 +++-
 pybis/src/python/pybis/sample.py     | 5 ++++-
 4 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/pybis/src/python/pybis/dataset.py b/pybis/src/python/pybis/dataset.py
index 14268d96e1d..4b6fc1ac8b2 100755
--- a/pybis/src/python/pybis/dataset.py
+++ b/pybis/src/python/pybis/dataset.py
@@ -141,7 +141,13 @@ class DataSet(OpenBisObject):
         return
 
     def set_properties(self, properties):
-        self.openbis.update_dataset(self.permId, properties=properties)
+        """expects a dictionary of property names and their values.
+        Does not save the dataset.
+        """
+        for prop in properties.keys():
+            setattr(self.p, prop, properties[prop])
+
+    set_props = set_properties
 
     def download(self, files=None, destination=None, wait_until_finished=True, workers=10,
         linked_dataset_fileservice_url=None, content_copy_index=0):
diff --git a/pybis/src/python/pybis/experiment.py b/pybis/src/python/pybis/experiment.py
index e7a88eaadab..972be3c25de 100644
--- a/pybis/src/python/pybis/experiment.py
+++ b/pybis/src/python/pybis/experiment.py
@@ -91,7 +91,10 @@ class Experiment(OpenBisObject):
         return html
 
     def set_properties(self, properties):
-        self.openbis.update_experiment(self.permId, properties=properties)
+        for prop in properties.keys():
+            setattr(self.p, prop, properties[prop])
+
+    set_props = set_properties
 
     def save(self):
         if self.is_new:
@@ -180,5 +183,3 @@ class Experiment(OpenBisObject):
 
     del_objects = del_samples # Alias
 
-
-
diff --git a/pybis/src/python/pybis/property.py b/pybis/src/python/pybis/property.py
index f9633f28bd8..dc6a8928fe1 100644
--- a/pybis/src/python/pybis/property.py
+++ b/pybis/src/python/pybis/property.py
@@ -61,7 +61,9 @@ class PropertyHolder():
             voc = self._openbis.get_terms(name)
             value = value.upper()
             if value not in voc.df['code'].values:
-                raise ValueError("Value must be one of these terms: " + ", ".join(voc.df['code'].values))
+                raise ValueError("Value for attribute {} must be one of these terms: {}".format(
+                    name, ", ".join(voc.df['code'].values)
+                ))
         elif data_type in ('INTEGER', 'BOOLEAN', 'VARCHAR'):
             if not check_datatype(data_type, value):
                 raise ValueError("Value must be of type {}".format(data_type))
diff --git a/pybis/src/python/pybis/sample.py b/pybis/src/python/pybis/sample.py
index 500a2af1d10..4d3bb025ae8 100644
--- a/pybis/src/python/pybis/sample.py
+++ b/pybis/src/python/pybis/sample.py
@@ -94,7 +94,10 @@ class Sample(OpenBisObject):
         return self.a.__repr__()
 
     def set_properties(self, properties):
-        self.openbis.update_sample(self.permId, properties=properties)
+        for prop in properties.keys():
+            setattr(self.p, prop, properties[prop])
+
+    set_props = set_properties
 
     def save(self):
         props = self.p._all_props()
-- 
GitLab