Skip to content

Commit

Permalink
feature(cli): add command to export rules context in current environment
Browse files Browse the repository at this point in the history
  • Loading branch information
Guts committed Apr 23, 2024
1 parent 241d859 commit 2dda5f0
Show file tree
Hide file tree
Showing 4 changed files with 155 additions and 6 deletions.
15 changes: 14 additions & 1 deletion qgis_deployment_toolbelt/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
__uri_homepage__,
__version__,
)
from qgis_deployment_toolbelt.commands import parser_main_deployment, parser_upgrade
from qgis_deployment_toolbelt.commands.deployment import parser_main_deployment
from qgis_deployment_toolbelt.commands.rules_context import parser_rules_context_export
from qgis_deployment_toolbelt.commands.upgrade import parser_upgrade
from qgis_deployment_toolbelt.utils.journalizer import configure_logger

# #############################################################################
Expand Down Expand Up @@ -166,6 +168,17 @@ def main(in_args: list[str] = None):
add_common_arguments(subcmd_deployment)
parser_main_deployment(subcmd_deployment)

# Rules context
subcmd_rules_context = subparsers.add_parser(
"export-rules-context",
help="Export QDT rules context taking into account the local environment to "
"help rules writing.",
formatter_class=main_parser.formatter_class,
prog="rules-context-export",
)
add_common_arguments(subcmd_rules_context)
parser_rules_context_export(subcmd_rules_context)

# Upgrader
subcmd_upgrade = subparsers.add_parser(
"upgrade",
Expand Down
5 changes: 0 additions & 5 deletions qgis_deployment_toolbelt/commands/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +0,0 @@
#! python3 # noqa: E265

# submodules
from .deployment import parser_main_deployment # noqa: F401
from .upgrade import parser_upgrade # noqa: F401
91 changes: 91 additions & 0 deletions qgis_deployment_toolbelt/commands/rules_context.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#! python3 # noqa: E265


"""
Sub-command to export local rules context.
Author: Julien M. (https://github.com/guts)
"""


# ############################################################################
# ########## IMPORTS #############
# ################################

# standard library
import argparse
import logging
from pathlib import Path

# package
from qgis_deployment_toolbelt.constants import get_qdt_working_directory
from qgis_deployment_toolbelt.profiles.rules_context import QdtRulesContext
from qgis_deployment_toolbelt.utils.bouncer import exit_cli_error, exit_cli_success

# ############################################################################
# ########## GLOBALS #############
# ################################

logger = logging.getLogger(__name__)


# ############################################################################
# ########## CLI #################
# ################################


def parser_rules_context_export(
subparser: argparse.ArgumentParser,
) -> argparse.ArgumentParser:
"""Set the argument parser for subcommand.
Args:
subparser (argparse.ArgumentParser): parser to set up
Returns:
argparse.ArgumentParser: parser ready to use
"""

subparser.add_argument(
"-o",
"--output",
help="Path to the output file where to write rules context.",
default=get_qdt_working_directory().joinpath("export/qdt_rules_context.json"),
type=Path,
dest="output_path",
)

subparser.set_defaults(func=run)

return subparser


# ############################################################################
# ########## MAIN ################
# ################################


def run(args: argparse.Namespace):
"""Run the sub command logic.
Open result of a previous command.
Args:
args (argparse.Namespace): arguments passed to the subcommand
"""
logger.debug(f"Running {args.command} with {args}")

try:
context_json_path = Path(args.output_path)
context_json_path.parent.mkdir(parents=True, exist_ok=True)
rules_context = QdtRulesContext()

# write into the file passing extra parameters to json.dumps
with context_json_path.open("w", encoding="UTF8") as wf:
wf.write(rules_context.to_json(indent=4, sort_keys=True))

# exit nicely
print(f"Rules context exported in {args.output_path}")
exit_cli_success(f"Rules context exported in {args.output_path}")
except Exception as err:
exit_cli_error(err)
50 changes: 50 additions & 0 deletions tests/test_cli_rules_context_export.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#! python3 # noqa: E265

"""
Test CLI's rules context export command.
Author: Julien Moura (Oslandia)
"""

# #############################################################################
# ########## Libraries #############
# ##################################


# 3rd party
import pytest

# project
from qgis_deployment_toolbelt import cli

# #############################################################################
# ######## Classes #################
# ##################################


@pytest.mark.parametrize("option", ("-h", "--help"))
def test_cli_export_rules_context_help(capsys, option):
"""Test CLI help."""
with pytest.raises(SystemExit):
cli.main(["export-rules-context", option])

out, err = capsys.readouterr()

assert err == ""


def test_cli_export_rules_context(capsys):
"""Test CLI."""
with pytest.raises(SystemExit):
cli.main(["export-rules-context"])

out, err = capsys.readouterr()

assert err == ""


# #############################################################################
# ######## Standalone ##############
# ##################################
if __name__ == "__main__":
pass

0 comments on commit 2dda5f0

Please sign in to comment.