Skip to content
Saleor
Esc
↑↓navigate↵open⌘Jpreview
On this page

Errors

Key concepts

There are several error types in the GraphQL API and you may come across different ones depending on the operations you are trying to perform. This document describes how to add new error types.

Add new error type

Step 1: Create new error enum

To create new error codes, add error_codes.py in the target module. Inside this module create an enum with wanted error codes.

from enum import Enum

class ExampleErrorCode(Enum):
    ALREADY_EXISTS = "already_exists"
    GRAPHQL_ERROR = "graphql_error"
    INVALID = "invalid"
    NOT_FOUND = "not_found"
    REQUIRED = "required"
    UNIQUE = "unique"

Step 2: Register newly created error code enum

To differentiate between built-in Django’s error codes and the custom ones, add the error class to the SALEOR_ERROR_CODE_ENUMS list in saleor/graphql/core/utils/error_codes.py.

SALEOR_ERROR_CODE_ENUMS = [
    ExampleErrorCode,
    AccountErrorCode,
    AppErrorCode,
    ...

Step 3: Add error codes to GraphQL enums

To add error codes to GraphQL enums you should add an entry in saleor/graphql/core/enums.py.

ExampleErrorCode = graphene.Enum.from_enum(error_codes.ExampleErrorCode)

Step 4: Create error class

To allow usage error code in mutation, add error class in saleor/graphql/core/types/common.py.

class ExampleError(Error):
    code = ExampleErrorCode(description="The error code.", required=True)

Step 5: Assign error codes to mutation

To use an new error codes in mutation, add error_type_class and error_type_field to Meta inside mutation.

class ExampleMutation(BaseMutation):
    class Meta:
        error_type_class = ExampleError
        error_type_field = "example_errors"

Add custom field to an error type

Step 1: Add new fields to error class

To return more information inside error, add a new field to target error class in saleor/graphql/core/types/common.py.

class ExampleError(Error):
    code = ExampleErrorCode(description="The error code.", required=True)
    example_int_value = graphene.Int(description="Example int value.")
    example_string_value =  graphene.String(description="Example string value.")

Step 2: Raise error with custom values

To return error with custom values, raise an error in target mutation.

error_params = {
    "example_int_value": 1234,
    "example_string_value": "Example error value",
}
raise ValidationError(
    {
        "example_field": ValidationError(
            message="Example message for debugging",
            code=ExampleErrorCode.EXAMPLE,
            params=error_params,
        )
    }
)

Last updated on June 11, 2024

Was this page helpful?