tzk/tzk.py

57 lines
1.5 KiB
Python
Raw Normal View History

2021-08-25 19:36:40 +00:00
from abc import ABC, abstractmethod, abstractclassmethod
import argparse
import os
import git
2021-08-25 19:36:40 +00:00
class CliCommand(ABC):
@abstractclassmethod
def setup_arguments(self, parser: argparse.ArgumentParser) -> None:
2021-08-25 19:36:40 +00:00
raise NotImplementedError
@abstractmethod
def execute(self, parser: argparse.ArgumentParser) -> None:
2021-08-25 19:36:40 +00:00
raise NotImplementedError
class CommitCommand(CliCommand):
cmd = "commit"
help = "Commit all changes to the wiki repository."
2021-08-25 19:36:40 +00:00
@classmethod
def setup_arguments(self, parser: argparse.ArgumentParser) -> None:
parser.add_argument(
2021-08-25 20:06:42 +00:00
"-m", "--message",
metavar="MSG",
help="Commit message to use.",
2021-08-25 20:06:42 +00:00
default="daily checkpoint"
)
parser.add_argument(
"-l", "--local",
help="Don't push the results to any configured remote repository.",
action="store_true"
)
2021-08-25 19:36:40 +00:00
def execute(self, args: argparse.Namespace) -> None:
git.exec("add", "-A")
git.exec("commit", "-m", args.message)
2021-08-25 20:06:42 +00:00
if not args.local:
git.exec("push", "backup")
import config
2021-08-25 19:36:40 +00:00
2021-08-25 20:06:42 +00:00
os.chdir("zk-wiki")
# TODO: confirm we're in the right directory
2021-08-25 19:36:40 +00:00
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
for command in CliCommand.__subclasses__():
subparser = subparsers.add_parser(command.cmd, help=command.help)
subparser.set_defaults(_cls=command)
command.setup_arguments(subparser)
args = parser.parse_args()
args._cls().execute(args)