blob: e4ea8c333cafff986434aa88c4cef0b619685d68 [file] [log] [blame]
#!/usr/bin/env python
r"""
Create index files that can be displayed as web pages in a given directory
and all its sub-directories. There are options to exclude certain files and
sub-directories.
"""
import argparse
import os
import sys
def main(i_raw_args):
l_args = parse_args(i_raw_args)
create_index_file(l_args.logs_dir_path, "/", l_args.exclude)
def create_index_file(i_dir_path, i_pretty_dir_path, i_exclude_list):
r"""
Create HTML index files for a given directory and all its sub-directories.
Description of argument(s):
i_dir_path The directory to generate an index file for.
i_pretty_dir_path A pretty version of i_dir_path that can be shown to
readers of the HTML page. For example, if i_dir_path
is set to '/home/johndoe/logs/`, the caller may wish
to only show '/logs/' in the HTML index pages.
i_exclude_list A Python list of files and directories to exclude from
"""
l_index_file_path = os.path.join(i_dir_path, "index.html")
l_sub_dir_list = os.listdir(i_dir_path)
# Created a sorted list of sub-directories in this directory
l_dirs = sorted(
[
d
for d in l_sub_dir_list
if os.path.isdir(os.path.join(i_dir_path, d))
and d not in i_exclude_list
]
)
# Create a sorted list of files in this directory
l_files = sorted(
[
f
for f in l_sub_dir_list
if not os.path.isdir(os.path.join(i_dir_path, f))
and f not in i_exclude_list
]
)
# Open up the index file we're going to write to.
with open(l_index_file_path, "w+") as l_index_file:
l_index_file.write(
"<html>\n<head><title>"
+ i_pretty_dir_path
+ "</title></head>\n<body>\n<h2>OpenBMC Logs</h2>\n<h3>"
+ i_pretty_dir_path
+ "</h3>\n"
)
# Only show the link to go up a directory if this is not the root.
if not i_pretty_dir_path == "/":
l_index_file.write(
'<a href=".."><img src="/dir.png"> ..</a><br>\n'
)
# List directories first.
for l_dir in l_dirs:
l_index_file.write(
'<a href="%s"><img src="/dir.png"> %s</a><br>\n'
% (l_dir, l_dir)
)
create_index_file(
os.path.join(i_dir_path, l_dir),
i_pretty_dir_path + l_dir + "/",
i_exclude_list,
)
# List files second.
for l_file in l_files:
l_index_file.write(
'<a href="%s"><img src="/file.png"> %s</a><br>\n'
% (l_file, l_file)
)
l_index_file.write("</body>\n</html>")
def parse_args(i_raw_args):
r"""
Parse the given list as command-line arguments and return an object with
the argument values.
Description of argument(s):
i_raw_args A list of command-line arguments, usually taken from
sys.argv[1:].
"""
parser = argparse.ArgumentParser(
description=(
"%(prog)s will create index files that can be displayed "
"as web pages in a given directory and all its "
"sub-directories."
),
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument(
"logs_dir_path",
help="Directory containing the logs that should be uploaded.",
)
parser.add_argument(
"--exclude",
nargs="+",
default=[".git", "index.html"],
help="A space-delimited list of files to exclude from the index.",
)
return parser.parse_args(i_raw_args)
if __name__ == "__main__":
main(sys.argv[1:])