cmdeploy: add --force to cmdeploy init for recreating chatmail.ini

This commit is contained in:
missytake
2025-10-07 20:11:57 +02:00
parent 1170adc1d4
commit 123531f1eb
3 changed files with 46 additions and 9 deletions

View File

@@ -25,6 +25,9 @@ from .sshexec import SSHExec
# cmdeploy sub commands and options
#
def is_pytest():
return "PYTEST_CURRENT_TEST" in os.environ
def init_cmd_options(parser):
parser.add_argument(
@@ -32,18 +35,28 @@ def init_cmd_options(parser):
action="store",
help="fully qualified DNS domain name for your chatmail instance",
)
parser.add_argument(
"--force",
dest="recreate_ini",
action="store_true",
help="force reacreate ini file",
)
def init_cmd(args, out):
"""Initialize chatmail config file."""
mail_domain = args.chatmail_domain
inipath = args.inipath
if args.inipath.exists():
print(f"Path exists, not modifying: {args.inipath}")
return 1
else:
write_initial_config(args.inipath, mail_domain, overrides={})
out.green(f"created config file for {mail_domain} in {args.inipath}")
if not args.recreate_ini:
out.green(f"[WARNING] Path exists, not modifying: {inipath}")
return 1
else:
out.yellow(f"[WARNING] Force argument was provided, deleting config file: {inipath}")
inipath.unlink()
write_initial_config(inipath, mail_domain, overrides={})
out.green(f"created config file for {mail_domain} in {inipath}")
def run_cmd_options(parser):
parser.add_argument(
@@ -263,11 +276,20 @@ class Out:
def red(self, msg, file=sys.stderr):
print(colored(msg, "red"), file=file)
def green(self, msg, file=sys.stderr):
def green(self, msg, file=sys.stdout):
print(colored(msg, "green"), file=file)
def __call__(self, msg, red=False, green=False, file=sys.stdout):
color = "red" if red else ("green" if green else None)
def yellow(self, msg, file=sys.stdout):
print(colored(msg, "yellow"), file=file)
def __call__(self, msg, red=False, green=False, yellow=False, file=sys.stdout):
color = None
if red:
color = "red"
elif green:
color = "green"
elif yellow:
color = "yellow"
print(colored(msg, color), file=file)
def check_call(self, arg, env=None, quiet=False):
@@ -352,6 +374,12 @@ def main(args=None):
args.get_sshexec = get_sshexec
out = Out()
if is_pytest(): ## issue: https://github.com/chatmail/relay/issues/622
out.green = print
out.red = print
out.yellow = print
out.__call__ = print
kwargs = {}
if args.func.__name__ not in ("init_cmd", "fmt_cmd"):
if not args.inipath.exists():

View File

@@ -25,11 +25,17 @@ class TestCmdline:
def test_init_not_overwrite(self, capsys):
assert main(["init", "chat.example.org"]) == 0
capsys.readouterr()
out, err = capsys.readouterr()
assert "created config file" in out.lower()
assert main(["init", "chat.example.org"]) == 1
out, err = capsys.readouterr()
assert "path exists" in out.lower()
assert main(["init", "chat.example.org", "--force"]) == 0
out, err = capsys.readouterr()
assert "deleting config file" in out.lower()
def test_www_folder(example_config, tmp_path):
reporoot = importlib.resources.files(__package__).joinpath("../../../../").resolve()