def _get_argument_fields(cls): input_class = getattr(cls, "Arguments", None) if not input_class: input_class = getattr(cls, "Input", None) if input_class: warn_deprecation(( "Please use {name}.Arguments instead of {name}.Input." "Input is now only used in ClientMutationID.\nRead more: " "https://github.com/graphql-python/graphene/blob/2.0/UPGRADE-v2.0.md#mutation-input" ).format(name=cls.__name__)) arguments_props = {} if input_class: arguments_props = props(input_class) return arguments_props
def __init_subclass_with_meta__( cls, serializer_class=None, queryset=None, only_fields=(), include_fields=(), exclude_fields=(), pagination=None, input_field_name=None, output_field_name=None, results_field_name=None, nested_fields=(), filter_fields=None, description="", filterset_class=None, **options, ): if not serializer_class: raise Exception( "serializer_class is required on all ModelSerializerType") model = serializer_class.Meta.model description = description or "ModelSerializerType for {} model".format( model.__name__) input_field_name = input_field_name or "new_{}".format( model._meta.model_name) output_field_name = output_field_name or model._meta.model_name input_class = getattr(cls, "Arguments", None) if not input_class: input_class = getattr(cls, "Input", None) if input_class: warn_deprecation(( "Please use {name}.Arguments instead of {name}.Input." "Input is now only used in ClientMutationID.\nRead more: " "https://github.com/graphql-python/graphene/blob/2.0/UPGRADE-v2.0.md#mutation-input" ).format(name=cls.__name__)) if input_class: arguments = props(input_class) else: arguments = {} registry = get_global_registry() factory_kwargs = { "model": model, "only_fields": only_fields, "include_fields": include_fields, "exclude_fields": exclude_fields, "filter_fields": filter_fields, "pagination": pagination, "queryset": queryset, "nested_fields": nested_fields, "registry": registry, "skip_registry": False, "filterset_class": filterset_class, "results_field_name": results_field_name, } output_type = registry.get_type_for_model(model) if not output_type: output_type = factory_type("output", DjangoObjectType, **factory_kwargs) output_list_type = factory_type("list", DjangoListObjectType, **factory_kwargs) django_fields = OrderedDict({output_field_name: Field(output_type)}) global_arguments = {} for operation in ("create", "delete", "update"): global_arguments.update({operation: OrderedDict()}) if operation != "delete": input_type = registry.get_type_for_model(model, for_input=operation) if not input_type: # factory_kwargs.update({'skip_registry': True}) input_type = factory_type("input", DjangoInputObjectType, operation, **factory_kwargs) global_arguments[operation].update( {input_field_name: Argument(input_type, required=True)}) else: global_arguments[operation].update({ "id": Argument( ID, required=True, description="Django object unique identification field", ) }) global_arguments[operation].update(arguments) _meta = DjangoSerializerOptions(cls) _meta.mutation_output = cls _meta.arguments = global_arguments _meta.fields = django_fields _meta.output_type = output_type _meta.output_list_type = output_list_type _meta.model = model _meta.queryset = queryset or model._default_manager _meta.serializer_class = serializer_class _meta.input_field_name = input_field_name _meta.output_field_name = output_field_name _meta.nested_fields = nested_fields super(DjangoSerializerType, cls).__init_subclass_with_meta__(_meta=_meta, description=description, **options)
def __init_subclass_with_meta__(cls, serializer_class=None, queryset=None, only_fields=(), exclude_fields=(), pagination=None, input_field_name=None, output_field_name=None, results_field_name=None, nested_fields=False, filter_fields=None, description='', **options): if not serializer_class: raise Exception('serializer_class is required on all ModelSerializerType') model = serializer_class.Meta.model description = description or 'ModelSerializerType for {} model'.format(model.__name__) input_field_name = input_field_name or 'new_{}'.format(model._meta.model_name) output_field_name = output_field_name or model._meta.model_name input_class = getattr(cls, 'Arguments', None) if not input_class: input_class = getattr(cls, 'Input', None) if input_class: warn_deprecation(("Please use {name}.Arguments instead of {name}.Input." "Input is now only used in ClientMutationID.\nRead more: " "https://github.com/graphql-python/graphene/blob/2.0/UPGRADE-v2.0.md#mutation-input"). format(name=cls.__name__)) if input_class: arguments = props(input_class) else: arguments = {} registry = get_global_registry() outputType = registry.get_type_for_model(model) if not outputType: outputType = object_type_factory(DjangoObjectType, new_model=model, new_only_fields=only_fields, new_exclude_fields=exclude_fields, new_filter_fields=filter_fields, new_registry=registry) outputListType = object_list_type_factory(DjangoListObjectType, model, new_only_fields=only_fields, new_exclude_fields=exclude_fields, new_queryset=queryset, new_results_field_name=results_field_name, new_filter_fields=filter_fields, new_pagination=pagination) django_fields = OrderedDict({output_field_name: Field(outputType)}) global_arguments = {} for operation in ('create', 'delete', 'update'): global_arguments.update({operation: OrderedDict()}) if operation != 'delete': inputType = registry.get_type_for_model(model, for_input=operation) if not inputType: inputType = input_object_type_factory(DjangoInputObjectType, new_model=model, new_only_fields=only_fields, new_input_for=operation, new_exclude_fields=exclude_fields, new_registry=registry, new_skip_registry=True, new_nested_fields=nested_fields) global_arguments[operation].update({ input_field_name: Argument(inputType, required=True) }) else: global_arguments[operation].update({ 'id': Argument(ID, required=True, description='Django object unique identification field') }) global_arguments[operation].update(arguments) _meta = DjangoSerializerOptions(cls) _meta.mutation_output = cls _meta.arguments = global_arguments _meta.fields = django_fields _meta.output_type = outputType _meta.output_list_type = outputListType _meta.model = model _meta.queryset = queryset or model._default_manager _meta.serializer_class = serializer_class _meta.input_field_name = input_field_name _meta.output_field_name = output_field_name super(DjangoSerializerType, cls).__init_subclass_with_meta__(_meta=_meta, description=description, **options)
def __init_subclass_with_meta__(cls, serializer_class=None, only_fields=(), exclude_fields=(), save_resolver=None, delete_resolver=None, input_field_name=None, output_field_name=None, description='', nested_fields=False, **options): if not serializer_class: raise Exception('serializer_class is required on all DjangoSerializerMutation') model = serializer_class.Meta.model description = description or 'SerializerMutation for {} model'.format(model.__name__) input_field_name = input_field_name or 'new_{}'.format(model._meta.model_name) output_field_name = output_field_name or model._meta.model_name input_class = getattr(cls, 'Arguments', None) if not input_class: input_class = getattr(cls, 'Input', None) if input_class: warn_deprecation(("Please use {name}.Arguments instead of {name}.Input." "Input is now only used in ClientMutationID.\nRead more: " "https://github.com/graphql-python/graphene/blob/2.0/UPGRADE-v2.0.md#mutation-input"). format(name=cls.__name__)) if input_class: arguments = props(input_class) else: arguments = {} registry = get_global_registry() factory_kwargs = { 'model': model, 'only_fields': only_fields, 'exclude_fields': exclude_fields, 'nested_fields': nested_fields, 'registry': registry, 'skip_registry': False } output_type = registry.get_type_for_model(model) if not output_type: output_type = factory_type('output', DjangoObjectType, **factory_kwargs) django_fields = OrderedDict({output_field_name: Field(output_type)}) global_arguments = {} for operation in ('create', 'delete', 'update'): global_arguments.update({operation: OrderedDict()}) if operation != 'delete': input_type = registry.get_type_for_model(model, for_input=operation) if not input_type: factory_kwargs.update({'skip_registry': True}) input_type = factory_type('input', DjangoInputObjectType, operation, **factory_kwargs) global_arguments[operation].update({ input_field_name: Argument(input_type, required=True) }) else: global_arguments[operation].update({ 'id': Argument(ID, required=True, description='Django object unique identification field') }) global_arguments[operation].update(arguments) if not save_resolver: save_mutation = getattr(cls, 'save_mutation', None) save_resolver = get_unbound_function(save_mutation) if save_mutation else None if not delete_resolver: delete_mutation = getattr(cls, 'delete_mutation', None) delete_resolver = get_unbound_function(delete_mutation) if delete_mutation else None assert (save_resolver or delete_resolver), \ 'All the SerializerMutations must define at least one of this class methods: ' \ '\'save_mutation\' or \'delete_mutation\'' _meta = SerializerMutationOptions(cls) _meta.output = cls _meta.arguments = global_arguments _meta.fields = django_fields _meta.output_type = output_type _meta.save_resolver = save_resolver _meta.delete_resolver = delete_resolver _meta.model = model _meta.serializer_class = serializer_class _meta.input_field_name = input_field_name _meta.output_field_name = output_field_name super(DjangoSerializerMutation, cls).__init_subclass_with_meta__(_meta=_meta, description=description, **options)
def __init_subclass_with_meta__(cls, serializer_class=None, only_fields=(), exclude_fields=(), save_resolver=None, delete_resolver=None, input_field_name=None, output_field_name=None, description='', nested_fields=False, **options): if not serializer_class: raise Exception( 'serializer_class is required on all DjangoSerializerMutation') model = serializer_class.Meta.model description = description or 'SerializerMutation for {} model'.format( model.__name__) input_field_name = input_field_name or 'new_{}'.format( model._meta.model_name) output_field_name = output_field_name or model._meta.model_name input_class = getattr(cls, 'Arguments', None) if not input_class: input_class = getattr(cls, 'Input', None) if input_class: warn_deprecation(( "Please use {name}.Arguments instead of {name}.Input." "Input is now only used in ClientMutationID.\nRead more: " "https://github.com/graphql-python/graphene/blob/2.0/UPGRADE-v2.0.md#mutation-input" ).format(name=cls.__name__)) if input_class: arguments = props(input_class) else: arguments = {} registry = get_global_registry() factory_kwargs = { 'model': model, 'only_fields': only_fields, 'exclude_fields': exclude_fields, 'nested_fields': nested_fields, 'registry': registry, 'skip_registry': False } output_type = registry.get_type_for_model(model) if not output_type: output_type = factory_type('output', DjangoObjectType, **factory_kwargs) django_fields = OrderedDict({output_field_name: Field(output_type)}) global_arguments = {} for operation in ('create', 'delete', 'update'): global_arguments.update({operation: OrderedDict()}) if operation != 'delete': input_type = registry.get_type_for_model(model, for_input=operation) if not input_type: factory_kwargs.update({'skip_registry': True}) input_type = factory_type('input', DjangoInputObjectType, operation, **factory_kwargs) global_arguments[operation].update( {input_field_name: Argument(input_type, required=True)}) else: global_arguments[operation].update({ 'id': Argument( ID, required=True, description='Django object unique identification field' ) }) global_arguments[operation].update(arguments) if not save_resolver: save_mutation = getattr(cls, 'save_mutation', None) save_resolver = get_unbound_function( save_mutation) if save_mutation else None if not delete_resolver: delete_mutation = getattr(cls, 'delete_mutation', None) delete_resolver = get_unbound_function( delete_mutation) if delete_mutation else None assert (save_resolver or delete_resolver), \ 'All the SerializerMutations must define at least one of this class methods: ' \ '\'save_mutation\' or \'delete_mutation\'' _meta = SerializerMutationOptions(cls) _meta.output = cls _meta.arguments = global_arguments _meta.fields = django_fields _meta.output_type = output_type _meta.save_resolver = save_resolver _meta.delete_resolver = delete_resolver _meta.model = model _meta.serializer_class = serializer_class _meta.input_field_name = input_field_name _meta.output_field_name = output_field_name super(DjangoSerializerMutation, cls).__init_subclass_with_meta__(_meta=_meta, description=description, **options)
def __init_subclass_with_meta__(cls, serializer_class=None, queryset=None, only_fields=(), exclude_fields=(), pagination=None, input_field_name=None, output_field_name=None, results_field_name=None, nested_fields=False, filter_fields=None, description='', filterset_class=None, **options): if not serializer_class: raise Exception('serializer_class is required on all ModelSerializerType') model = serializer_class.Meta.model description = description or 'ModelSerializerType for {} model'.format(model.__name__) input_field_name = input_field_name or 'new_{}'.format(model._meta.model_name) output_field_name = output_field_name or model._meta.model_name input_class = getattr(cls, 'Arguments', None) if not input_class: input_class = getattr(cls, 'Input', None) if input_class: warn_deprecation(("Please use {name}.Arguments instead of {name}.Input." "Input is now only used in ClientMutationID.\nRead more: " "https://github.com/graphql-python/graphene/blob/2.0/UPGRADE-v2.0.md#mutation-input"). format(name=cls.__name__)) if input_class: arguments = props(input_class) else: arguments = {} registry = get_global_registry() factory_kwargs = { 'model': model, 'only_fields': only_fields, 'exclude_fields': exclude_fields, 'filter_fields': filter_fields, 'pagination': pagination, 'queryset': queryset, 'nested_fields': nested_fields, 'registry': registry, 'skip_registry': False, 'filterset_class': filterset_class } output_type = registry.get_type_for_model(model) if not output_type: output_type = factory_type('output', DjangoObjectType, **factory_kwargs) output_list_type = factory_type('list', DjangoListObjectType, **factory_kwargs) django_fields = OrderedDict({output_field_name: Field(output_type)}) global_arguments = {} for operation in ('create', 'delete', 'update'): global_arguments.update({operation: OrderedDict()}) if operation != 'delete': input_type = registry.get_type_for_model(model, for_input=operation) if not input_type: factory_kwargs.update({'skip_registry': True}) input_type = factory_type('input', DjangoInputObjectType, operation, **factory_kwargs) global_arguments[operation].update({ input_field_name: Argument(input_type, required=True) }) else: global_arguments[operation].update({ 'id': Argument(ID, required=True, description='Django object unique identification field') }) global_arguments[operation].update(arguments) _meta = DjangoSerializerOptions(cls) _meta.mutation_output = cls _meta.arguments = global_arguments _meta.fields = django_fields _meta.output_type = output_type _meta.output_list_type = output_list_type _meta.model = model _meta.queryset = queryset or model._default_manager _meta.serializer_class = serializer_class _meta.input_field_name = input_field_name _meta.output_field_name = output_field_name super(DjangoSerializerType, cls).__init_subclass_with_meta__(_meta=_meta, description=description, **options)