diff --git a/qgis_deployment_toolbelt/cli.py b/qgis_deployment_toolbelt/cli.py index c22caae4..1c12cd97 100644 --- a/qgis_deployment_toolbelt/cli.py +++ b/qgis_deployment_toolbelt/cli.py @@ -25,11 +25,10 @@ __uri_homepage__, __version__, ) -from qgis_deployment_toolbelt.commands.cmd_rules_context import ( - parser_rules_context_export, -) +from qgis_deployment_toolbelt.commands.cmd_rules_context import parser_rules_context_export from qgis_deployment_toolbelt.commands.deployment import parser_main_deployment from qgis_deployment_toolbelt.commands.upgrade import parser_upgrade +from qgis_deployment_toolbelt.commands.extract import parser_extract_from_profile from qgis_deployment_toolbelt.utils.journalizer import configure_logger # ############################################################################# @@ -180,6 +179,19 @@ def main(in_args: list[str] = None): ) add_common_arguments(subcmd_rules_context) parser_rules_context_export(subcmd_rules_context) + + # Extractor + subcmd_extract = subparsers.add_parser( + "extract", + aliases=[ + "qgis2qdt", + ], + help="Generate profile ready for QDT from an existing QGIS profile.", + formatter_class=main_parser.formatter_class, + prog="upgrade", + ) + add_common_arguments(subcmd_extract) + parser_extract_from_profile(subcmd_extract) # Upgrader subcmd_upgrade = subparsers.add_parser( diff --git a/qgis_deployment_toolbelt/commands/extract.py b/qgis_deployment_toolbelt/commands/extract.py new file mode 100644 index 00000000..a8bb9473 --- /dev/null +++ b/qgis_deployment_toolbelt/commands/extract.py @@ -0,0 +1,99 @@ +#! python3 # noqa: E265 + +""" + Sub-command in charge of running the main logic. + + Author: Julien M. (https://github.com/guts) +""" + +# ############################################################################# +# ########## Libraries ############# +# ################################## + +# Standard library +import argparse +import logging +from pathlib import Path + +# submodules +from qgis_deployment_toolbelt.profiles.qdt_profile import QdtProfile +from qgis_deployment_toolbelt.utils.check_path import check_path + +# ############################################################################# +# ########## Globals ############### +# ################################## + +logger = logging.getLogger(__name__) + + +# ############################################################################ +# ########## CLI ################# +# ################################ + + +def parser_extract_from_profile( + subparser: argparse.ArgumentParser, +) -> argparse.ArgumentParser: + """Set the argument parser for deployment subcommand. + + Args: + subparser (argparse.ArgumentParser): parser to set up + + Returns: + argparse.ArgumentParser: parser ready to use + """ + subparser.add_argument( + "-f", + "--from", + "--from-profile-path", + dest="input_profile_path", + help="Path to the QGIS profile to extract.", + type=str, + ) + + subparser.add_argument( + "-t", + "--to", + "--to-profile-path", + dest="output_profile_path", + help="Path where to store the QDT profile.", + type=str, + ) + + subparser.set_defaults(func=run) + + return subparser + + +# ############################################################################ +# ########## MAIN ################ +# ################################ + + +def run(args: argparse.Namespace): + """Run the main logic. + + Args: + args (argparse.Namespace): arguments passed to the subcommand + """ + logger.debug(f"Running {args.command} with {args}") + + # check input profile exists + check_path( + input_path=args.input_profile_path, + must_be_a_file=False, + must_be_a_folder=True, + must_be_readable=True, + raise_error=True, + ) + input_qgis_profile_path = Path(args.input_profile_path) + + # make sure output profile folder exists + output_qdt_profile_path = Path(args.output_profile_path) + output_qdt_profile_path.mkdir(parents=True, exist_ok=True) + + src_profile: QdtProfile = QdtProfile.from_profile_folder( + input_profile_folder=input_qgis_profile_path + ) + + print(src_profile)