def possibly_remote_command(self, host, cmd, verbosity=65): """If `host` is the localhost, excecute `cmd` in subshell. Otherwise execute `cmd` by ssh.""" if host.startswith(socket.gethostname()): output = pysh.out_err(cmd, trace_commands=log.get_verbose() >= verbosity) else: output = pysh.out_err("ssh ${host} ${cmd}", trace_commands=log.get_verbose() >= verbosity) if output: log.verbose(output, verbosity=verbosity)
def possibly_remote_command(self, host, cmd, verbosity=65): """If `host` is the localhost, excecute `cmd` in subshell. Otherwise execute `cmd` by ssh.""" if host.startswith(socket.gethostname()): output = pysh.out_err( cmd, trace_commands=log.get_verbose() >= verbosity) else: output = pysh.out_err( "ssh ${host} ${cmd}", trace_commands=log.get_verbose() >= verbosity) if output: log.verbose(output, verbosity=verbosity)
def _call(self, *args, **kwargs): """Core of RPC dispatch without error interpretation, logging, or return value decoding.""" params = kwargs if len(kwargs) else args # if Any.kind(params) == Object and self.__version != '2.0': # raise Exception('Unsupport arg type for JSON-RPC 1.0 ' # '(the default version for this client, ' # 'pass version="2.0" to use keyword arguments)') jsonrpc_params = {"jsonrpc": self.__version, "method": self.__service_name, 'params': params, 'id': message_id() } parameters = json.dumps(jsonrpc_params) url = self._get_url(jsonrpc_params) if "serverless" in url or "server-less" in url: raise exceptions.ServiceError("Configured for server-less mode. Skipping JSON RPC " + repr(self.__service_name)) if log.get_verbose() <= 50: log.verbose("CRDS JSON RPC", self.__service_name, params if len(str(params)) <= 60 else "(...)", "-->") else: log.verbose("CRDS JSON RPC to", url, "parameters", params, "-->") response = apply_with_retries(self._call_service, parameters, url) try: rval = json.loads(response) except Exception as exc: log.warning("Invalid CRDS jsonrpc response:\n", response) raise return rval
def _call(self, *args, **kwargs): """Core of RPC dispatch without error interpretation, logging, or return value decoding.""" params = kwargs if len(kwargs) else args jsonrpc_params = {"jsonrpc": self.__version, "method": self.__service_name, 'params': params, 'id': message_id() } parameters = json.dumps(jsonrpc_params) url = self._get_url(jsonrpc_params) if "serverless" in url or "server-less" in url: raise exceptions.ServiceError("Configured for server-less mode. Skipping JSON RPC " + repr(self.__service_name)) if log.get_verbose() <= 50: log.verbose("CRDS JSON RPC", self.__service_name, params if len(str(params)) <= 60 else "(...)", "-->") else: log.verbose("CRDS JSON RPC to", url, "parameters", params, "-->") response = apply_with_retries(self._call_service, parameters, url) try: rval = json.loads(response) except Exception as exc: log.warning("Invalid CRDS jsonrpc response:\n", response) raise return rval
def _check_value(self, filename, value): """Raises ValueError if `value` is not valid.""" if self._match_value(value): if self._values and log.get_verbose(): self.verbose(filename, value, "is in", repr(self._values)) else: raise ValueError("Value " + str(log.PP(value)) + " is not one of " + str(log.PP(self._values)))
def log_affected(self, i, affected): """PLUGIN: Banner log and debug output for each context switch.""" if log.get_verbose(): print("#" * 100, file=sys.stderr) log.debug("History:", i, "Effects:\n", log.PP(affected)) else: if not self.args.quiet: print("#" * 100, file=sys.stderr) print(affected.bestrefs_err_summary, file=sys.stderr)
def log_affected(self, i, affected): """PLUGIN: Banner log and debug output for each context switch.""" if log.get_verbose(): print("#"*100, file=sys.stderr) log.debug("History:", i, "Effects:\n", log.PP(affected)) else: if not self.args.quiet: print("#"*100, file=sys.stderr) print(affected.bestrefs_err_summary, file=sys.stderr)
def _check_value(self, filename, value): if self.is_range: if value < self.min or value > self.max: raise ValueError("Value for " + repr(self.name) + " of " + repr(value) + " is outside acceptable range " + self.info.values[0]) elif log.get_verbose(): self.verbose(filename, value, "is in range", self.info.values[0]) else: # First try a simple exact string match check KeywordValidator._check_value(self, filename, value)
def __call__(self, *args, **kwargs): jsonrpc = self._call(*args, **kwargs) if jsonrpc["error"]: decoded = html.unescape(jsonrpc["error"]["message"]) raise self.classify_exception(decoded) else: result = crds_decode(jsonrpc["result"]) if isinstance(result, (str,int,float,bool)): log.verbose("RPC OK -->", repr(result)) else: log.verbose("RPC OK", log.PP(result) if log.get_verbose() >= 75 else "") return result
def __call__(self, *args, **kwargs): jsonrpc = self._call(*args, **kwargs) if jsonrpc["error"]: decoded = str(html.unescape(jsonrpc["error"]["message"])) raise self.classify_exception(decoded) else: result = crds_decode(jsonrpc["result"]) result = fix_strings(result) if isinstance(result, (str,int,float,bool)): log.verbose("RPC OK -->", repr(result)) else: log.verbose("RPC OK", log.PP(result) if log.get_verbose() >= 75 else "") return result
def check_value(self, filename, value): """Check a single header or column value against the legal values for this Validator. """ if value in [None, "UNDEFINED"]: # missing optional or excluded keyword return True value = self.condition(value) if not self._values and log.get_verbose(): self.verbose(filename, value, "no .tpn values defined.") return True self._check_value(filename, value) # If no exception was raised, consider it validated successfully return True
def copy_file(self, name, path, destination): """Perform a cp-based or scp-based copy of file `name`, either to `path` or a host location based on `destination` and `name`, depending on whether or not the submitter's submission directory is visible from the host running this script. """ try: verbose = "-v" if log.get_verbose() >= 65 else "" if destination.startswith(socket.gethostname()): output = pysh.out_err("cp ${verbose} ${name} ${path}", raise_on_error=True, trace_commands=log.get_verbose() >= 65) else: bname = os.path.basename(name) output = pysh.out_err( "scp ${verbose} ${name} ${destination}/${bname}", raise_on_error=True, trace_commands=log.get_verbose() >= 65) if output: log.verbose(output) return output except Exception as exc: log.fatal_error("File transfer failed for: " + repr(name), "-->", repr(destination))
def copy_file(self, name, path, destination): """Perform a cp-based or scp-based copy of file `name`, either to `path` or a host location based on `destination` and `name`, depending on whether or not the submitter's submission directory is visible from the host running this script. """ try: verbose = "-v" if log.get_verbose() >= 65 else "" if destination.startswith(socket.gethostname()): output = pysh.out_err("cp ${verbose} ${name} ${path}", raise_on_error=True, trace_commands=log.get_verbose() >= 65) else: bname = os.path.basename(name) output = pysh.out_err("scp ${verbose} ${name} ${destination}/${bname}", raise_on_error=True, trace_commands=log.get_verbose() >= 65) if output: log.verbose(output) return output except Exception as exc: log.fatal_error("File transfer failed for: " + repr(name), "-->", repr(destination))
def _call(self, *args, **kwargs): """Core of RPC dispatch without error interpretation, logging, or return value decoding.""" params = kwargs if len(kwargs) else args # if Any.kind(params) == Object and self.__version != '2.0': # raise Exception('Unsupport arg type for JSON-RPC 1.0 ' # '(the default version for this client, ' # 'pass version="2.0" to use keyword arguments)') jsonrpc_params = { "jsonrpc": self.__version, "method": self.__service_name, 'params': params, 'id': message_id() } parameters = json.dumps(jsonrpc_params) url = self._get_url(jsonrpc_params) if "serverless" in url or "server-less" in url: raise exceptions.ServiceError( "Configured for server-less mode. Skipping JSON RPC " + repr(self.__service_name)) if log.get_verbose() <= 50: log.verbose("CRDS JSON RPC", self.__service_name, params if len(str(params)) <= 60 else "(...)", "-->") else: log.verbose("CRDS JSON RPC to", url, "parameters", params, "-->") response = apply_with_retries(self._call_service, parameters, url) try: rval = json.loads(response) except Exception as exc: log.warning("Invalid CRDS jsonrpc response:\n", response) raise return rval