mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-11-04 01:47:45 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
Enums
 | 
						|
=====
 | 
						|
 | 
						|
A ``Enum`` is a special ``GraphQL`` type that represents a set of
 | 
						|
symbolic names (members) bound to unique, constant values.
 | 
						|
 | 
						|
Definition
 | 
						|
----------
 | 
						|
 | 
						|
You can create an ``Enum`` using classes:
 | 
						|
 | 
						|
.. code:: python
 | 
						|
 | 
						|
    import graphene
 | 
						|
 | 
						|
    class Episode(graphene.Enum):
 | 
						|
        NEWHOPE = 4
 | 
						|
        EMPIRE = 5
 | 
						|
        JEDI = 6
 | 
						|
 | 
						|
But also using instances of Enum:
 | 
						|
 | 
						|
.. code:: python
 | 
						|
 | 
						|
    Episode = graphene.Enum('Episode', [('NEWHOPE', 4), ('EMPIRE', 5), ('JEDI', 6)])
 | 
						|
 | 
						|
Value descriptions
 | 
						|
------------------
 | 
						|
 | 
						|
It's possible to add a description to an enum value, for that the enum value
 | 
						|
needs to have the ``description`` property on it.
 | 
						|
 | 
						|
.. code:: python
 | 
						|
 | 
						|
    class Episode(graphene.Enum):
 | 
						|
        NEWHOPE = 4
 | 
						|
        EMPIRE = 5
 | 
						|
        JEDI = 6
 | 
						|
 | 
						|
        @property
 | 
						|
        def description(self):
 | 
						|
            if self == Episode.NEWHOPE:
 | 
						|
                return 'New Hope Episode'
 | 
						|
            return 'Other episode'
 | 
						|
 | 
						|
 | 
						|
Usage with Python Enums
 | 
						|
-----------------------
 | 
						|
 | 
						|
In case the Enums are already defined it's possible to reuse them using
 | 
						|
the ``Enum.from_enum`` function.
 | 
						|
 | 
						|
.. code:: python
 | 
						|
 | 
						|
    graphene.Enum.from_enum(AlreadyExistingPyEnum)
 | 
						|
 | 
						|
``Enum.from_enum`` supports a ``description`` and ``deprecation_reason`` lambdas as input so
 | 
						|
you can add description etc. to your enum without changing the original:
 | 
						|
 | 
						|
.. code:: python
 | 
						|
 | 
						|
    graphene.Enum.from_enum(AlreadyExistingPyEnum, description=lambda value: return 'foo' if value == AlreadyExistingPyEnum.Foo else 'bar')
 | 
						|
 | 
						|
 | 
						|
Notes
 | 
						|
-----
 | 
						|
 | 
						|
``graphene.Enum`` uses |enum.Enum|_ internally (or a backport if
 | 
						|
that's not available) and can be used in a similar way, with the exception of
 | 
						|
member getters.
 | 
						|
 | 
						|
In the Python ``Enum`` implementation you can access a member by initing the Enum.
 | 
						|
 | 
						|
.. code:: python
 | 
						|
 | 
						|
    from enum import Enum
 | 
						|
    class Color(Enum):
 | 
						|
        RED = 1
 | 
						|
        GREEN = 2
 | 
						|
        BLUE = 3
 | 
						|
 | 
						|
    assert Color(1) == Color.RED
 | 
						|
 | 
						|
 | 
						|
However, in Graphene ``Enum`` you need to call get to have the same effect:
 | 
						|
 | 
						|
.. code:: python
 | 
						|
 | 
						|
    from graphene import Enum
 | 
						|
    class Color(Enum):
 | 
						|
        RED = 1
 | 
						|
        GREEN = 2
 | 
						|
        BLUE = 3
 | 
						|
 | 
						|
    assert Color.get(1) == Color.RED
 | 
						|
 | 
						|
.. |enum.Enum| replace:: ``enum.Enum``
 | 
						|
.. _enum.Enum: https://docs.python.org/3/library/enum.html
 |