Schema Configurations
Strawberry allows to customise how the schema is generated by passing configurations.
To customise the schema you can create an instance of StrawberryConfig
, as
shown in the example below:
import strawberry
from strawberry.schema.config import StrawberryConfig
@strawberry.typeclass Query: example_field: str
schema = strawberry.Schema(query=Query, config=StrawberryConfig(auto_camel_case=False))
In this case we are disabling the auto camel casing feature, so your output schema will look like this:
type Query { example_field: String!}
Available configurations
Hereβs a list of the available configurations:
auto_camel_case
By default Strawberry will convert the field names to camel case, so a field
like example_field
will be converted to exampleField
. You can disable this
feature by setting auto_camel_case
to False
.
schema = strawberry.Schema(query=Query, config=StrawberryConfig(auto_camel_case=False))
default_resolver
By default Strawberry will use the getattr
function as the default resolver.
You can customise this by setting the default_resolver
configuration.
This can be useful in cases you want to allow returning a dictionary from a resolver.
import strawberry
from strawberry.schema.config import StrawberryConfig
def custom_resolver(obj, field): try: return obj[field] except (KeyError, TypeError): return getattr(obj, field)
@strawberry.typeclass User: name: str
@strawberry.typeclass Query: @strawberry.field def user(self, info) -> User: # this won't type check, but will work at runtime return {"name": "Patrick"}
schema = strawberry.Schema( query=Query, config=StrawberryConfig(default_resolver=custom_resolver))
relay_max_results
By default Strawberryβs max limit for relay connections is 100. You can
customise this by setting the relay_max_results
configuration.
schema = strawberry.Schema(query=Query, config=StrawberryConfig(relay_max_results=50))
disable_field_suggestions
By default Strawberry will suggest fields when a field is not found in the
schema. You can disable this feature by setting disable_field_suggestions
to
True
.
schema = strawberry.Schema( query=Query, config=StrawberryConfig(disable_field_suggestions=True))
info_class
By default Strawberry will create an object of type strawberry.Info
when the
user defines info: Info
as a parameter to a type or query. You can change this
behaviour by setting info_class
to a subclass of strawberry.Info
.
This can be useful when you want to create a simpler interface for info- or
context-based properties, or if you wanted to attach additional properties to
the Info
class.
class CustomInfo(Info): @property def response_headers(self) -> Headers: return self.context["response"].headers
schema = strawberry.Schema(query=Query, config=StrawberryConfig(info_class=CustomInfo))