mirror of
				https://github.com/graphql-python/graphene-django.git
				synced 2025-11-04 09:57:53 +03:00 
			
		
		
		
	Allow abstract Connection Class to DjangoObjectType
referred to as connection_class, it will instantiate the connection from the provided class or default to graphene.Connection if not supplied
This commit is contained in:
		
							parent
							
								
									2600f0f041
								
							
						
					
					
						commit
						2a39f5d8ea
					
				| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
from mock import patch
 | 
					from mock import patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from graphene import Interface, ObjectType, Schema
 | 
					from graphene import Interface, ObjectType, Schema, Connection, String
 | 
				
			||||||
from graphene.relay import Node
 | 
					from graphene.relay import Node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .. import registry
 | 
					from .. import registry
 | 
				
			||||||
| 
						 | 
					@ -17,11 +17,23 @@ class Reporter(DjangoObjectType):
 | 
				
			||||||
        model = ReporterModel
 | 
					        model = ReporterModel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ArticleConnection(Connection):
 | 
				
			||||||
 | 
					    '''Article Connection'''
 | 
				
			||||||
 | 
					    test = String()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def resolve_test():
 | 
				
			||||||
 | 
					        return 'test'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Meta:
 | 
				
			||||||
 | 
					        abstract = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Article(DjangoObjectType):
 | 
					class Article(DjangoObjectType):
 | 
				
			||||||
    '''Article description'''
 | 
					    '''Article description'''
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = ArticleModel
 | 
					        model = ArticleModel
 | 
				
			||||||
        interfaces = (Node, )
 | 
					        interfaces = (Node, )
 | 
				
			||||||
 | 
					        connection_class = ArticleConnection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RootQuery(ObjectType):
 | 
					class RootQuery(ObjectType):
 | 
				
			||||||
| 
						 | 
					@ -74,6 +86,7 @@ type Article implements Node {
 | 
				
			||||||
type ArticleConnection {
 | 
					type ArticleConnection {
 | 
				
			||||||
  pageInfo: PageInfo!
 | 
					  pageInfo: PageInfo!
 | 
				
			||||||
  edges: [ArticleEdge]!
 | 
					  edges: [ArticleEdge]!
 | 
				
			||||||
 | 
					  test: String
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ArticleEdge {
 | 
					type ArticleEdge {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ class DjangoObjectType(ObjectType):
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=False,
 | 
					    def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=False,
 | 
				
			||||||
                                    only_fields=(), exclude_fields=(), filter_fields=None, connection=None,
 | 
					                                    only_fields=(), exclude_fields=(), filter_fields=None, connection=None,
 | 
				
			||||||
                                    use_connection=None, interfaces=(), **options):
 | 
					                                    connection_class=None, use_connection=None, interfaces=(), **options):
 | 
				
			||||||
        assert is_valid_django_model(model), (
 | 
					        assert is_valid_django_model(model), (
 | 
				
			||||||
            'You need to pass a valid Django Model in {}.Meta, received "{}".'
 | 
					            'You need to pass a valid Django Model in {}.Meta, received "{}".'
 | 
				
			||||||
        ).format(cls.__name__, model)
 | 
					        ).format(cls.__name__, model)
 | 
				
			||||||
| 
						 | 
					@ -71,7 +71,11 @@ class DjangoObjectType(ObjectType):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if use_connection and not connection:
 | 
					        if use_connection and not connection:
 | 
				
			||||||
            # We create the connection automatically
 | 
					            # We create the connection automatically
 | 
				
			||||||
            connection = Connection.create_type('{}Connection'.format(cls.__name__), node=cls)
 | 
					            if not connection_class:
 | 
				
			||||||
 | 
					                connection_class = Connection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            connection = connection_class.create_type(
 | 
				
			||||||
 | 
					                '{}Connection'.format(cls.__name__), node=cls)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if connection is not None:
 | 
					        if connection is not None:
 | 
				
			||||||
            assert issubclass(connection, Connection), (
 | 
					            assert issubclass(connection, Connection), (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user