将类成员公开为结构任务
fabric-taskset的Python项目详细描述
Fabric有基于类的任务,但它们是 限制:任务类表示单个任务。
此模块使基于类的fabric任务集成为可能。
安装
pip install fabric-taskset
用法
TaskSet是一个可以将其方法公开为构造任务的类。
示例:
# fabfile.py from fabric.api import local from taskset import TaskSet, task_method class SayBase(TaskSet): def say(self, what): raise NotImplementedError() @task_method(default=True, alias='hi') def hello(self): self.say('hello') @task_method def bye(self): self.say('goodbye') class EchoSay(SayBase): def say(self, what): local('echo ' + what) say = EchoSay().expose_as_module('say')
然后:
$ fab -l Available commands: say say.bye say.hello say.hi $ fab say.hi hello
taskset.task_method是一个decorator,它将包装的方法声明为task。 它接受的参数与fabric.decorators.taskso相同 在方法上使用它,就像在函数上使用fabric的decorator一样。
您还可以创建一个“磁盘上”python模块,并用任务填充它:
# my_lib/say.py from taskset import TaskSet, task_method class SayBase(TaskSet): def say(self, what): raise NotImplementedError() @task_method(default=True, alias='hi') def hello(self): self.say('hello') class EchoSay(SayBase): def say(self, what): local('echo ' + what) instance = EchoSay() instance.expose_to_current_module() # fabfile.py from mylib import say
致谢
https://github.com/ramusus/fabriclassed是一个非常相似的应用程序。 在撰写本文时,它主要关注旧式结构任务 并包含了一个小型的部署框架。
为了养活我的nih综合症,我创建了一个fabric任务集 公开新样式的fabric任务,提供稍有不同的api 多吃点东西。
然后,这个库演变为支持公开任务而不创建虚拟对象 磁盘模块(感谢丹尼斯·恩特夫斯基)。
变化
0.2.1(2012-09-21)
- private_expose_to方法现在返回list,而不是generator。
0.2(2012-08-28)
- @taskdecorator已弃用,并替换为@task_method。 这是个坏名字,因为@fabric.taskdecorator (谢谢丹尼斯·恩特夫斯基);
- Taskset.expose_as_module方法,允许使用任务集实例 不在磁盘上创建虚拟模块的命令行 (谢谢丹尼斯·恩特夫斯基)。
0.1(2012-03-03)
初次发布。