예제 #1
0
파일: submit.py 프로젝트: jhunkeler/crds
 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)
예제 #2
0
 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)
예제 #3
0
파일: proxy.py 프로젝트: jaytmiller/crds
    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
예제 #4
0
파일: proxy.py 프로젝트: oirlab/tmt-crds
    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
예제 #5
0
 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)))
예제 #6
0
파일: core.py 프로젝트: oirlab/tmt-crds
 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)))
예제 #7
0
 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)
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
파일: proxy.py 프로젝트: oirlab/tmt-crds
 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
예제 #11
0
파일: core.py 프로젝트: oirlab/tmt-crds
 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)
예제 #12
0
파일: proxy.py 프로젝트: jaytmiller/crds
 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
예제 #13
0
 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
예제 #14
0
 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))
예제 #15
0
파일: core.py 프로젝트: oirlab/tmt-crds
 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
예제 #16
0
파일: submit.py 프로젝트: jhunkeler/crds
 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))
예제 #17
0
파일: proxy.py 프로젝트: sean-lockwood/crds
    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