示例#1
0
    def __init_subclass_with_meta__(cls,
                                    form_class=None,
                                    session_key='',
                                    _meta=None,
                                    **options):
        if not _meta:
            _meta = SessionObjectTypeOptions(cls)

        assert session_key, f'{cls.__name__} must define Meta.session_key.'
        _meta.session_key = session_key

        assert form_class is not None, f'{cls.__name__} must define Meta.form_class.'
        _meta.form_class = form_class
        form = form_class()

        fields = yank_fields_from_attrs(fields_for_form(form, [], []),
                                        _as=Field)
        if hasattr(form, 'extra_graphql_output_fields'):
            fields.update(
                yank_fields_from_attrs(form.extra_graphql_output_fields,
                                       _as=Field))

        if _meta.fields:
            _meta.fields.update(fields)
        else:
            _meta.fields = fields

        super().__init_subclass_with_meta__(_meta=_meta, **options)
示例#2
0
    def __init_subclass_with_meta__(
        cls,
        form_class: Type[forms.Form] = forms.Form,
        formset_classes: Optional[FormsetClasses] = None,
        only_fields=(), exclude_fields=(), **options
    ):
        form = form_class()
        input_fields = fields_for_form(form, only_fields, exclude_fields)

        formset_classes = formset_classes or {}

        for (formset_name, formset_class) in formset_classes.items():
            formset_form = get_formset_form(formset_class())
            formset_input_fields = fields_for_form(formset_form, only_fields, exclude_fields)
            formset_form_type = type(
                f"{to_capitalized_camel_case(formset_name)}{formset_class.__name__}Input",
                (graphene.InputObjectType,),
                yank_fields_from_attrs(formset_input_fields, _as=graphene.InputField)
            )
            if formset_name in input_fields:
                raise AssertionError(f'multiple definitions for "{formset_name}" exist')
            input_field_for_form = yank_fields_from_attrs({
                formset_name: graphene.List(
                    graphene.NonNull(formset_form_type),
                    required=True
                )
            })
            input_fields.update(input_field_for_form)

        # The original Graphene-Django implementation set the output fields
        # to the same value as the input fields. We don't need this, and it
        # bloats our schema, so we'll ignore it.
        output_fields = {}  # type: ignore

        _meta = DjangoFormMutationOptions(cls)
        _meta.form_class = form_class
        _meta.formset_classes = formset_classes
        _meta.exclude_fields = exclude_fields
        _meta.fields = yank_fields_from_attrs(output_fields, _as=graphene.Field)

        input_fields = yank_fields_from_attrs(input_fields, _as=graphene.InputField)
        super().__init_subclass_with_meta__(
            _meta=_meta, input_fields=input_fields, **options
        )

        cls._input_type_to_mut_mapping[cls.Input.__name__] = cls
    def populate_meta_options_and_get_input_fields(
            cls,
            _meta: DjangoFormOptionsMixin,
            form_class: Type[forms.Form],
            formset_classes: Optional[FormsetClasses] = None,
            only_fields=(),
            exclude_fields=(),
    ):
        form = form_class()
        input_fields = fields_for_form(form, only_fields, exclude_fields)

        formset_classes = formset_classes or {}

        for (formset_name, formset_class) in formset_classes.items():
            formset_form = get_formset_form(formset_class())
            formset_input_fields = fields_for_form(formset_form, only_fields,
                                                   exclude_fields)
            type_key = (formset_form.__class__, tuple(only_fields),
                        tuple(exclude_fields))
            formset_form_type = cls._register_input_type(
                type_key,
                type(
                    f"{to_capitalized_camel_case(formset_name)}{formset_class.__name__}Input",
                    (graphene.InputObjectType, ),
                    yank_fields_from_attrs(formset_input_fields,
                                           _as=graphene.InputField),
                ),
            )
            if formset_name in input_fields:
                raise AssertionError(
                    f'multiple definitions for "{formset_name}" exist')
            input_field_for_form = yank_fields_from_attrs({
                formset_name:
                graphene.List(graphene.NonNull(formset_form_type),
                              required=True)
            })
            input_fields.update(input_field_for_form)

        _meta.form_class = form_class
        _meta.formset_classes = formset_classes
        _meta.exclude_fields = exclude_fields

        input_fields = yank_fields_from_attrs(input_fields,
                                              _as=graphene.InputField)

        return input_fields
示例#4
0
class OnboardingStep1Info(graphene.ObjectType):
    locals().update(fields_for_form(forms.OnboardingStep1Form(), [], []))

    address_verified = graphene.Boolean(
        required=True,
        description=(
            "Whether the user's address was verified by a geocoder. "
            "If False, it is because the geocoder service was unavailable, "
            "not because the address is invalid."
        )
    )
示例#5
0
    def __init_subclass_with_meta__(cls,
                                    form_class=None,
                                    only_fields=(),
                                    exclude_fields=(),
                                    **options):

        if not form_class:
            raise Exception("form_class is required for RelayFormMutation")

        form = form_class()
        input_fields = fields_for_form(form, only_fields, exclude_fields)

        _meta = DjangoFormMutationOptions(cls)
        _meta.form_class = form_class

        input_fields = yank_fields_from_attrs(input_fields,
                                              _as=graphene.InputField)
        super().__init_subclass_with_meta__(_meta=_meta,
                                            input_fields=input_fields,
                                            **options)
示例#6
0
class OnboardingStep3Info(graphene.ObjectType):
    locals().update(fields_for_form(forms.OnboardingStep3Form(), [], []))