Skip to content

Use type guards #183

Closed
Closed
@helderco

Description

@helderco

As an example I specifically need them in type/definition.py to correctly narrow down the types in a codegen tool. In the meantime I've reimplemented these functions:

def is_required_type(t: Any) -> TypeGuard[GraphQLNonNull]:
    return isinstance(t, GraphQLNonNull)


def is_list_type(t: Any) -> TypeGuard[GraphQLList]:
    return isinstance(t, GraphQLList)


def is_wrapping_type(t: Any) -> TypeGuard[GraphQLWrappingType]:
    return isinstance(t, GraphQLWrappingType)


def is_scalar_type(t: Any) -> TypeGuard[GraphQLScalarType]:
    return isinstance(t, GraphQLScalarType)


def is_input_object_type(t: Any) -> TypeGuard[GraphQLInputObjectType]:
    return isinstance(t, GraphQLInputObjectType)


def is_object_type(t: Any) -> TypeGuard[GraphQLObjectType]:
    return isinstance(t, GraphQLObjectType)

I thought the isinstance would be enough for the type checker to infer in these cases but if the return type is bool in these functions they're not narrowed.

Activity

Cito

Cito commented on Nov 1, 2022

@Cito
Member

Thanks for reminding me of this feature @helderco, we should definitely do that. Though it's only available since Python 3.10, it also can be used in earlier Python versions via typing-extensions.

self-assigned this
on Nov 1, 2022
added this to the v3.3 milestone on Nov 1, 2022
added a commit that references this issue on Nov 2, 2022
Cito

Cito commented on Nov 2, 2022

@Cito
Member

Commited to the main branch, will be available in the next (alpha) release of version 3.3.

Cito

Cito commented on Nov 3, 2022

@Cito
Member

Available now in v3.3.0a2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Use type guards · Issue #183 · graphql-python/graphql-core