[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fab-user] Fwd: List commands by module
From: |
address@hidden |
Subject: |
[Fab-user] Fwd: List commands by module |
Date: |
Sat, 23 Jan 2010 20:07:33 -0500 |
I apologize if this turns out to be a repost -- gmail subscription oddities
today. S
Hey!
I was having trouble seeing where things came from in a complex
fabfile/fabkit setup and wrote the following list command to display commands
by module.
Output looks like this (excuse any mail-induced funkiness, please):
Available commands:
fabfile:
install_pido_python_support
base_system_setup Only Needed Once, But Needed! Get all the
pre-requisite...
test Run all unit tests and doctests.
fabkit.cpanel:
restart_mail_servers Gives the mail server a whack by restarting
all of: ima...
fabkit.fab_cfg_install:
install_from_config Install specified packages as per config
file. Default...
fabkit.python:
py_install_basic_tools Installs distribute, pip, and virtualenv.
fabkit.ubuntu:
install_working_toolset RUN FIRST! Installs all compilers, VCS
tools, Python bu...
install_PIL Install PIL without Ubuntu incompatible
extensions
fabkit.utils:
remote_mkdir_p Safely create a directory, including
intermediate dirs ...
run_multiple This chains a bunch of commands with '&&'
so, for examp...
local_mkdir_p
unarchive
url_to_legal_pathname Convert a URL to a legal pathname by
replacing cruft wi...
remove_archive_extensions Strip off all of the compression extensions
until there...
sudocmd A general execute function for running
specified comman...
download_and_unarchive_package
urlparse:
urlparse Parse a URL into 6 components:
The order the functions come out within each module is controlled by
the order they arrive in the main commands list so it seems somewhat arbitrary
but useful nonetheless.
If there's any interest, I'll submit a patch.
What should the command line switch be? --list-by-module would work
for me (with no short command unless we're using argparse, then -lm).
You can just copy the code below into main.py, and it will replace the
default list_commands with this function.
Thanks,
S
def list_commands_by_module():
"""
Print all found commands/tasks, BY MODULE then exit. Invoked with -l/--list.
"""
print("Available commands:\n")
# Want separator between name, description to be straight col
cmd_keys = commands.keys() # we need this more than once
max_len = reduce(lambda a, b: max(a, len(b)), cmd_keys, 0)
sep = ' '
trail = '...'
modules = {}
for name in cmd_keys:
func = commands[name]
module = func.__module__
if module in modules:
modules[module].append(func)
else:
modules[module] = [func]
module_names = sorted(modules.keys())
for module_name in module_names:
print module_name + ':'
# TBD: ? this prints in the order they're found in the commands
# list, not sure how to order it better...
for func in modules[module_name]:
output = None
name = func.func_name
if func.__doc__:
lines = filter(None, func.__doc__.splitlines())
first_line = lines[0].strip()
# Truncate it if it's longer than N chars
size = 75 - (max_len + len(sep) + len(trail))
if len(first_line) > size:
first_line = first_line[:size] + trail
# + "\n (%s)"%(func.__module__,)
output = name.ljust(max_len) + sep + ' ' + first_line
# Or nothing (so just the name)
else:
output = name
print(indent(output))
sys.exit(0)
list_commands = list_commands_by_module
- [Fab-user] Fwd: List commands by module,
address@hidden <=