首先,我必须承认我对Fabric和Python都很新手,但我希望按照正确的方式进行操作,所以……我想用一个prepare
函数来装饰我的一些任务,在已有的变量基础上向env
中添加一些变量。看一下:
from fabric.api import *
import fabstork.project.base as base
import fabstork.utils.drupal as utils
def prepare(task):
""" Decorator to set some additional environment variables """
def prepared(*args, **kwargs):
env.sites_folder = env.sites_folder if 'sites_folder' in env else 'default'
env.settings_file = "%s/www/sites/%s/settings.php" % (env.build_path, env.sites_folder)
# more to come
return task(*args, **kwargs)
return prepared
@task
@prepare
def push(ref='HEAD'):
"""
Deploy a commit to a host
"""
base.push(ref)
utils.settings_php()
utils.link_files()
utils.set_perms()
上面的例子失败了,因为
push
不再是任务了。当在命令行执行fab --list
时,它不在可用任务列表中。省略装饰器会得到一个完美的任务。我做错了什么?