mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-11-04 09:57:41 +03:00 
			
		
		
		
	Added app_label
This commit is contained in:
		
							parent
							
								
									cd216447c2
								
							
						
					
					
						commit
						1ec2f5a4c3
					
				| 
						 | 
				
			
			@ -1,17 +1,18 @@
 | 
			
		|||
from graphene.utils import cached_property
 | 
			
		||||
 | 
			
		||||
DEFAULT_NAMES = ('description', 'name', 'interface',
 | 
			
		||||
DEFAULT_NAMES = ('app_label', 'description', 'name', 'interface',
 | 
			
		||||
                 'type_name', 'interfaces',  'proxy')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Options(object):
 | 
			
		||||
    def __init__(self, meta=None):
 | 
			
		||||
    def __init__(self, meta=None, app_label=None):
 | 
			
		||||
        self.meta = meta
 | 
			
		||||
        self.local_fields = []
 | 
			
		||||
        self.interface = False
 | 
			
		||||
        self.proxy = False
 | 
			
		||||
        self.interfaces = []
 | 
			
		||||
        self.parents = []
 | 
			
		||||
        self.app_label = app_label
 | 
			
		||||
 | 
			
		||||
    def contribute_to_class(self, cls, name):
 | 
			
		||||
        cls._meta = self
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ class ObjectTypeMeta(type):
 | 
			
		|||
            meta = attr_meta
 | 
			
		||||
        base_meta = getattr(new_class, '_meta', None)
 | 
			
		||||
 | 
			
		||||
        new_class.add_to_class('_meta', Options(meta))
 | 
			
		||||
        new_class.add_to_class('_meta', Options(meta, module))
 | 
			
		||||
        if base_meta and base_meta.proxy:
 | 
			
		||||
            new_class._meta.interface = base_meta.interface
 | 
			
		||||
        # Add all attributes to the class.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,16 +14,34 @@ def get_object_type(field_type, object_type=None):
 | 
			
		|||
        if field_type == 'self':
 | 
			
		||||
            field_type = object_type._meta.type
 | 
			
		||||
        else:
 | 
			
		||||
            object_type = get_registered_object_type(field_type)
 | 
			
		||||
            object_type = get_registered_object_type(field_type, object_type)
 | 
			
		||||
            field_type = object_type._meta.type
 | 
			
		||||
    return field_type
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_registered_object_type(name):
 | 
			
		||||
    for object_type in registered_object_types:
 | 
			
		||||
        if object_type._meta.type_name == name:
 | 
			
		||||
            return object_type
 | 
			
		||||
    return None
 | 
			
		||||
def get_registered_object_type(name, object_type=None):
 | 
			
		||||
    app_label = None
 | 
			
		||||
    object_type_name = name
 | 
			
		||||
 | 
			
		||||
    if '.' in name:
 | 
			
		||||
        app_label, object_type_name = name.split('.', 1)
 | 
			
		||||
    elif object_type:
 | 
			
		||||
        app_label = object_type._meta.app_label
 | 
			
		||||
 | 
			
		||||
    # Filter all registered object types which have the same name
 | 
			
		||||
    ots = [ot for ot in registered_object_types if ot._meta.type_name == name]
 | 
			
		||||
    # If the list have more than one object type with the name, filter by
 | 
			
		||||
    # the app_label
 | 
			
		||||
    if len(ots)>1 and app_label:
 | 
			
		||||
        ots = [ot for ot in ots if ot._meta.app_label == app_label]
 | 
			
		||||
 | 
			
		||||
    if len(ots)>1:
 | 
			
		||||
        raise Exception('Multiple ObjectTypes returned with the name %s' % name)
 | 
			
		||||
    if not ots:
 | 
			
		||||
        raise Exception('No ObjectType found with name %s' % name)
 | 
			
		||||
 | 
			
		||||
    return ots[0]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@signals.class_prepared.connect
 | 
			
		||||
def object_type_created(sender):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@ def wrap_character(character):
 | 
			
		|||
 | 
			
		||||
class Character(graphene.Interface):
 | 
			
		||||
    name = graphene.StringField()
 | 
			
		||||
    friends = relay.Connection('self')
 | 
			
		||||
    friends = relay.Connection('Character')
 | 
			
		||||
    appearsIn = graphene.ListField(Episode)
 | 
			
		||||
 | 
			
		||||
    def resolve_friends(self, args, *_):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user