first commit
This commit is contained in:
commit
e6c52820cd
227 changed files with 16156 additions and 0 deletions
109
run.py
Executable file
109
run.py
Executable file
|
|
@ -0,0 +1,109 @@
|
|||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
import importlib.util
|
||||
import threading
|
||||
import time
|
||||
|
||||
def check_dependency(package_name):
|
||||
"""Vérifie si un package est installé."""
|
||||
if package_name.lower() == "pillow":
|
||||
try:
|
||||
import PIL
|
||||
return True
|
||||
except ImportError:
|
||||
return False
|
||||
return importlib.util.find_spec(package_name) is not None
|
||||
|
||||
def check_dependencies(require_webview: bool = False):
|
||||
"""Vérifie que toutes les dépendances requises sont installées."""
|
||||
required_packages = ["fpdf", "dateutil", "pillow", "packaging"]
|
||||
missing_packages = []
|
||||
|
||||
# Vérifie les dépendances de base
|
||||
for package in required_packages:
|
||||
if not check_dependency(package):
|
||||
missing_packages.append(package)
|
||||
|
||||
# Vérifier pour CustomTkinter si demandé explicitement
|
||||
if "--ctk" in sys.argv:
|
||||
if not check_dependency("customtkinter"):
|
||||
print("Le package 'customtkinter' est requis pour le mode GUI CustomTkinter.")
|
||||
print("Veuillez l'installer avec :")
|
||||
print("pip install customtkinter")
|
||||
return False
|
||||
|
||||
# Vérifier pywebview si demandé
|
||||
if require_webview and not check_dependency("webview"):
|
||||
print("Le mode --webview nécessite le package 'pywebview'.")
|
||||
print("Veuillez l'installer avec :")
|
||||
print("pip install pywebview")
|
||||
return False
|
||||
|
||||
if missing_packages:
|
||||
print("Certaines dépendances requises ne sont pas installées:")
|
||||
for package in missing_packages:
|
||||
print(f" - {package}")
|
||||
print("\nVeuillez exécuter le script d'installation:")
|
||||
print("python install.py")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def check_directories():
|
||||
"""Vérifie que les répertoires nécessaires existent."""
|
||||
directories = [
|
||||
"Data",
|
||||
"Data/clients",
|
||||
"Data/prospects",
|
||||
"output",
|
||||
"output/devis",
|
||||
"output/propositions"
|
||||
]
|
||||
|
||||
for directory in directories:
|
||||
dir_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), directory)
|
||||
if not os.path.exists(dir_path):
|
||||
print(f"Le répertoire {directory} n'existe pas.")
|
||||
print("Veuillez exécuter le script d'installation:")
|
||||
print("python install.py")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def _run_flask_server(host: str = "127.0.0.1", port: int = 8080, debug: bool = False):
|
||||
"""Démarre le serveur Flask (sans reloader)"""
|
||||
from app import app
|
||||
from modules.tasks.web import tasks_bp
|
||||
from modules.crm.web import crm_api_bp
|
||||
app.register_blueprint(tasks_bp)
|
||||
app.register_blueprint(crm_api_bp)
|
||||
# use_reloader=False pour éviter le double démarrage lorsque lancé en thread
|
||||
app.run(debug=debug, host=host, port=port, use_reloader=False)
|
||||
|
||||
def launch_application(on_browser: bool = False):
|
||||
"""Lance l'application principale, soit en mode webview, soit en mode navigateur."""
|
||||
if not on_browser:
|
||||
# Lancer Flask en arrière-plan
|
||||
server_thread = threading.Thread(target=_run_flask_server, kwargs={"host": "127.0.0.1", "port": 8080, "debug": False}, daemon=True)
|
||||
server_thread.start()
|
||||
|
||||
# Petite attente pour laisser le serveur démarrer
|
||||
time.sleep(0.5)
|
||||
|
||||
# Ouvrir la fenêtre desktop
|
||||
import webview
|
||||
webview.create_window("Suite Consultance", "http://127.0.0.1:8080", width=1280, height=800)
|
||||
webview.start()
|
||||
else:
|
||||
# Mode interface web avec Flask classique
|
||||
from app import app
|
||||
from modules.tasks.web import tasks_bp
|
||||
from modules.crm.web import crm_api_bp
|
||||
app.register_blueprint(tasks_bp)
|
||||
app.register_blueprint(crm_api_bp)
|
||||
app.run(debug=True, host='0.0.0.0', port=8080)
|
||||
|
||||
if __name__ == "__main__":
|
||||
app_mode_flag = "--browser" in sys.argv
|
||||
launch_application(on_browser=app_mode_flag)
|
||||
Loading…
Add table
Add a link
Reference in a new issue