Cóż, muszę przyznać, że jestem nowy w branży, a nawet python, ale jestem zainteresowany robieniem tego we właściwy sposób, więc ... Chcę ozdobić niektóre z moich zadania z funkcją prepare
, która dodaje kilka zmiennych do env
w zależności od już podanych. Rzucić okiem:Jak dodać niestandardowy dekorator do zadania tkaniny
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()
Powyższy przykład nie powiedzie się, że push
ma zadanie już, to nie w liście dostępnych zadań, gdy robi fab --list
w wierszu poleceń. Pominięcie dekoratora prowadzi do doskonałego zadania. Co ja robię źle?
Dzięki! Więc w zasadzie brakowało mi ** @ wraps (func) **. Czy mógłbyś zaktualizować swoją odpowiedź, aby wyraźnie to podkreślić? – aaki