refactor(scripts): improve import handling and path management

This commit is contained in:
Fanilo-Nantenaina 2026-01-20 15:35:06 +03:00
parent 28c8fb3008
commit 82d1d92e58

View file

@ -1,6 +1,40 @@
import sys import sys
import os import os
from pathlib import Path from pathlib import Path
_current_file = Path(__file__).resolve()
_script_dir = _current_file.parent
_app_dir = _script_dir.parent
print(f"DEBUG: Script path: {_current_file}")
print(f"DEBUG: App dir: {_app_dir}")
print(f"DEBUG: Current working dir: {os.getcwd()}")
if str(_app_dir) in sys.path:
sys.path.remove(str(_app_dir))
sys.path.insert(0, str(_app_dir))
os.chdir(str(_app_dir))
print(f"DEBUG: sys.path[0]: {sys.path[0]}")
print(f"DEBUG: New working dir: {os.getcwd()}")
_test_imports = [
"database",
"database.db_config",
"database.models",
"services",
"security",
]
print("\nDEBUG: Vérification des imports...")
for module in _test_imports:
try:
__import__(module)
print(f"{module}")
except ImportError as e:
print(f"{module}: {e}")
import asyncio import asyncio
import argparse import argparse
import logging import logging
@ -8,18 +42,17 @@ from datetime import datetime
from sqlalchemy import select from sqlalchemy import select
from database.db_config import async_session_factory try:
from database.models.user import User from database.db_config import async_session_factory
from database.models.api_key import SwaggerUser, ApiKey from database.models.user import User
from services.api_key import ApiKeyService from database.models.api_key import SwaggerUser, ApiKey
from security.auth import hash_password from services.api_key import ApiKeyService
from security.auth import hash_password
_script_dir = Path(__file__).resolve().parent except ImportError as e:
_app_dir = _script_dir.parent print(f"\n❌ ERREUR D'IMPORT: {e}")
print(f" Vérifiez que vous êtes dans /app")
sys.path.insert(0, str(_app_dir)) print(f" Commande correcte: cd /app && python scripts/manage_security.py ...")
os.chdir(str(_app_dir)) sys.exit(1)
logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s") logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -230,12 +263,12 @@ async def main():
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=""" epilog="""
Exemples: Exemples:
python scripts/manage_security.py swagger add admin MyP@ssw0rd python scripts/manage_security.py swagger add admin MyP@ssw0rd
python scripts/manage_security.py swagger list python scripts/manage_security.py swagger list
python scripts/manage_security.py apikey create "Mon App" --days 365 --rate-limit 100 python scripts/manage_security.py apikey create "Mon App" --days 365 --rate-limit 100
python scripts/manage_security.py apikey create "SDK-ReadOnly" --endpoints "/clients" "/clients/*" "/devis" "/devis/*" python scripts/manage_security.py apikey create "SDK-ReadOnly" --endpoints "/clients" "/clients/*" "/devis" "/devis/*"
python scripts/manage_security.py apikey list python scripts/manage_security.py apikey list
python scripts/manage_security.py apikey verify sdk_live_xxxxx python scripts/manage_security.py apikey verify sdk_live_xxxxx
""", """,
) )
subparsers = parser.add_subparsers(dest="command", help="Commandes") subparsers = parser.add_subparsers(dest="command", help="Commandes")