49 lines
1.2 KiB
Python
Executable file
49 lines
1.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# Eryn Wells <eryn@erynwells.me>
|
|
|
|
'''
|
|
A Python interface to my personal website, Erynwells.me.
|
|
'''
|
|
|
|
import argparse
|
|
import os
|
|
import os.path as osp
|
|
from typing import List
|
|
from erynwells_me.scripting import Command
|
|
from erynwells_me.weeknotes import WeeknotesCommand
|
|
from erynwells_me.deployment import DeploymentCommand
|
|
|
|
|
|
COMMANDS: List[Command] = [
|
|
WeeknotesCommand(),
|
|
DeploymentCommand(),
|
|
]
|
|
|
|
|
|
def parse_args(commands: List[Command], argv, *a, **kw):
|
|
parser = argparse.ArgumentParser(*a, **kw)
|
|
|
|
subcommands = parser.add_subparsers(title='Subcommands', required=True)
|
|
for command in commands:
|
|
subcommand_parser = subcommands.add_parser(command.name, help=command.help)
|
|
command.add_arguments(subcommand_parser)
|
|
|
|
args = parser.parse_args(argv)
|
|
return args
|
|
|
|
|
|
def main(argv):
|
|
program_name = osp.basename(argv[0])
|
|
args = parse_args(COMMANDS, argv[1:], prog=program_name)
|
|
|
|
scripts_dir = osp.dirname(__file__)
|
|
repo_root_dir = osp.normpath(osp.join(scripts_dir, '..'))
|
|
if os.getcwd() != repo_root_dir:
|
|
os.chdir(repo_root_dir)
|
|
|
|
return args.handler(args)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
sys.exit(main(sys.argv))
|