Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Refactoring 在python中使用泛型类型重构代码_Refactoring_Graphene Python - Fatal编程技术网

Refactoring 在python中使用泛型类型重构代码

Refactoring 在python中使用泛型类型重构代码,refactoring,graphene-python,Refactoring,Graphene Python,我一直在尝试几种方法重构以下代码,因为这些类在我的应用程序中反复出现: class CreateRecord(Mutation): record = Field(lambda: Unit) class Arguments: input = CreateInput(required=True) def mutate(self, info, input): data = input_to_dictionary(input)

我一直在尝试几种方法重构以下代码,因为这些类在我的应用程序中反复出现:

class CreateRecord(Mutation):
    record = Field(lambda: Unit)

    class Arguments:
        input = CreateInput(required=True)

    def mutate(self, info, input):
        data = input_to_dictionary(input)
        data['createdAt'] = datetime.utcnow()
        # data['createdBy'] = <user>  # TODO: <user> input

        record = UnitModel(**data)
        db_session.add(record)
        db_session.commit()

        return CreateRecord(record=record)


class UpdateRecord(Mutation):
    record = Field(lambda: Unit)

    class Arguments:
        input = UpdateInput(required=True)

    def mutate(self, info, input):
        data = input_to_dictionary(input)
        data['updatedAt'] = datetime.utcnow()
        # data['updatedBy'] = <user>  # TODO: <user> input

        record = db_session.query(UnitModel).filter_by(id=data['id'])
        record.update(data)
        db_session.commit()

        record = db_session.query(UnitModel).filter_by(id=data['id']).first()

        return UpdateRecord(record=record)


class DeleteRecord(Mutation):
    record = Field(lambda: Unit)

    class Arguments:
        input = DeleteInput(required=True)

    def mutate(self, info, input):
        data = input_to_dictionary(input)
        data['deletedAt'] = datetime.utcnow()
        # data['deletedBy'] = <user>  # TODO: <user> input
        data['isDeleted'] = True

        record = db_session.query(UnitModel).filter_by(id=data['id'])
        record.update(data)
        db_session.commit()

        record = db_session.query(UnitModel).filter_by(id=data['id']).first()

        return DeleteRecord(record=record)
方法我只想检查它是创建、更新还是删除操作,但在执行之前我仍然希望使用泛型类型


非常感谢您的帮助。TIA。

我已经用一个包含以下方法的mixin类为自己解决了这个特殊问题:

from graphene.utils.str_converters import to_snake_case

class MutationResponseMixin(object):
    @classmethod
    def get_operation_type(cls):
        """
        Determine the CRUD type from the mutation class name.
        Uses mutation's class name to determine correct operation.
        ( create / update / delete )
        """
        return to_snake_case(cls.__name__).split('_')[0]
这允许我在mixin中包含一个由create、update和delete方法共享的变异方法,并根据
get\u operation\u type
的值采取有条件的操作


我还需要一种方法来确定mixin突变的基本记录(在您的案例中是
UnitModel
),因此我的案例最终明确地将其作为每个突变类的一个属性进行声明。

感谢您的回答,尽管我已经使用neo4j graphql扩展改为neo4j,因为……这可能会帮助其他人。。。
from graphene.utils.str_converters import to_snake_case

class MutationResponseMixin(object):
    @classmethod
    def get_operation_type(cls):
        """
        Determine the CRUD type from the mutation class name.
        Uses mutation's class name to determine correct operation.
        ( create / update / delete )
        """
        return to_snake_case(cls.__name__).split('_')[0]