mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[enh] Choose the property to list hook by and show info in hook_list
This commit is contained in:
parent
cc034dbf63
commit
3e1fc78786
4 changed files with 64 additions and 10 deletions
|
@ -1141,6 +1141,18 @@ hook:
|
||||||
arguments:
|
arguments:
|
||||||
action:
|
action:
|
||||||
help: Action name
|
help: Action name
|
||||||
|
-l:
|
||||||
|
full: --list-by
|
||||||
|
help: Property to list hook by
|
||||||
|
choices:
|
||||||
|
- name
|
||||||
|
- priority
|
||||||
|
- folder
|
||||||
|
default: name
|
||||||
|
-i:
|
||||||
|
full: --show-info
|
||||||
|
help: Show hook information
|
||||||
|
action: store_true
|
||||||
|
|
||||||
### hook_callback()
|
### hook_callback()
|
||||||
callback:
|
callback:
|
||||||
|
|
60
hook.py
60
hook.py
|
@ -78,40 +78,80 @@ def hook_remove(app):
|
||||||
except OSError: pass
|
except OSError: pass
|
||||||
|
|
||||||
|
|
||||||
def hook_list(action):
|
def hook_list(action, list_by='name', show_info=False):
|
||||||
"""
|
"""
|
||||||
List available hooks for an action
|
List available hooks for an action
|
||||||
|
|
||||||
Keyword argument:
|
Keyword argument:
|
||||||
action -- Action name
|
action -- Action name
|
||||||
|
list_by -- Property to list hook by
|
||||||
|
show_info -- Show hook information
|
||||||
|
|
||||||
"""
|
"""
|
||||||
hooks = {}
|
result = {}
|
||||||
|
|
||||||
def _append_folder(folder):
|
# Process the property to list hook by
|
||||||
|
if list_by == 'priority':
|
||||||
|
if show_info:
|
||||||
|
def _append_hook(d, priority, name, path):
|
||||||
|
# Use the priority as key and a dict of hooks names
|
||||||
|
# with their info as value
|
||||||
|
value = { 'path': path }
|
||||||
|
try:
|
||||||
|
d[priority][name] = value
|
||||||
|
except KeyError:
|
||||||
|
d[priority] = { name: value }
|
||||||
|
else:
|
||||||
|
def _append_hook(d, priority, name, path):
|
||||||
|
# Use the priority as key and the name as value
|
||||||
|
try:
|
||||||
|
d[priority].add(name)
|
||||||
|
except KeyError:
|
||||||
|
d[priority] = set([name])
|
||||||
|
elif list_by == 'name' or list_by == 'folder':
|
||||||
|
if show_info:
|
||||||
|
def _append_hook(d, priority, name, path):
|
||||||
|
# Use the name as key and hook info as value
|
||||||
|
d[name] = { 'priority': priority, 'path': path }
|
||||||
|
else:
|
||||||
|
if list_by == 'name':
|
||||||
|
result = set()
|
||||||
|
def _append_hook(d, priority, name, path):
|
||||||
|
# Add only the name
|
||||||
|
d.add(name)
|
||||||
|
else:
|
||||||
|
raise MoulinetteError(errno.EINVAL, m18n.n('hook_list_by_invalid'))
|
||||||
|
|
||||||
|
def _append_folder(d, folder):
|
||||||
|
# Iterate over and add hook from a folder
|
||||||
for f in os.listdir(folder + action):
|
for f in os.listdir(folder + action):
|
||||||
path = '%s%s/%s' % (folder, action, f)
|
path = '%s%s/%s' % (folder, action, f)
|
||||||
priority, name = _extract_filename_parts(f)
|
priority, name = _extract_filename_parts(f)
|
||||||
try:
|
_append_hook(d, priority, name, path)
|
||||||
hooks[priority][name] = path
|
|
||||||
except KeyError:
|
|
||||||
hooks[priority] = {name: path}
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Append system hooks first
|
# Append system hooks first
|
||||||
_append_folder(hook_folder)
|
if list_by == 'folder':
|
||||||
|
result['system'] = dict() if show_info else set()
|
||||||
|
_append_folder(result['system'], hook_folder)
|
||||||
|
else:
|
||||||
|
_append_folder(result, hook_folder)
|
||||||
except OSError:
|
except OSError:
|
||||||
logger.debug("system hook folder not found for action '%s' in %s",
|
logger.debug("system hook folder not found for action '%s' in %s",
|
||||||
action, hook_folder)
|
action, hook_folder)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Append custom hooks
|
# Append custom hooks
|
||||||
_append_folder(custom_hook_folder)
|
if list_by == 'folder':
|
||||||
|
result['custom'] = dict() if show_info else set()
|
||||||
|
_append_folder(result['custom'], custom_hook_folder)
|
||||||
|
else:
|
||||||
|
_append_folder(result, custom_hook_folder)
|
||||||
except OSError:
|
except OSError:
|
||||||
logger.debug("custom hook folder not found for action '%s' in %s",
|
logger.debug("custom hook folder not found for action '%s' in %s",
|
||||||
action, custom_hook_folder)
|
action, custom_hook_folder)
|
||||||
|
|
||||||
return hooks
|
return { 'hooks': result }
|
||||||
|
|
||||||
|
|
||||||
def hook_callback(action, args=None):
|
def hook_callback(action, args=None):
|
||||||
|
|
|
@ -77,6 +77,7 @@
|
||||||
"upnp_disabled" : "uPnP successfully disabled",
|
"upnp_disabled" : "uPnP successfully disabled",
|
||||||
"firewall_reloaded" : "Firewall successfully reloaded",
|
"firewall_reloaded" : "Firewall successfully reloaded",
|
||||||
|
|
||||||
|
"hook_list_by_invalid" : "Invalid property to list hook by",
|
||||||
"hook_choice_invalid" : "Invalid choice '{:s}'",
|
"hook_choice_invalid" : "Invalid choice '{:s}'",
|
||||||
"hook_argument_missing" : "Missing argument '{:s}'",
|
"hook_argument_missing" : "Missing argument '{:s}'",
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,7 @@
|
||||||
"upnp_disabled" : "uPnP désactivé avec succès",
|
"upnp_disabled" : "uPnP désactivé avec succès",
|
||||||
"firewall_reloaded" : "Pare-feu rechargé avec succès",
|
"firewall_reloaded" : "Pare-feu rechargé avec succès",
|
||||||
|
|
||||||
|
"hook_list_by_invalid" : "Propriété pour lister les scripts incorrecte",
|
||||||
"hook_choice_invalid" : "Choix incorrect : '{:s}'",
|
"hook_choice_invalid" : "Choix incorrect : '{:s}'",
|
||||||
"hook_argument_missing" : "Argument manquant : '{:s}'",
|
"hook_argument_missing" : "Argument manquant : '{:s}'",
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue