Ejemplo n.º 1
0
 def format_error(error):
     if isinstance(error, GraphQLLocatedError):
         try:
             error_dict = json.loads(str(error))
         except: 
             return GraphQLView.format_error(GraphQLError("Resolver error"))
     return GraphQLView.format_error(error)
Ejemplo n.º 2
0
 def format_error(error):
     """
         Static method that modifies the error object returned for
         Unauthorized Calendars.
             :params error:
     """
     try:
         if isinstance(error, GraphQLLocatedError):
             return format_located_error(error)
         return GraphQLView.format_error(error)
     except Exception as error:
         return GraphQLView.format_error(error)
Ejemplo n.º 3
0
    def format_error(error):
        if hasattr(error, 'original_error'):
            original_error = error.original_error
            if isinstance(original_error, ValidationError):
                err_dict = original_error.message_dict

                def to_camel(strs):
                    components = strs.split('_')
                    return components[0] + ''.join(x.title()
                                                   for x in components[1:])

                err_dict = {to_camel(k): err_dict[k] for k in err_dict}

                return {
                    "code": "InvalidInput",
                    "message": "Invalid User Input",
                    "validations": err_dict
                }

            if isinstance(original_error, ContestError):
                returned_err = {
                    'code': original_error.__class__.__name__,
                    'message': original_error.args[0],
                }
                if len(original_error.args) > 1:
                    returned_err['extensions'] = original_error.args[1:]
                return returned_err

            return {
                'code': 'Internal Server Error',
                'message': 'Internal Server Error',
            }

        return GraphQLView.format_error(error)
Ejemplo n.º 4
0
def format_located_error(error):
    if isinstance(error.original_error, GraphQLLocatedError):
        return format_located_error(error.original_error)
    if isinstance(error.original_error, UnauthorizedCalendarError):
        return {'message': error.original_error.message,
                'AuthUrl': error.original_error.auth_url}
    return GraphQLView.format_error(error)
Ejemplo n.º 5
0
    def format_error(error):
        formatted = BaseGraphQLView.format_error(error)

        if isinstance(error, GraphQLError) and\
                error.original_error is not None:

            error = error.original_error

        if not extensions_settings.SHOW_ERROR_MESSAGE_HANDLER(error):
            formatted['message'] = _('Internal server error')

        extensions = {
            'type': error.__class__.__name__,
            'code': getattr(error, 'code', 'error'),
            'timestamp': timegm(datetime.utcnow().utctimetuple()),
            **formatted.get('extensions', {}),
        }

        if hasattr(error, 'error_data'):
            extensions['data'] = error.error_data

        if error.__traceback__ is not None:
            info = error.__traceback__.tb_frame.f_locals.get('info')

            if info is not None:
                extensions['operation'] = info.operation.operation.name

            if settings.DEBUG:
                extensions['trace'] = traceback.format_list(
                    traceback.extract_tb(error.__traceback__), )

        formatted['extensions'] = extensions
        return formatted
Ejemplo n.º 6
0
    def get_response(self, request, data):
        """Extract the information from the request, execute the GraphQL query and form the response.

        Args:
            request (HttpRequest): Request Object from Django
            data (dict): Parsed content of the body of the request.

        Returns:
            response (dict), status_code (int): Payload of the response to send and the status code.
        """
        query, variables, operation_name, id = GraphQLView.get_graphql_params(request, data)

        execution_result = self.execute_graphql_request(request, data, query, variables, operation_name)

        status_code = 200
        if execution_result:
            response = {}

            if execution_result.errors:
                response["errors"] = [GraphQLView.format_error(e) for e in execution_result.errors]

            if execution_result.invalid:
                status_code = 400
            else:
                response["data"] = execution_result.data

            result = response
        else:
            result = None

        return result, status_code
Ejemplo n.º 7
0
 def format_error(error):
     res_error = OriginalGraphQLView.format_error(error)
     if "locations" in res_error:
         del res_error["locations"]
     if hasattr(error, "original_error"):
         res_error["type"] = error.original_error.__class__.__name__
     return res_error
Ejemplo n.º 8
0
    def format_error(error):
        if hasattr(error, 'original_error') and error.original_error:
            formatted = {"message": str(error.original_error)}
            if isinstance(error.original_error, UnauthorizedError):
                formatted['code'] = 401
            return formatted

        return GraphQLView.format_error(error)
Ejemplo n.º 9
0
 def run(self, request, pk):
     try:
         query = get_object_or_404(self.queryset, pk=pk)
         result = execute_saved_query(query.slug, variables=request.data.get("variables"), request=request).to_dict()
         return Response(result)
     except GraphQLError as error:
         return Response(
             {"errors": [GraphQLView.format_error(error)]},
             status=status.HTTP_400_BAD_REQUEST,
         )
Ejemplo n.º 10
0
 def format_error(error):
     try:
         if isinstance(error, GraphQLLocatedError):
             return format_located_error(error)
         elif isinstance(error, GraphQLSyntaxError):
             return format_graphql_error(error)
         else:
             return GraphQLView.format_error(error)
     except Exception as e:
         return format_internal_error(e)
Ejemplo n.º 11
0
 def run(self, request, pk):
     try:
         result = execute_saved_query(pk,
                                      variables=request.data,
                                      request=request).to_dict()
         return Response(result)
     except GraphQLError as error:
         return Response(
             {"errors": [GraphQLView.format_error(error)]},
             status=status.HTTP_400_BAD_REQUEST,
         )
Ejemplo n.º 12
0
    def format_error(error):
        print(error)
        if hasattr(error, 'original_error') and error.original_error:
            formatted = {"message": str(error.original_error)}
            if isinstance(error.original_error, UnauthorizedError):
                formatted['code'] = "401"
            elif isinstance(error.original_error, PermissionDeniedError):
                formatted['code'] = "403"
            return formatted

        return GraphQLView.format_error(error)
Ejemplo n.º 13
0
 def format_error(error):
     """
         This method is responsible for customising the 
         error message
         sent back to the user.
     """
     try:
         if isinstance(error, HttpError) or isinstance(error, QueryError) or isinstance(error, GraphQLSyntaxError) or isinstance(error, GraphQLError):
             if hasattr(error, 'message'):
                 config.log.Error(error.message)
             elif hasattr(error, 'msg'): 
                 config.log.Error(error.msg)
             else:
                 config.log.Error(str(error))
             return format_located_error(error)
     except TypeError as error:
         config.log.Error(error.message)
         return GraphQLView.format_error(error)
     else:
         config.log.Error(str(error))
         return GraphQLView.format_error(error)
Ejemplo n.º 14
0
    def format_error(error):
        original_error = getattr(error, 'original_error', None) or error
        formatted_error = GraphQLView.format_error(original_error)

        if not isinstance(original_error, GraphQLError):
            if settings.DEBUG:
                formatted_error = {'debug': formatted_error.get('message', '')}
            else:
                formatted_error = {}  # don't send message for non-ui errors to the client
                # sentry.captureException(
                #    exc_info=(type(original_error), original_error, original_error.__traceback__))

        return formatted_error
Ejemplo n.º 15
0
    def format_error(error):
        # NOTE(prmtl): it seems that in current version of graphene
        # errors are multinested so it is not enough to just get
        # error.orginial_error and we try until we can find "last one"
        original_error = get_original_error(error)
        if isinstance(original_error, ServerException):
            error.message = original_error.default_message

        if isinstance(error, GraphQLError):
            logger.exception("Error with GQL\n%s", error)

        traceback.print_tb(error.__traceback__)
        return _GraphQLView.format_error(error)
Ejemplo n.º 16
0
    def post(self, request, *args, **kwargs):
        try:
            data = self.parse_body(request)
            result, status_code = self.get_response(request, data)

            return Response(
                result,
                status=status_code,
            )

        except HttpError as e:
            return Response(
                {"errors": [GraphQLView.format_error(e)]},
                status=status.HTTP_400_BAD_REQUEST,
            )
Ejemplo n.º 17
0
 def format_error(error):
     formatted_error = GraphQLView.format_error(error)
     original_error = getattr(error, 'original_error', None)
     extensions = {}
     if original_error:
         if hasattr(original_error, 'code'):
             extensions['code'] = str(error.original_error.code)
         elif type(original_error) in [
                 PermissionDenied, DjPermissionDenied
         ]:
             extensions['code'] = str(PermissionDeniedException.code)
             formatted_error['message'] = str(
                 PermissionDeniedException.default_message)
         else:
             extensions['errorCode'] = str(
                 status.HTTP_500_INTERNAL_SERVER_ERROR)
     formatted_error['extensions'] = extensions
     return formatted_error
Ejemplo n.º 18
0
    def format_error(error):
        if hasattr(error, 'original_error') and isinstance(
                error.original_error, ValidationError):
            err_dict = error.original_error.message_dict

            def to_camel(strs):
                components = strs.split('_')
                return components[0] + ''.join(x.title()
                                               for x in components[1:])

            err_dict = {to_camel(k): err_dict[k] for k in err_dict}

            return {
                "code": "InvalidInput",
                "message": "Invalid User Input",
                "validations": err_dict
            }
        return GraphQLView.format_error(error)
Ejemplo n.º 19
0
def format_located_error(error):
    """
        Helper method to help error based on type comparison
    """
    if isinstance(error, HttpError):
     

        config.log.Error('message: ' + error.message +
                         'code: ' + str(error.response.status_code))
        return {
            'error': 'Error de conexión HTTP o no ha enviado una consulta válida',
            'message: ': error.message,
            'code: ': error.response.status_code
        }
    if isinstance(error, GraphQLLocatedError):

        config.log.Error('message: ' + error.message +
                         'code: ' + "1001")
        return {
            'error': 'Ocurrió un error de desarrollador no detectado dentro de la función de resolución / suscripción (por ejemplo, una consulta de base de datos mal escrita)',
            'message': error.message,
            'code': 1001
        }

    if isinstance(error, QueryError):
        config.log.Error('message: ' + error.msg +
                         'code: ' + "1002")
        return {
            'error': 'Error interno en la consulta',
            'message': error.msg,
            'code': 1002
        }

    if isinstance(error, GraphQLSyntaxError):
        config.log.Error('message: ' + error.message +
                         'code: ' + "1003")

        return {
            'error': 'La consulta falla por un error interno de validación (sintaxis, lógica , etc.)',
            'message': error.message,
            'code': 1003
        }
        
    if isinstance(error, CustomFatalError):
                # return custom error if it is an instance
                # of CustomFatalError
                config.log.Error('message: ' + error.message +
                                 'code: ' + "1004")
                return {
                    'error': 'Las variables o el contexto proporcionados por el usuario son incorrectos y la función de resolución / suscripción intencionalmente genera un error (por ejemplo, no se le permite ver al usuario solicitado)',
                    'message': error.message,
                    #'cause': error.original_error.cause,
                    #'code': error.original_error.code
                    'code': 1004
                }
    if isinstance(error, GraphQLError):
        config.log.Error('message: ' + error.message +
                         'code: ' + "1000")
        return {
            'error:': 'La consulta  está mal formada',
            'message': error.message,
            'code': 1000
        }

    config.log.Error(error)
    return GraphQLView.format_error(error)
Ejemplo n.º 20
0
 def format_error(error):
     if (hasattr(error, 'original_error') and isinstance(
             error.original_error, GraphqlAuthenticationError)):
         raise AuthenticationFailed()
     return GraphQLView.format_error(error)