6 class Error(Exception):
9 class MissingModule(Error):
12 class MissingFiles(Error):
15 class MissingEnvironemntVariable(Error):
18 class FileReadError(Error):
21 class JSONParsingError(Error):
25 import simplejson as json
27 raise MissingModule('Unable to load JSON module. Missing module?')
29 class MCollectiveAction(object):
31 _environment_variables = [ 'MCOLLECTIVE_REQUEST_FILE',
32 'MCOLLECTIVE_REPLY_FILE' ]
35 self._info = sys.__stdout__
36 self._error = sys.__stderr__
38 for entry in '_reply', '_request':
39 self.__dict__[entry] = {}
41 self._arguments = sys.argv[1:]
43 if len(self._arguments) < 2:
45 for variable in self._environment_variables:
46 self._arguments.append(os.environ[variable])
48 raise MissingEnvironemntVariable("Environment variable `%s' "
49 "is not set." % variable)
51 self._request_file, self._reply_file = self._arguments
53 if len(self._request_file) == 0 or len(self._reply_file) == 0:
54 raise MissingFiles("Both request and reply files have to be set.")
56 def __setattr__(self, name, value):
57 if name.startswith('_'):
58 object.__setattr__(self, name, value)
60 self.__dict__['_reply'][name] = value
62 def __getattr__(self, name):
63 if name.startswith('_'):
64 return self.__dict__.get(name, None)
66 return self.__dict__['_reply'].get(name, None)
71 file = open(self._reply_file, 'w')
72 json.dump(self._reply, file)
74 except IOError, error:
75 raise FileReadError("Unable to open reply file `%s': %s" %
76 (self._reply_file, error))
78 def info(self, message):
79 print >> self._info, message
82 def error(self, message):
83 print >> self._error, message
86 def fail(self, message, exit_code=1):
98 file = open(self._request_file, 'r')
99 self._request = json.load(file)
101 except IOError, error:
102 raise FileReadError("Unable to open request file `%s': %s" %
103 (self._request_file, error))
104 except json.JSONDecodeError, error:
105 raise JSONParsingError("An error occurred during parsing of "
106 "the JSON data in the file `%s': %s" %
107 (self._request_file, error))
112 # vim: set ts=4 sw=4 et :