diff options
author | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2014-02-24 18:21:33 +0000 |
---|---|---|
committer | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2014-03-21 16:47:28 +0000 |
commit | 1de342b8a4cf13b295805855bfaa341bcd86277e (patch) | |
tree | 2b550a0d60532446dad50ee3ecc703a90bb6d780 /distbuild/protocol.py | |
parent | f4b503b036f76c23c4f2cb99ca6596823b323035 (diff) | |
download | morph-1de342b8a4cf13b295805855bfaa341bcd86277e.tar.gz |
Add the distbuild libs
Diffstat (limited to 'distbuild/protocol.py')
-rw-r--r-- | distbuild/protocol.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/distbuild/protocol.py b/distbuild/protocol.py new file mode 100644 index 00000000..5d693761 --- /dev/null +++ b/distbuild/protocol.py @@ -0,0 +1,93 @@ +# distbuild/protocol.py -- abstractions for the JSON messages +# +# Copyright (C) 2014 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.. + + +'''Construct protocol message objects (dicts).''' + + +_types = { + 'build-request': [ + 'id', + 'repo', + 'ref', + 'morphology', + ], + 'build-progress': [ + 'id', + 'message', + ], + 'build-steps': [ + 'id', + 'steps', + ], + 'step-started': [ + 'id', + 'step_name', + 'worker_name', + ], + 'step-output': [ + 'id', + 'step_name', + 'stdout', + 'stderr', + ], + 'step-finished': [ + 'id', + 'step_name', + ], + 'step-failed': [ + 'id', + 'step_name', + ], + 'build-finished': [ + 'id', + 'urls', + ], + 'build-failed': [ + 'id', + 'reason', + ], + 'exec-request': [ + 'id', + 'argv', + 'stdin_contents', + ], + 'exec-cancel': [ + 'id', + ], + 'http-request': [ + 'id', + 'url', + 'method', + ], +} + + +def message(message_type, **kwargs): + assert message_type in _types + required_fields = _types[message_type] + + for name in required_fields: + assert name in kwargs, 'field %s is required' % name + + for name in kwargs: + assert name in required_fields, 'field %s is not allowed' % name + + msg = dict(kwargs) + msg['type'] = message_type + return msg + |