Пример #1
0
def install_gn_module(module_path, url, conf_file, build):
    """
        Installation d'un module gn
    """
    try:
        # Vérification que le chemin module path soit correct
        if not Path(module_path).is_dir():
            raise GeoNatureError("dir {} doesn't exists".format(module_path))
        # TODO vérifier que l'utilisateur est root ou du groupe geonature
        app = get_app_for_cmd(conf_file, with_external_mods=False)
        with app.app_context():
            from geonature.core.gn_commons.models import TModules

            sys.path.append(module_path)
            # Vérification de la conformité du module
            # Vérification de la présence de certain fichiers
            check_gn_module_file(module_path)
            # Vérification de la version de geonature par rapport au manifest
            module_code = None
            module_code = check_manifest(module_path)
            try:
                # Vérification que le module n'est pas déjà activé
                mod = (
                    DB.session.query(TModules)
                    .filter(TModules.module_code == module_code)
                    .one()
                )

            except NoResultFound:
                # Si le module n'est pas déjà dans la table gn_commons.t_modules, on l'installe
                # sinon on leve une execption et on arrête la commande

                # Vérification de la conformité du code :
                #   installation
                #   front end
                #   backend
                check_codefile_validity(module_path, module_code)

                # Installation du module
                run_install_gn_module(app, module_path)

                # copie dans external mods:
                copy_in_external_mods(module_path, module_code.lower())

                # creation du lien symbolique des assets externes
                enable_frontend = create_external_assets_symlink(
                    module_path, module_code.lower()
                )
                # ajout du module dans la table gn_commons.t_modules
                add_application_db(app, module_code, url, enable_frontend)

                # Enregistrement de la config du module
                gn_module_register_config(module_code.lower())

                if enable_frontend:
                    # generation du du routing du frontend
                    frontend_routes_templating(app)
                    # generation du fichier de configuration du frontend
                    create_module_config(
                        app, module_code.lower(), module_path, build=False
                    )

                if build and enable_frontend:
                    # Rebuild the frontend
                    build_geonature_front(rebuild_sass=True)

                # finally restart geonature backend via supervisor
                subprocess.call(["sudo", "supervisorctl", "restart", "geonature2"])

            else:
                raise GeoNatureError(
                    "The module {} is already installed, but maybe not activated".format(
                        module_code
                    )
                )  # noqa

    except (GNModuleInstallError, GeoNatureError) as ex:
        log.critical(
            (
                "\n\n\033[91mError while installing GN module '{}'\033[0m.The process returned:\n\t{}"
            ).format(module_code, ex)
        )
        sys.exit(1)
Пример #2
0
def install_gn_module(module_path, url, conf_file, build, enable_backend):
    """
        Installation d'un module gn
    """
    try:
        # Vérification que le chemin module path soit correct
        if not Path(module_path).is_dir():
            raise GeoNatureError("dir {} doesn't exists".format(module_path))
        # TODO vérifier que l'utilisateur est root ou du groupe geonature
        app = get_app_for_cmd(conf_file, with_external_mods=False)
        with app.app_context():
            from geonature.core.gn_commons.models import TModules

            sys.path.append(module_path)
            # Vérification de la conformité du module
            # Vérification de la présence de certain fichiers
            check_gn_module_file(module_path)
            # Vérification de la version de geonature par rapport au manifest
            module_code = None
            module_code = check_manifest(module_path)
            try:
                # Vérification que le module n'est pas déjà activé
                mod = (DB.session.query(TModules).filter(
                    TModules.module_code == module_code).one())

            except NoResultFound:
                # Si le module n'est pas déjà dans la table gn_commons.t_modules, on l'installe
                # sinon on leve une execption et on arrête la commande

                # Vérification de la conformité du code :
                #   installation
                #   front end
                #   backend
                check_codefile_validity(module_path, module_code)

                # Installation du module
                run_install_gn_module(app, module_path)

                # copie dans external mods:
                copy_in_external_mods(module_path, module_code.lower())

                # creation du lien symbolique des assets externes
                enable_frontend = create_external_assets_symlink(
                    module_path, module_code.lower())
                # ajout du module dans la table gn_commons.t_modules
                add_application_db(app, module_code, url, enable_frontend,
                                   enable_backend)

                # Enregistrement de la config du module
                gn_module_register_config(module_code.lower())

                if enable_frontend:
                    # generation du du routing du frontend
                    frontend_routes_templating(app)
                    # generation du fichier de configuration du frontend
                    create_module_config(app,
                                         module_code.lower(),
                                         module_path,
                                         build=False)

                if build and enable_frontend:
                    # Rebuild the frontend
                    build_geonature_front(rebuild_sass=True)

                # finally restart geonature backend via supervisor
                subprocess.call(
                    ["sudo", "supervisorctl", "restart", "geonature2"])

            else:
                raise GeoNatureError(
                    "The module {} is already installed, but maybe not activated"
                    .format(module_code))  # noqa

    except (GNModuleInstallError, GeoNatureError) as ex:
        log.critical((
            "\n\n\033[91mError while installing GN module '{}'\033[0m.The process returned:\n\t{}"
        ).format(module_code, ex))
        sys.exit(1)
Пример #3
0
def install_gn_module(module_path, url, conf_file, build, enable_backend):
    """
    Installation d'un module gn
    """
    try:

        # Indique si l'utilisateur est en train de
        #   réaliser une installation du module
        #   et non pas une mise à jour
        # Permet qu'en cas d'erreur à l'installation de supprimer
        #       les traces d'installation de ce module
        fresh_install = False
        # Vérification que le chemin module path soit correct
        if not Path(module_path).is_dir():
            raise GeoNatureError("dir {} doesn't exists".format(module_path))
        # TODO vérifier que l'utilisateur est root ou du groupe geonature
        app = create_app(with_external_mods=False)
        with app.app_context():
            sys.path.append(module_path)
            # Vérification de la conformité du module

            # Vérification de la présence de certain fichiers
            check_gn_module_file(module_path)
            # Vérification de la version de geonature par rapport au manifest
            module_code = None
            module_code = check_manifest(module_path)
            try:
                # Vérification que le module n'est pas déjà activé
                DB.session.query(TModules).filter(
                    TModules.module_code == module_code).one()
            except NoResultFound:
                try:
                    # Si le module n'est pas déjà dans la table gn_commons.t_modules, on l'installe
                    # sinon on leve une execption et on arrête la commande

                    # Installation des dépendances python
                    gn_module_import_requirements(module_path)

                    # Vérification de la conformité du code :
                    #   installation
                    #   front end
                    #   backend
                    check_codefile_validity(module_path, module_code)

                    # copie dans external mods:
                    copy_in_external_mods(module_path, module_code.lower())

                    # creation du lien symbolique des assets externes
                    enable_frontend = create_external_assets_symlink(
                        module_path, module_code.lower())

                    # ajout du module dans la table gn_commons.t_modules
                    fresh_install = add_application_db(app, module_code, url,
                                                       enable_frontend,
                                                       enable_backend)

                    # Installation du module
                    run_install_gn_module(app, module_path)
                    # Enregistrement de la config du module
                    gn_module_register_config(module_code)

                    if enable_frontend:
                        install_frontend_dependencies(module_path)
                        # generation du fichier tsconfig.app.json
                        tsconfig_app_templating(app=app)
                        # generation du routing du frontend
                        frontend_routes_templating(app=app)
                        # generation du fichier de configuration du frontend
                        create_module_config(app, module_code, build=False)
                    if build and enable_frontend:
                        # Rebuild the frontend
                        build_geonature_front(rebuild_sass=True)

                    # finally restart geonature backend via supervisor
                    subprocess.call(
                        ["sudo", "supervisorctl", "restart", "geonature2"])
                except Exception as e:
                    log.error("%s", e)
                    raise GeoNatureError(
                        "Error during module {} installation".format(
                            module_code))  # noqa

            else:
                raise GeoNatureError(
                    "The module {} is already installed, but maybe not activated"
                    .format(module_code))  # noqa

    except (GNModuleInstallError, GeoNatureError) as ex:
        log.critical((
            "\n\n\033[91mError while installing GN module \033[0m.The process returned:\n\t{}"
        ).format(ex))
        # S'il y a une erreur lors de l'installation initiale du module
        #   suppression de ce module
        if fresh_install:
            remove_application_db(app, module_code)

        sys.exit(1)