diff --git a/beat/core/protocoltemplate.py b/beat/core/protocoltemplate.py index 11574f56ce556c944fd57238b466cd84c4c80aa4..7b932c12500dcca9de9719c4c3e8573a6cf6a493 100644 --- a/beat/core/protocoltemplate.py +++ b/beat/core/protocoltemplate.py @@ -48,6 +48,7 @@ Forward importing from :py:mod:`beat.backend.python.protocoltemplate`: import six from . import schema +from . import prototypes from beat.backend.python.protocoltemplate import Storage from beat.backend.python.protocoltemplate import ( @@ -106,18 +107,22 @@ class ProtocolTemplate(BackendProtocolTemplate): self.storage = None self.dataformats = {} # preloaded dataformats - if isinstance(data, six.string_types): # user has passed a file pointer - - self._name = data - self.storage = Storage(self.prefix, self._name) - data = self.storage.json.path - if not self.storage.json.exists(): - self.errors.append( - "Protocol template declaration file not found: %s" % data - ) - return - - # this runs basic validation, including JSON loading if required - self.data, self.errors = schema.validate("protocoltemplate", data) - if self.errors: - return # don't proceed with the rest of validation + if data is None: # loads prototype and validates it + self.data, self.errors = prototypes.load("protocoltemplate") + assert not self.errors, "\n * %s" % "\n *".join(self.errors) # nosec + else: + if isinstance(data, six.string_types): # user has passed a file pointer + + self._name = data + self.storage = Storage(self.prefix, self._name) + data = self.storage.json.path + if not self.storage.json.exists(): + self.errors.append( + "Protocol template declaration file not found: %s" % data + ) + return + + # this runs basic validation, including JSON loading if required + self.data, self.errors = schema.validate("protocoltemplate", data) + if self.errors: + return # don't proceed with the rest of validation diff --git a/beat/core/prototypes/protocoltemplate.json b/beat/core/prototypes/protocoltemplate.json new file mode 100644 index 0000000000000000000000000000000000000000..81cd94cd12dc2eb2b0414f7c855cb9229e591d0a --- /dev/null +++ b/beat/core/prototypes/protocoltemplate.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "sets": [ + { + "name": "name", + "outputs": { + "out": "user/single_integer/1" + } + } + ] +} diff --git a/beat/core/test/test_protocoltemplate.py b/beat/core/test/test_protocoltemplate.py index 526a85602e81f87e821c765d666bda27b9686684..dfc9c6fe7757a476022b08be7e48a9d8985cef25 100644 --- a/beat/core/test/test_protocoltemplate.py +++ b/beat/core/test/test_protocoltemplate.py @@ -41,6 +41,12 @@ from . import prefix, tmp_prefix from .utils import cleanup +def test_default(): + + obj = ProtocolTemplate(prefix, data=None) + nose.tools.assert_true(obj.valid, "\n * %s" % "\n * ".join(obj.errors)) + + def test_export(): for protocol_name in [ "double",