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]