Exemple #1
0
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),
    ]
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
 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)
Exemple #5
0
 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)
Exemple #6
0
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
    )
Exemple #7
0
    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)
Exemple #8
0
 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)