From 997cf059491f9d30fe4a4028f9960305af864890 Mon Sep 17 00:00:00 2001 From: Samuel Gaist <samuel.gaist@idiap.ch> Date: Mon, 6 May 2019 15:09:48 +0200 Subject: [PATCH] [plotterparameter] Fix writing The write method was wrong as well as there were missing pieces in the class for it to work properly. --- beat/core/plotterparameter.py | 35 +++++++++++++++++++++- beat/core/prototypes/plotterparameter.json | 6 ++-- beat/core/test/test_plotterparameter.py | 31 +++++++++++++++++-- 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/beat/core/plotterparameter.py b/beat/core/plotterparameter.py index 42ccb3e0..2f660246 100644 --- a/beat/core/plotterparameter.py +++ b/beat/core/plotterparameter.py @@ -42,6 +42,8 @@ plotterparameter Validation for plotterparameters """ +import simplejson as json + from . import schema from . import prototypes from . import utils @@ -241,6 +243,16 @@ class Plotterparameter(object): self._name = value self.storage = Storage(self.prefix, value) + @property + def description(self): + """The short description for this object""" + return self.data.get("description", None) + + @description.setter + def description(self, value): + """Sets the short description for this object""" + self.data["description"] = value + @property def documentation(self): """The full-length description for this object""" @@ -272,6 +284,27 @@ class Plotterparameter(object): return self.storage.hash() + def json_dumps(self, indent=4): + """Dumps the JSON declaration of this object in a string + + + Parameters: + + indent (int): The number of indentation spaces at every indentation + level + + + Returns: + + str: The JSON representation for this object + + """ + + return json.dumps(self.data, indent=indent, cls=utils.NumpyJSONEncoder) + + def __str__(self): + return self.json_dumps() + def write(self, storage=None): """Writes contents to prefix location @@ -287,4 +320,4 @@ class Plotterparameter(object): raise RuntimeError("plotterparameter has no name") storage = self.storage # overwrite - storage.save(str(self), self.code, self.description) + storage.save(str(self), self.description) diff --git a/beat/core/prototypes/plotterparameter.json b/beat/core/prototypes/plotterparameter.json index a2b3ff5a..f0bfd7a9 100644 --- a/beat/core/prototypes/plotterparameter.json +++ b/beat/core/prototypes/plotterparameter.json @@ -1,5 +1,5 @@ { - "plotter": "plot/unknown/1", - "description": "", - "data": {} + "plotter": "plot/unknown/1", + "description": "", + "data": {} } diff --git a/beat/core/test/test_plotterparameter.py b/beat/core/test/test_plotterparameter.py index 4e67deec..ab2f1a44 100644 --- a/beat/core/test/test_plotterparameter.py +++ b/beat/core/test/test_plotterparameter.py @@ -35,27 +35,52 @@ import nose.tools -from . import prefix from ..plotterparameter import Plotterparameter +from ..plotterparameter import Storage + +from . import prefix + def test_default(): # test for the "dummy" plotterparameter p = Plotterparameter(prefix, data=None) nose.tools.assert_false(p.valid) + def test_plot_config_1(): # test for a simple plotterparameter for a simple plotter p = Plotterparameter(prefix, "plot/config/1") nose.tools.assert_true(p.valid, "\n * %s" % "\n * ".join(p.errors)) + def test_plot_invalid_1(): # test for invalid parameter name p = Plotterparameter(prefix, "plot/invalid/1") nose.tools.assert_false(p.valid) - nose.tools.assert_true(p.errors[0] == "'not_an_option' isn't a parameter for plotter user/scatter/1") + nose.tools.assert_true( + p.errors[0] == "'not_an_option' isn't a parameter for plotter user/scatter/1" + ) + def test_plot_invalid_2(): # test for invalid "plotter" field p = Plotterparameter(prefix, "plot/invalid/2") nose.tools.assert_false(p.valid) - nose.tools.assert_true(p.errors[0] == "Plotter declaration file not found: user/not_a_plotter/1") + nose.tools.assert_true( + p.errors[0] == "Plotter declaration file not found: user/not_a_plotter/1" + ) + + +def test_export(): + plotterparameter_name = "plot/config/1" + target_name = "plot/generated/1" + + obj = Plotterparameter(prefix, plotterparameter_name) + nose.tools.assert_true(obj.valid, "\n * %s" % "\n * ".join(obj.errors)) + + pp_storage = Storage(prefix, target_name) + obj.write(pp_storage) + + # load from tmp_prefix and validates + exported = Plotterparameter(prefix, target_name) + nose.tools.assert_true(exported.valid, "\n * %s" % "\n * ".join(exported.errors)) -- GitLab