def test_enum_from_builtin_enum_accepts_lambda_description(): def custom_description(value): if not value: return "StarWars Episodes" return "New Hope Episode" if value == Episode.NEWHOPE else "Other" def custom_deprecation_reason(value): return "meh" if value == Episode.NEWHOPE else None PyEpisode = PyEnum("PyEpisode", "NEWHOPE,EMPIRE,JEDI") Episode = Enum.from_enum( PyEpisode, description=custom_description, deprecation_reason=custom_deprecation_reason, ) class Query(ObjectType): foo = Episode() schema = Schema(query=Query).graphql_schema episode = schema.get_type("PyEpisode") assert episode.description == "StarWars Episodes" assert [ (name, value.description, value.deprecation_reason) for name, value in episode.values.items() ] == [ ("NEWHOPE", "New Hope Episode", "meh"), ("EMPIRE", "Other", None), ("JEDI", "Other", None), ]
def test_enum_from_builtin_enum_accepts_lambda_description(): def custom_description(value): if not value: return "StarWars Episodes" return 'New Hope Episode' if value == Episode.NEWHOPE else 'Other' def custom_deprecation_reason(value): return 'meh' if value == Episode.NEWHOPE else None PyEpisode = PyEnum('PyEpisode', 'NEWHOPE,EMPIRE,JEDI') Episode = Enum.from_enum(PyEpisode, description=custom_description, deprecation_reason=custom_deprecation_reason) class Query(ObjectType): foo = Episode() schema = Schema(query=Query) GraphQLPyEpisode = schema._type_map['PyEpisode'].values assert schema._type_map['PyEpisode'].description == "StarWars Episodes" assert GraphQLPyEpisode[0].name == 'NEWHOPE' and GraphQLPyEpisode[0].description == 'New Hope Episode' assert GraphQLPyEpisode[1].name == 'EMPIRE' and GraphQLPyEpisode[1].description == 'Other' assert GraphQLPyEpisode[2].name == 'JEDI' and GraphQLPyEpisode[2].description == 'Other' assert GraphQLPyEpisode[0].name == 'NEWHOPE' and GraphQLPyEpisode[0].deprecation_reason == 'meh' assert GraphQLPyEpisode[1].name == 'EMPIRE' and GraphQLPyEpisode[1].deprecation_reason == None assert GraphQLPyEpisode[2].name == 'JEDI' and GraphQLPyEpisode[2].deprecation_reason == None
def test_enum_from_builtin_enum(): PyRGB = PyEnum("RGB", "RED,GREEN,BLUE") RGB = Enum.from_enum(PyRGB) assert RGB._meta.enum == PyRGB assert RGB.RED assert RGB.GREEN assert RGB.BLUE
def __new__(cls, name, bases, classdict, **options): enum_members = dict(classdict, __eq__=eq_enum) # We remove the Meta attribute from the class to not collide # with the enum values. enum_members.pop("Meta", None) enum = PyEnum(cls.__name__, enum_members) return SubclassWithMeta_Meta.__new__(cls, name, bases, dict(classdict, __enum__=enum), **options)
def __call__(cls, *args, **kwargs): # noqa: N805 if cls is Enum: description = kwargs.pop("description", None) deprecation_reason = kwargs.pop("deprecation_reason", None) return cls.from_enum( PyEnum(*args, **kwargs), description=description, deprecation_reason=deprecation_reason, ) return super(EnumMeta, cls).__call__(*args, **kwargs)
def test_enum_from_builtin_enum_accepts_lambda_description(): def custom_description(value): if not value: return "StarWars Episodes" return "New Hope Episode" if value == Episode.NEWHOPE else "Other" def custom_deprecation_reason(value): return "meh" if value == Episode.NEWHOPE else None PyEpisode = PyEnum("PyEpisode", "NEWHOPE,EMPIRE,JEDI") Episode = Enum.from_enum( PyEpisode, description=custom_description, deprecation_reason=custom_deprecation_reason, ) class Query(ObjectType): foo = Episode() schema = Schema(query=Query) GraphQLPyEpisode = schema._type_map["PyEpisode"].values assert schema._type_map["PyEpisode"].description == "StarWars Episodes" assert ( GraphQLPyEpisode[0].name == "NEWHOPE" and GraphQLPyEpisode[0].description == "New Hope Episode" ) assert ( GraphQLPyEpisode[1].name == "EMPIRE" and GraphQLPyEpisode[1].description == "Other" ) assert ( GraphQLPyEpisode[2].name == "JEDI" and GraphQLPyEpisode[2].description == "Other" ) assert ( GraphQLPyEpisode[0].name == "NEWHOPE" and GraphQLPyEpisode[0].deprecation_reason == "meh" ) assert ( GraphQLPyEpisode[1].name == "EMPIRE" and GraphQLPyEpisode[1].deprecation_reason is None ) assert ( GraphQLPyEpisode[2].name == "JEDI" and GraphQLPyEpisode[2].deprecation_reason is None )
def __new__(cls, name, bases, attrs): # Also ensure initialization is only performed for subclasses of Model # (excluding Model class itself). if not is_base_type(bases, EnumTypeMeta): return type.__new__(cls, name, bases, attrs) options = Options( attrs.pop('Meta', None), name=name, description=attrs.get('__doc__'), enum=None, ) if not options.enum: options.enum = PyEnum(cls.__name__, attrs) new_attrs = OrderedDict(attrs, _meta=options, **options.enum.__members__) return type.__new__(cls, name, bases, new_attrs)
def __call__(cls, *args, **kwargs): # noqa: N805 if cls is Enum: description = kwargs.pop('description', None) return cls.from_enum(PyEnum(*args, **kwargs), description=description) return super(EnumTypeMeta, cls).__call__(*args, **kwargs)