mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[enh] Add hook_list action with custom hook folder's integration
This commit is contained in:
parent
f4472ed6e1
commit
cc034dbf63
2 changed files with 60 additions and 5 deletions
|
@ -1134,6 +1134,14 @@ hook:
|
||||||
app:
|
app:
|
||||||
help: Scripts related to app will be removed
|
help: Scripts related to app will be removed
|
||||||
|
|
||||||
|
### hook_list()
|
||||||
|
list:
|
||||||
|
action_help: List available hooks for an action
|
||||||
|
api: GET /hooks/<action>
|
||||||
|
arguments:
|
||||||
|
action:
|
||||||
|
help: Action name
|
||||||
|
|
||||||
### hook_callback()
|
### hook_callback()
|
||||||
callback:
|
callback:
|
||||||
action_help: Execute all scripts binded to an action
|
action_help: Execute all scripts binded to an action
|
||||||
|
|
57
hook.py
57
hook.py
|
@ -32,8 +32,13 @@ import subprocess
|
||||||
from shlex import split as arg_split
|
from shlex import split as arg_split
|
||||||
|
|
||||||
from moulinette.core import MoulinetteError
|
from moulinette.core import MoulinetteError
|
||||||
|
from moulinette.utils.log import getActionLogger
|
||||||
|
|
||||||
hook_folder = '/usr/share/yunohost/hooks/'
|
hook_folder = '/usr/share/yunohost/hooks/'
|
||||||
|
custom_hook_folder = '/etc/yunohost/hooks.d/'
|
||||||
|
|
||||||
|
logger = getActionLogger('yunohost.hook')
|
||||||
|
|
||||||
|
|
||||||
def hook_add(app, file):
|
def hook_add(app, file):
|
||||||
"""
|
"""
|
||||||
|
@ -45,11 +50,7 @@ def hook_add(app, file):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
path, filename = os.path.split(file)
|
path, filename = os.path.split(file)
|
||||||
if '-' in filename:
|
priority, action = _extract_filename_parts(filename)
|
||||||
priority, action = filename.split('-')
|
|
||||||
else:
|
|
||||||
priority = '50'
|
|
||||||
action = filename
|
|
||||||
|
|
||||||
try: os.listdir(hook_folder + action)
|
try: os.listdir(hook_folder + action)
|
||||||
except OSError: os.makedirs(hook_folder + action)
|
except OSError: os.makedirs(hook_folder + action)
|
||||||
|
@ -77,6 +78,42 @@ def hook_remove(app):
|
||||||
except OSError: pass
|
except OSError: pass
|
||||||
|
|
||||||
|
|
||||||
|
def hook_list(action):
|
||||||
|
"""
|
||||||
|
List available hooks for an action
|
||||||
|
|
||||||
|
Keyword argument:
|
||||||
|
action -- Action name
|
||||||
|
|
||||||
|
"""
|
||||||
|
hooks = {}
|
||||||
|
|
||||||
|
def _append_folder(folder):
|
||||||
|
for f in os.listdir(folder + action):
|
||||||
|
path = '%s%s/%s' % (folder, action, f)
|
||||||
|
priority, name = _extract_filename_parts(f)
|
||||||
|
try:
|
||||||
|
hooks[priority][name] = path
|
||||||
|
except KeyError:
|
||||||
|
hooks[priority] = {name: path}
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Append system hooks first
|
||||||
|
_append_folder(hook_folder)
|
||||||
|
except OSError:
|
||||||
|
logger.debug("system hook folder not found for action '%s' in %s",
|
||||||
|
action, hook_folder)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Append custom hooks
|
||||||
|
_append_folder(custom_hook_folder)
|
||||||
|
except OSError:
|
||||||
|
logger.debug("custom hook folder not found for action '%s' in %s",
|
||||||
|
action, custom_hook_folder)
|
||||||
|
|
||||||
|
return hooks
|
||||||
|
|
||||||
|
|
||||||
def hook_callback(action, args=None):
|
def hook_callback(action, args=None):
|
||||||
"""
|
"""
|
||||||
Execute all scripts binded to an action
|
Execute all scripts binded to an action
|
||||||
|
@ -206,3 +243,13 @@ def hook_exec(file, args=None):
|
||||||
stream.close()
|
stream.close()
|
||||||
|
|
||||||
return returncode
|
return returncode
|
||||||
|
|
||||||
|
|
||||||
|
def _extract_filename_parts(filename):
|
||||||
|
"""Extract hook parts from filename"""
|
||||||
|
if '-' in filename:
|
||||||
|
priority, action = filename.split('-', 1)
|
||||||
|
else:
|
||||||
|
priority = '50'
|
||||||
|
action = filename
|
||||||
|
return priority, action
|
||||||
|
|
Loading…
Add table
Reference in a new issue