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)
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)
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)