Пользовательский параметр строкового поля GraphQL

От меня требуется очистить все мои входные данные, поступающие через конечную точку GraphQL, и удалить потенциально вредоносный материал (встроенного механизма Django недостаточно, он должен быть активно удален). Поскольку я не хочу добавлять очистку для каждой мутации вручную, я подумал о создании пользовательского класса graphene.String() с именем clean_string.String(), включающего nh3.clean() для очистки, поэтому я должен заменить только отдельные строки:

import graphene
import nh3
from graphql import StringValueNode, Undefined


class String(graphene.String):
    @classmethod
    def parse_value(cls, value):
        if isinstance(value, str):
            cleaned_value = nh3.clean(value)
        else:
            cleaned_value = value
        return super(String, cls).parse_value(cleaned_value)

    @staticmethod
    def parse_literal(ast, _variables=None):
        if isinstance(ast, StringValueNode):
            return nh3.clean(ast.value)
        return Undefined

В моем schema.py Тогда у меня есть

import clean_string

class CreateUser(graphene.Mutation):
    user = graphene.Field(UserType)

    class Arguments:
        email = clean_string.String(required=True)
        password = clean_string.String(required=True)
        
    @staticmethod
    def mutate(_, info, email, password)
        # sanitized email & password

Но это вообще не вызывается. Когда у меня есть входные данные типа <img>password</img> и я выполняю очистку вручную, результатом будет <img>password, но с моим пользовательским классом ничего не происходит.

У кого-нибудь есть подсказки, как это решить? Заранее спасибо!

Вернуться на верх