Source code for LandSurveyCodesImport.logic.demonstration

#! python3  # noqa: E265

"""
    Demonstration data loader.
"""

# ############################################################################
# ########## Imports ###############
# ##################################

# Standard library
import logging
from pathlib import Path
from shutil import copy
from tempfile import mkdtemp

# 3rd party
import yaml

# PyQGIS
from qgis.core import QgsProject

# project
from LandSurveyCodesImport.__about__ import DIR_PLUGIN_ROOT, __title_clean__
from LandSurveyCodesImport.toolbelt import PlgLogger, QlscYamlReader

# ############################################################################
# ########## Globals ###############
# ##################################

logger = logging.getLogger(__name__)


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


[docs]class DemonstrationLoader: """Demonstration data loader.""" DEMO_FOLDER: Path = DIR_PLUGIN_ROOT / "resources/demo" DEMO_TMP_DIR: Path = None def __init__(self): """Instancitation logic.""" self.log = PlgLogger().log def _copy_demo_to_tmp(self) -> Path: """copy the demonstration files into a temporary folder to avoid any problem from the end-user""" self.DEMO_TMP_DIR = Path(mkdtemp(prefix=f"{__title_clean__}_")) for demo_file in self.DEMO_FOLDER.iterdir(): copy(demo_file, self.DEMO_TMP_DIR) return self.DEMO_TMP_DIR
[docs] def load(self) -> bool: """Load demonstration project into QGIS. Returns: bool: if demo project has been correctly loaded """ loaded = False # copy demonstration file into a temporary folder demo_qgs_filepath = self._copy_demo_to_tmp() / "demo_project.qgs" # check codification file demo_codif_filepath = self.DEMO_FOLDER / "codification.qlsc" qlsc_reader = QlscYamlReader(demo_codif_filepath) # adapt layers paths to the temporary folder output_codification = self.DEMO_TMP_DIR / "codification.qlsc" with output_codification.open(mode="w") as output_stream: yaml.dump( qlsc_reader.replace_parent_paths("/tmp/lsci", str(self.DEMO_TMP_DIR)), output_stream, encoding="UTF8", ) # load demo project if demo_qgs_filepath.is_file(): project = QgsProject.instance() qgs_read = project.read( filename=str(demo_qgs_filepath.resolve()), flags=QgsProject.FlagDontLoadLayouts, ) if qgs_read: self.log( message="Demonstration data and project correctly copy then loaded from a temporary folder: {}.".format( self.DEMO_TMP_DIR ) ) loaded = True else: self.log( message="Something went wrong during demonstration project loading.", log_level=2, push=True, ) else: self.log( message=f"Demonstration data not found: {demo_qgs_filepath}", log_level=2, push=True, ) return loaded