You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
5.2 KiB
181 lines
5.2 KiB
# Imports
|
|
|
|
from commonkit import copy_tree, highlight_code, indent, write_file
|
|
from commonkit.shell import EXIT
|
|
from markdown import markdown
|
|
import os
|
|
from ..lib.factories import command_factory
|
|
from ..constants import PROFILE
|
|
from ..variables import PATH_TO_SCRIPT_TEASE
|
|
|
|
# Exports
|
|
|
|
__all__ = (
|
|
"copy_inventory",
|
|
"generate_docs",
|
|
"generate_script",
|
|
)
|
|
|
|
# Functions
|
|
|
|
|
|
def copy_inventory(name, to_path=None):
|
|
"""Copy an inventory item to a path.
|
|
|
|
:param name: The name of the inventory item. ``?`` will list available items.
|
|
:type name: str
|
|
|
|
:param to_path: The path to where the item should be copied. Defaults to the current working directory.
|
|
:type to_path: str
|
|
|
|
:rtype: int
|
|
:returns: An exit code.
|
|
|
|
"""
|
|
path = os.path.join(PATH_TO_SCRIPT_TEASE, "data", "inventory")
|
|
if name == "?":
|
|
for d in os.listdir(path):
|
|
print(d)
|
|
|
|
return EXIT.OK
|
|
|
|
from_path = os.path.join(path, name)
|
|
|
|
if to_path is None:
|
|
to_path = os.path.join(os.getcwd(), name)
|
|
os.makedirs(to_path)
|
|
|
|
if copy_tree(from_path, to_path):
|
|
return EXIT.OK
|
|
|
|
return EXIT.ERROR
|
|
|
|
|
|
def generate_docs(loader, output_file=None, output_format="md", profile=PROFILE.UBUNTU):
|
|
"""Generate documentation from a commands file.
|
|
|
|
:param loader: The loader instance.
|
|
:type loader: BaseType[scripttease.lib.loaders.BaseLoader]
|
|
|
|
:param output_file: The path to the output file.
|
|
:type output_file: str
|
|
|
|
:param output_format: The output format; ``html``, ``md`` (Markdown, the default), ``plain`` (text), ``rst``
|
|
(ReStructuredText).
|
|
:type output_format: str
|
|
|
|
:param profile: The operating system profile to use.
|
|
:type profile: str
|
|
|
|
:rtype: int
|
|
:returns: An exit code.
|
|
|
|
"""
|
|
commands = command_factory(loader, profile=profile)
|
|
if commands is None:
|
|
return EXIT.ERROR
|
|
|
|
output = list()
|
|
for command in commands:
|
|
|
|
if command.name in ("explain", "screenshot"):
|
|
output.append(command.get_output(output_format))
|
|
elif command.name == "template":
|
|
if output_format == "plain":
|
|
output.append("+++")
|
|
output.append(command.get_content())
|
|
output.append("+++")
|
|
output.append("")
|
|
elif output_format == "rst":
|
|
output.append(".. code-block:: %s" % command.get_target_language())
|
|
output.append("")
|
|
output.append(indent(command.get_content()))
|
|
output.append("")
|
|
else:
|
|
output.append("```%s" % command.get_target_language())
|
|
output.append(command.get_content())
|
|
output.append("```")
|
|
output.append("")
|
|
else:
|
|
statement = command.get_statement(include_comment=False, include_register=False, include_stop=False)
|
|
if statement is not None:
|
|
line = command.comment.replace("#", "")
|
|
output.append("%s:" % line.capitalize())
|
|
output.append("")
|
|
if output_format == "plain":
|
|
output.append("---")
|
|
output.append(statement)
|
|
output.append("---")
|
|
output.append("")
|
|
elif output_format == "rst":
|
|
output.append(".. code-block:: bash")
|
|
output.append("")
|
|
output.append(indent(statement))
|
|
output.append("")
|
|
else:
|
|
output.append("```bash")
|
|
output.append(statement)
|
|
output.append("```")
|
|
output.append("")
|
|
|
|
if output_format == "html":
|
|
_output = markdown("\n".join(output), extensions=['fenced_code'])
|
|
else:
|
|
_output = "\n".join(output)
|
|
|
|
print(_output)
|
|
|
|
if output_file:
|
|
write_file(output_file, _output)
|
|
|
|
return EXIT.OK
|
|
|
|
|
|
def generate_script(loader, color_enabled=False, include_shebang=False, output_file=None, profile=PROFILE.UBUNTU):
|
|
"""Generate statements from a commands file.
|
|
|
|
:param loader: The loader instance.
|
|
:type loader: BaseType[scripttease.lib.loaders.BaseLoader]
|
|
|
|
:param color_enabled: Colorize the output.
|
|
:type color_enabled: bool
|
|
|
|
:param include_shebang: Add the shebang to the beginning of the output.
|
|
:type include_shebang: bool
|
|
|
|
:param output_file: The path to the output file.
|
|
:type output_file: str
|
|
|
|
:param profile: The operating system profile to use.
|
|
:type profile: str
|
|
|
|
:rtype: int
|
|
:returns: An exit code.
|
|
|
|
"""
|
|
commands = command_factory(loader, profile=profile)
|
|
if commands is None:
|
|
return EXIT.ERROR
|
|
|
|
output = list()
|
|
if include_shebang:
|
|
output.append("#! /usr/bin/env bash")
|
|
|
|
for command in commands:
|
|
if command.name in ("explain", "screenshot"):
|
|
continue
|
|
|
|
statement = command.get_statement(include_comment=True)
|
|
if statement is not None:
|
|
output.append(statement)
|
|
output.append("")
|
|
|
|
if color_enabled:
|
|
print(highlight_code("\n".join(output), language="bash"))
|
|
else:
|
|
print("\n".join(output))
|
|
|
|
if output_file:
|
|
write_file(output_file, "\n".join(output))
|
|
|
|
return EXIT.OK
|
|
|