diff options
| author | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2020-03-25 23:11:37 +0100 |
|---|---|---|
| committer | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2020-03-25 23:11:37 +0100 |
| commit | 2afc313501e43691b251dc04a41ee901de04802c (patch) | |
| tree | adcac7a98d9daf308cf8cf4d7a75a4b96a5bc671 /repo/www/generate-index.py | |
| parent | 4734f72eab5632757adee715359944fccd5dc5f2 (diff) | |
| download | memory-leaks-2afc313501e43691b251dc04a41ee901de04802c.tar.xz | |
Complete READMEs with a page index
Diffstat (limited to 'repo/www/generate-index.py')
| -rwxr-xr-x | repo/www/generate-index.py | 74 |
1 files changed, 53 insertions, 21 deletions
diff --git a/repo/www/generate-index.py b/repo/www/generate-index.py index 23df192..d4b087c 100755 --- a/repo/www/generate-index.py +++ b/repo/www/generate-index.py @@ -1,48 +1,80 @@ #!/usr/bin/env python3 +from argparse import ArgumentParser from os import path -from sys import argv, exit from git import Repo from helpers import compute_directories -def parse_arguments(args): - if len(args) != 3: - exit(f'Usage: {argv[0]} EXTENSIONS FOLDER') - - return argv[1].split(), argv[2] +def parse_arguments(): + parser = ArgumentParser() + parser.add_argument( + 'extensions', type=str.split, + help='File extensions to consider when recording pages.' + ) + parser.add_argument( + 'target', help='Folder to generate an index for.' + ) + return parser.parse_args() -def list_files(extensions, folder): - directories = compute_directories( - extensions, Repo(search_parent_directories=True) - ) +def list_files(extensions, folder, repo): + directories = compute_directories(extensions, repo) return directories[folder].subfolders, directories[folder].files -def generate_index_page(title, directories, files): - lines = (f'% {title}',) + tuple( +def generate_index_page(title, directories, files, intro_file): + intro_text = '' + if intro_file is not None: + with open(intro_file) as intro: + intro_text = intro.read() + + dir_list = '\n'.join( f'- [{d}/]({d}/index.html)' for d in directories - ) + tuple( + ) + + file_list = '\n'.join( f'- [{f}]({f}.html)' for f in files ) - return '\n'.join(lines) + + return f'''\ +% {title} + +{intro_text} + +{dir_list} +{file_list} +''' def main(arguments): - extensions, folder = parse_arguments(arguments) + repo = Repo(search_parent_directories=True) + + target_path = arguments.target + extensions = arguments.extensions + + target = path.relpath(target_path, repo.working_dir) + if target == '.': + target ='' + + folders, files = list_files(extensions, target, repo) - title = path.basename(folder) if folder else 'index' + names = [] + intro = None - folders, files = list_files(extensions, folder) + for f in files: + name, _ = path.splitext(f) + if name == 'README': + intro = path.join(repo.working_dir, target, f) + else: + names.append(name) - parsed_filenames = (path.splitext(f) for f in files) - names = tuple(name for name, _ in parsed_filenames) + title = path.basename(target) if target else 'index' - print(generate_index_page(title, folders, names)) + print(generate_index_page(title, folders, names, intro)) if __name__ == '__main__': - main(argv) + main(parse_arguments()) |
