Docs
General
Types
Codegen
Extensions
>Errors
>Guides
Editor integration
Concepts
Integrations
Federation
Operations
Enums
Enums are a special kind of type that is restricted to a particular set of values.
For example, we have a few options of ice cream available, and we want to allow user to choose only from those options.
Strawberry supports defining enums using enums from python's standard library. Here's a quick tutorial on how to create an enum type in Strawberry:
First, create a new class for the new type, which extends class Enum:
from enum import Enum
class IceCreamFlavour(Enum): ...
Then, list options as variables in that class:
class IceCreamFlavour(Enum): VANILLA = "vanilla" STRAWBERRY = "strawberry" CHOCOLATE = "chocolate"
Finally we need to register our class as a strawberry type. It's done with the
strawberry.enum
decorator:
@strawberry.enumclass IceCreamFlavour(Enum): VANILLA = "vanilla" STRAWBERRY = "strawberry" CHOCOLATE = "chocolate"
Let's see how we can use Enums in our schema.
@strawberry.typeclass Query: @strawberry.field def best_flavour(self) -> IceCreamFlavour: return IceCreamFlavour.STRAWBERRY
Defining the enum type above would produce this schema in GraphQL:
enum IceCreamFlavour { VANILLA STRAWBERRY CHOCOLATE}
Here's an example of how you'd use this newly created query:
query { bestFlavour}
Here is result of executed query:
{ "data": { "bestFlavour": "STRAWBERRY" }}
We can also use enums when defining object types (using strawberry.type
). Here
is an example of an object that has a field using an Enum:
@strawberry.typeclass Cone: flavour: IceCreamFlavour num_scoops: int
@strawberry.typeclass Query: @strawberry.field def cone(self) -> Cone: return Cone(flavour=IceCreamFlavour.STRAWBERRY, num_scoops=4)
And here's an example of how you'd use this query:
query { cone { flavour numScoops }}
Here is result of executed query:
{ "data": { "cone": { "flavour": "STRAWBERRY", "numScoops": 4 } }}
GraphQL types are not a map of name: value, like in python enums. Strawberry uses the name of the members of the enum to create the GraphQL type.
You can also deprecate enum value. To do so you need more verbose syntax using
strawberry.enum_value
and deprecation_reason
. You can mix and match string
and verbose syntax.
@strawberry.enumclass IceCreamFlavour(Enum): VANILLA = strawberry.enum_value("vanilla") STRAWBERRY = strawberry.enum_value("strawberry", deprecation_reason="We ran out") CHOCOLATE = "chocolate"