Exemplo n.º 1
0
    def _CheckResponseStatus(self, response):
        if response.status_code == 200:
            return

        content = response.content
        json_str = content[len(self.JSON_PREFIX):]

        try:
            # TODO(hanuszczak): `json` package should not be used.
            parsed_json = json.loads(json_str)
            message = parsed_json["message"] + "\n" + parsed_json.get(
                "traceBack", "")
        except (ValueError, KeyError):
            message = content

        if response.status_code == 403:
            raise errors.AccessForbiddenError(message)
        elif response.status_code == 404:
            raise errors.ResourceNotFoundError(message)
        elif response.status_code == 422:
            raise errors.InvalidArgumentError(message)
        elif response.status_code == 501:
            raise errors.ApiNotImplementedError(message)
        else:
            raise errors.UnknownError(message)
Exemplo n.º 2
0
    def _CallMethod(self, method_name, args):
        router = self._MatchRouter(method_name, args)

        rdf_args = None
        if args is not None:
            mdata = router.__class__.GetAnnotatedMethods()[method_name]
            rdf_args = mdata.args_type()
            rdf_args.ParseFromString(args.SerializeToString())

        method = getattr(router, method_name)
        try:
            handler = method(rdf_args, token=self._token)
            return handler.Handle(rdf_args, token=self._token)
        except access_control.UnauthorizedAccess as e:
            traceback.print_exc()
            raise errors.AccessForbiddenError(e.message)
        except api_call_handler_base.ResourceNotFoundError as e:
            traceback.print_exc()
            raise errors.ResourceNotFoundError(e.message)
        except NotImplementedError as e:
            traceback.print_exc()
            raise errors.ApiNotImplementedError(e.message)
        except Exception as e:  # pylint: disable=broad-except
            traceback.print_exc()
            raise errors.UnknownError(e.message)
Exemplo n.º 3
0
    def _CheckResponseStatus(self, response):
        if response.status_code == 200:
            return

        content = response.content
        json_str = content[len(self.JSON_PREFIX):]

        try:
            parsed_json = json.loads(json_str)
            message = parsed_json["message"]
        except (ValueError, KeyError):
            message = content

        if response.status_code == 403:
            raise errors.AccessForbiddenError(message)
        elif response.status_code == 404:
            raise errors.ResourceNotFoundError(message)
        elif response.status_code == 501:
            raise errors.ApiNotImplementedError(message)
        else:
            raise errors.UnknownError(message)
Exemplo n.º 4
0
    def _CallMethod(self, method_name, args):
        router = self._MatchRouter(method_name, args)

        rdf_args = None
        if args is not None:
            mdata = router.__class__.GetAnnotatedMethods()[method_name]
            rdf_args = mdata.args_type.FromSerializedBytes(
                args.SerializeToString())

        method = getattr(router, method_name)
        try:
            handler = method(rdf_args, context=self._context)
            return handler.Handle(rdf_args, context=self._context)
        except access_control.UnauthorizedAccess as e:
            raise errors.AccessForbiddenError(e)
        except api_call_handler_base.ResourceNotFoundError as e:
            raise errors.ResourceNotFoundError(e)
        except NotImplementedError:
            raise errors.ApiNotImplementedError(
                "Method {} is not implemented in {}.".format(
                    method_name, compatibility.GetName(type(router))))
        except Exception as e:  # pylint: disable=broad-except
            raise errors.UnknownError(e)