graphene
graphene copied to clipboard
Cannot use an enum as a graphene.List named argument
When defining this query:
class Episode(graphene.Enum):
NEWHOPE = 4
EMPIRE = 5
JEDI = 6
class ListAvailableSubscriptionPlans(graphene.ObjectType):
available_subscription_plans = graphene.List(
graphene.NonNull(graphql.SubscriptionPlanObject),
subscriber_id=graphene.Int(required=True),
subscriber_type=Episode,
target_currency=graphene.String(required=True),
)
def resolve_available_subscription_plans(
self, info, subscriber_id, subscriber_type, target_currency
):
And running the python module, we get the error:
File "/app/subscription_management/subscriptions/api.py", line 16, in <module>
class ListAvailableSubscriptionPlans(graphene.ObjectType):
File "/app/virtualenv/lib/python3.8/site-packages/graphene/utils/subclass_with_meta.py", line 52, in __init_subclass__
super_class.__init_subclass_with_meta__(**options)
File "/app/virtualenv/lib/python3.8/site-packages/graphene/types/objecttype.py", line 112, in __init_subclass_with_meta__
fields.update(yank_fields_from_attrs(base.__dict__, _as=Field))
File "/app/virtualenv/lib/python3.8/site-packages/graphene/types/utils.py", line 31, in yank_fields_from_attrs
field = get_field_as(value, _as)
File "/app/virtualenv/lib/python3.8/site-packages/graphene/types/utils.py", line 21, in get_field_as
return _as.mounted(value)
File "/app/virtualenv/lib/python3.8/site-packages/graphene/types/mountedtype.py", line 15, in mounted
return cls(
File "/app/virtualenv/lib/python3.8/site-packages/graphene/types/field.py", line 103, in __init__
self.args = to_arguments(args or OrderedDict(), extra_args)
File "/app/virtualenv/lib/python3.8/site-packages/graphene/types/argument.py", line 80, in to_arguments
extra_args = sorted(extra_args.items(), key=lambda f: f[1])
TypeError: '<' not supported between instances of 'EnumMeta' and 'Int'
Because this line does not work: subscriber_type=Episode
A work around is to cast the enum as a graphene.Argument: subscriber_type=graphene.Argument(Episode)
class ListAvailableSubscriptionPlans(graphene.ObjectType):
available_subscription_plans = graphene.List(
graphene.NonNull(graphql.SubscriptionPlanObject),
subscriber_id=graphene.Int(required=True),
subscriber_type=graphene.Argument(Episode),
target_currency=graphene.String(required=True),
)
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
not stale
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
no
You need to call Episode
like with other GraphQL types.
subscriber_type=Episode()