将业务逻辑封装在命令类中。
mutations的Python项目详细描述
突变
将您的业务逻辑组合成对输入进行清理和验证的命令。
安装
$ pip install mutations
工作原理:
- 子类
mutations.Mutation
- 定义您的输入
- 在命令中定义一个
execute
方法。 - 运行它,如下所示:
SimpleMutation.run(foo='bar')
要了解更多信息,请参见this blog post。
示例
importmutationsclassUserSignup(mutations.Mutation):"""Define the inputs to your mutation here. """email=mutations.fields.CharField(required=True)full_name=mutations.fields.CharField(required=True)send_welcome_email=mutations.fields.Boolean(required=False,default=True)defvalidate_email_address(self):"""Custom validation for a field. If you encounter any validation errors and want to raise, you should raise mutation.ValidationError or some sublcass thereof. Otherwise, it assumes there were no problems. Any function beginning with `validate_` is assumed to be a validator function and will be run before the mutation can execute. """ifnotself.email.is_valid():raisemutations.ValidationError("email_not_valid","Email is not valid.")defexecute(self):"""Executes the mutation. This method does the heavy lifting. You can call it by calling .run() on your mutation class. """user=User.objects.create(email=self.email,name=self.full_name)ifself.send_welcome_email:EmailServer.deliver(recipient=self.email)returnuser
调用命令
>>>result=UserSignup.run(email=email,full_name="Bob Boblob")>>>result.successTrue>>>result.return_value<Userid=...>>>>result.errorsresult=...
>>>result=UserSignup.run(email=None)>>>result.successFalse>>>result.errorsmutations.ErrorDict({'email':['email_not_valid']})>>>result.valueNone
仅运行验证
>>>result=UserSignup.validate(email=email,full_name="Bob Boblob")>>>result.is_validTrue
测试
$ make tests
当您准备发布时,请确保测试通过了2.7版 通过运行tox:
$ tox
版本控制
这个项目使用Semantic Versioning。
谢谢
感谢赛普拉斯的红宝石。我创建这个库是因为我在为Python寻找类似的东西