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
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)