Ejemplo n.º 1
0
 def _process_result(result, to_json=False):
     out, err, code = result
     if out and is_bytes(out):
         out = out.decode(get_locale_encoding())
     if err and is_bytes(err):
         err = err.decode(get_locale_encoding())
     text = ("%s\n\n%s" % (out, err)).strip()
     if code != 0:
         raise Exception(text)
     if not to_json:
         return text
     try:
         return json.loads(out)
     except ValueError as e:
         click.secho("%s => `%s`" % (e, out), fg="red", err=True)
         # if PIO Core prints unhandled warnings
         for line in out.split("\n"):
             line = line.strip()
             if not line:
                 continue
             try:
                 return json.loads(line)
             except ValueError:
                 pass
         raise e
Ejemplo n.º 2
0
    async def _handle_rpc(self, websocket, data):
        response = jsonrpc.JSONRPCResponseManager.handle(
            data,
            self.factory.dispatcher  # pylint: disable=no-member
        )
        if response.result and inspect.isawaitable(response.result):
            try:
                response.result = await response.result
                response.data["result"] = response.result
                response.error = None
            except Exception as exc:  # pylint: disable=broad-except
                if not isinstance(exc,
                                  jsonrpc.exceptions.JSONRPCDispatchException):
                    exc = jsonrpc.exceptions.JSONRPCDispatchException(
                        code=4999, message=str(exc))
                response.result = None
                response.error = exc.error._data  # pylint: disable=protected-access
                new_data = response.data.copy()
                new_data["error"] = response.error
                del new_data["result"]
                response.data = new_data

        if response.error:
            click.secho("Error: %s" % response.error, fg="red", err=True)
        if "result" in response.data and is_bytes(response.data["result"]):
            response.data["result"] = response.data["result"].decode("utf-8")

        await websocket.send_text(json.dumps(response.data))
Ejemplo n.º 3
0
 def sendJSONResponse(self, response):
     # click.echo("< %s" % response)
     if "error" in response:
         click.secho("Error: %s" % response["error"], fg="red", err=True)
     response = dump_json_to_unicode(response)
     if not PY2 and not is_bytes(response):
         response = response.encode("utf-8")
     self.sendMessage(response)
Ejemplo n.º 4
0
 def write(self, value):
     thread_id = thread_get_ident()
     self._ensure_thread_buffer(thread_id)
     if PY2 and isinstance(value, unicode):  # pylint: disable=undefined-variable
         value = value.encode()
     return self._buffers[thread_id].write(
         value.decode() if is_bytes(value) else value
     )
Ejemplo n.º 5
0
def escape_gdbmi_stream(prefix, stream):
    bytes_stream = False
    if is_bytes(stream):
        bytes_stream = True
        stream = stream.decode()

    if not stream:
        return b"" if bytes_stream else ""

    ends_nl = stream.endswith("\n")
    stream = re.sub(r"\\+", "\\\\\\\\", stream)
    stream = stream.replace('"', '\\"')
    stream = stream.replace("\n", "\\n")
    stream = '%s"%s"' % (prefix, stream)
    if ends_nl:
        stream += "\n"

    return stream.encode() if bytes_stream else stream
Ejemplo n.º 6
0
 def decode_scons_arg(data):
     value = base64.urlsafe_b64decode(data)
     return value.decode() if is_bytes(value) else value
Ejemplo n.º 7
0
 def encode_scons_arg(value):
     data = base64.urlsafe_b64encode(hashlib_encode_data(value))
     return data.decode() if is_bytes(data) else data
Ejemplo n.º 8
0
 def write(self, value):
     thread_id = thread_get_ident()
     self._ensure_thread_buffer(thread_id)
     return self._buffers[thread_id].write(
         value.decode() if is_bytes(value) else value)
Ejemplo n.º 9
0
 def console_log(self, msg):
     if helpers.is_gdbmi_mode():
         msg = helpers.escape_gdbmi_stream("~", msg)
     self.outReceived(msg if is_bytes(msg) else msg.encode())