Strawberry GraphQL @ 0.334.0
Released
This release adds an error for undecorated subclasses of Strawberry types used in the schema:
import strawberry
@strawberry.typeclass Animal: name: str
class Dog(Animal): # missing @strawberry.type breed: str
@strawberry.typeclass Query: dog: Dog
schema = strawberry.Schema(query=Query) Python inherits the Strawberry definition of Animal , so Dog was silently
published as Animal , and its breed field was missing from the schema. The
same happened to undecorated subclasses of interfaces and input types: an
argument typed with an undecorated subclass of an input type only accepted the
parent’s fields, and the resolver received an instance of the subclass that was
missing the fields declared on it.
Strawberry now raises an UndecoratedSubclassError pointing at the subclass
when it’s used in the schema: in field and argument annotations (including in
lists, optionals and unions), lazy types, strawberry.Schema(types=[...]) and
as the query, mutation or subscription type.
Schemas that relied on this now fail to build. To fix them, decorate the
subclass (with @strawberry.type , or @strawberry.input for input types), or
use the parent type in the annotation if you meant to publish it. Resolvers can
still return instances of undecorated subclasses of the type they’re annotated
with.
This release was contributed by @patrick91 in https://github.com/strawberry-graphql/strawberry/pull/4691