Metadata-Version: 1.1
Name: graphene-django-extras
Version: 0.0.1b3
Summary: Graphene-Django-Extras add some extra funcionalities to graphene-django to facilitate the graphql use without Relay and allow pagination and filtering integration
Home-page: https://github.com/eamigo86/graphene-django-extras
Author: Ernesto Perez Amigo
Author-email: eamigo@nauta.cu
License: MIT
Description: 
        
        Graphene-Django-Extras
        ======================
        
        This package add some extra funcionalities to graphene-django to facilitate the graphql use without Relay and 
        allow pagination and filtering integration.
        
        Installation:
        -------------
        
        For installing graphene-django-extras, just run this command in your shell:
        
        .. code:: bash
        
            pip install "graphene-django-extras"
        
        Documentation:
        --------------
        Extra functionalities:
            Fields:
                1.	DjangoListField
                2.	DjangoFilterListField
                3.	DjangoFilterPaginateListField
                4.	DjangoListObjectField
        
            Mutations:
                1.	DjangoSerializerMutation
        
            Types:
                1.  DjangoObjectTypeExtra
                2.	DjangoInputObjectType
                3.	DjangoPaginatedObjectListType
        
            Pagination:
                1.	LimitOffsetGraphqlPagination
                2.	PageGraphqlPagination
                3.	CursosGraphqlPagination (cooming soon)
        
        Examples:
        ---------
        
        Here is a simple use of graphene-django-extras:
        
        1- Types Definition:
        
        .. code:: python
        
            from django.contrib.auth.models import User
            from graphene_django_extras import DjangoObjectType, DjangoPaginatedObjectListType    
            from graphene_django_extras.pagination import LimitOffsetGraphqlPagination
        
            class UserType(DjangoObjectType):
                """
                    The DjangoObjectType have a ID field to filter to avoid resolve method definition on Queries 
                """
        
                class Meta:
                    model = User
                    description = "Type for User Model"
                    filter_fields = {
                        'id': ['exact', ],
                        'first_name': ['icontains', 'iexact'],
                        'last_name': ['icontains', 'iexact'],
                        'username': ['icontains', 'iexact'],
                        'email': ['icontains', 'iexact']
                    }
        
            class UserListType(DjangoPaginatedObjectListType):
                class Meta:
                    description = "User list query definition"
                    model = User
                    pagination = LimitOffsetGraphqlPagination()
        
        
        2- Input Types can be defined for use on mutations:
        
        .. code:: python
        
            from graphene_django_extras import DjangoInputObjectType
        
            class UserInput(DjangoInputObjectType):
                class Meta:
                    description = " Input Type for User Model "
                    model = User
        
        
        3- You can define traditional mutations that use Input Types or Mutations based on DRF SerializerClass:
        
        .. code:: python        
        
            import graphene
            from .serializers import UserSerializer
            from graphene_django_extras import DjangoSerializerMutation     
            from .types import UserType
            from .input_types import UserInputType
        
            class UserSerializerMutation(DjangoSerializerMutation):
                class Meta:
                    description = " Serializer based Mutation for Users "
                    serializer_class = UserSerializer
        
        
            class UserMutation(graphene.mutation):
                """
                    You must implement the mutate function
                """
        
                user = graphene.Field(UserType, required=False)
        
                class Arguments:
                    new_user = graphene.Argument(UserInput)
        
                class Meta:
                    description = "Normal mutation for Users"
        
                @classmethod
                def mutate(cls, info, **kwargs):
                    ...
        
        
        4- Defining schemes:
        
        .. code:: python  
        
            import graphene
            from graphene_django_extras import DjangoObjectField, DjangoListObjectField
            from .types import UserType, UserListType
            from .mutations import UserMutation, UserSerializerMutation
        
            class Queries(graphene.ObjectType):
                # Posible User list queries definitions
                all_users = DjangoListObjectField(UserListType, description=_('All Usersquery'))
                all_users1 = DjangoFilterPaginateListField(UserType, pagination=LimitOffsetGraphqlPagination())
                all_users2 = DjangoFilterListField(UserType)
                all_users3 = DjangoListObjectField(UserListType, filterset_class=UserFilter, description=_('All Users query'))
        
                # Single user queries definitions
                user = DjangoObjectField(UserType, description=_('Single User query'))  
                other_way_user = DjangoObjectField(UserListType.getOne(), description=_('Other way to query a single User query'))  
        
            class Mutations(graphene.ObjectType):
                user_create = UserSerializerMutation.CreateField(deprecation_reason='Deprecation message')
                user_delete = UserSerializerMutation.DeleteField()
                user_update = UserSerializerMutation.UpdateField()
        
                traditional_user_mutation = UserMutation.Field()
        
        
        5- Examples of queries:
        
        .. code:: javascript
        
            {
                allUsers(username_Icontains:"john"){
                    results(limit:5, offset:5){
                        id
                        username
                        firstName
                        lastName
                    }
                    totalCount
                }
        
                allUsers1(lastName_Iexact:"Doe", limit:5, offset:0){
                    id
                    username
                    firstName
                    lastName    
                }
        
                allUsers2(firstName_Icontains: "J"){
                    id
                    username
                    firstName
                    lastName
                }
        
                user(id:2){
                    id
                    username
                    firstName
                }
            }
        
        
        6- Examples of Mutations:
        
        .. code:: javascript
        
            mutation{
                userCreate(newUser:{password:"test*123", email: "test@test.com", username:"test"}){
                    user{
                        id
                        username
                        firstName
                        lastName
                    }
                    ok
                    errors{
                        field
                        messages
                    }
                }
        
                userDelete(id:1){
                    ok
                    errors{
                        field
                        messages
                    }
                }
        
                userUpdate(newUser:{id:1, username:"John"}){
                    user{
                        id
                        username
                    }
                    ok
                    errors{
                        field
                        messages
                    }
                }
            }
        
Keywords: api graphql protocol rest graphene django
Platform: any
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: Implementation :: PyPy
