mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-16 06:37:46 +01:00
139 lines
5.9 KiB
Python
Executable File
139 lines
5.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Script pour récupérer un ticket Odoo en utilisant TicketManager.
|
|
Exemple d'usage: python retrieve_ticket.py T0123
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from utils.ticket_manager2 import TicketManager
|
|
import json
|
|
import argparse
|
|
|
|
def main():
|
|
"""Fonction principale du script"""
|
|
parser = argparse.ArgumentParser(description="Extraction de tickets Odoo")
|
|
parser.add_argument("ticket_code", help="Code du ticket à extraire (ex: T0167)")
|
|
parser.add_argument("--config", default="config.json", help="Chemin vers le fichier de configuration")
|
|
parser.add_argument("--output-dir", help="Répertoire de sortie (par défaut: output/ticket_CODE)")
|
|
parser.add_argument("--verbose", "-v", action="store_true", help="Afficher plus d'informations")
|
|
parser.add_argument("--keep-html", action="store_true", help="Conserver le contenu HTML dans les messages")
|
|
parser.add_argument("--no-original", action="store_true", help="Ne pas conserver le corps de message original")
|
|
parser.add_argument("--keep-all", action="store_true", help="Conserver tous les messages (y compris ceux d'OdooBot et les messages vides)")
|
|
args = parser.parse_args()
|
|
|
|
# Charger la configuration
|
|
try:
|
|
with open(args.config, "r", encoding="utf-8") as f:
|
|
config = json.load(f)
|
|
|
|
if args.verbose:
|
|
print(f"Configuration chargée depuis {args.config}")
|
|
except Exception as e:
|
|
print(f"Erreur lors du chargement de la configuration: {e}")
|
|
sys.exit(1)
|
|
|
|
# Extraire les informations de connexion
|
|
odoo_config = config.get("odoo", {})
|
|
url = odoo_config.get("url")
|
|
db = odoo_config.get("db")
|
|
username = odoo_config.get("username")
|
|
api_key = odoo_config.get("api_key")
|
|
|
|
if not all([url, db, username, api_key]):
|
|
print("Informations de connexion Odoo manquantes dans le fichier de configuration")
|
|
sys.exit(1)
|
|
|
|
# Définir le répertoire de sortie
|
|
output_dir = args.output_dir or os.path.join(config.get("output_dir", "output"), f"ticket_{args.ticket_code}")
|
|
|
|
# Créer et connecter le gestionnaire de tickets
|
|
ticket_manager = TicketManager(url, db, username, api_key)
|
|
|
|
# Personnaliser le nettoyage des messages HTML si demandé
|
|
if args.keep_html:
|
|
# Remplacer la méthode de nettoyage par une qui ne fait rien
|
|
ticket_manager._clean_messages = lambda messages: [
|
|
{**msg, "body_original": msg["body"] if isinstance(msg.get("body"), str) else msg.get("body")}
|
|
for msg in messages
|
|
]
|
|
elif args.keep_all:
|
|
# Modifier la méthode pour garder tous les messages mais nettoyer leur contenu
|
|
original_clean_method = ticket_manager._clean_messages
|
|
def keep_all_messages(messages):
|
|
result = []
|
|
for message in messages:
|
|
cleaned = message.copy()
|
|
if "body" in cleaned and cleaned["body"] and isinstance(cleaned["body"], str):
|
|
# Nettoyer le contenu mais garder tous les messages
|
|
cleaned["body_original"] = cleaned["body"]
|
|
# Appliquer le nettoyage de base
|
|
import re
|
|
from html import unescape
|
|
|
|
body = cleaned["body"]
|
|
body = re.sub(r'<img[^>]*?>', '', body)
|
|
body = re.sub(r'<style[^>]*?>.*?</style>', '', body, flags=re.DOTALL)
|
|
body = re.sub(r'<script[^>]*?>.*?</script>', '', body, flags=re.DOTALL)
|
|
body = re.sub(r' style="[^"]*"', '', body)
|
|
body = re.sub(r'<(?:p|div)[^>]*?>', '\n', body)
|
|
body = re.sub(r'</(?:p|div)>', '\n', body)
|
|
body = re.sub(r'<br[^>]*?>', '\n', body)
|
|
body = re.sub(r'<[^>]*?>', '', body)
|
|
body = unescape(body)
|
|
body = re.sub(r'\n\s*\n', '\n\n', body)
|
|
body = re.sub(r' +', ' ', body)
|
|
body = body.strip()
|
|
|
|
cleaned["body"] = body
|
|
result.append(cleaned)
|
|
return result
|
|
|
|
ticket_manager._clean_messages = keep_all_messages
|
|
elif args.no_original:
|
|
# Modifier la méthode pour ne pas conserver le corps original
|
|
original_clean_method = ticket_manager._clean_messages
|
|
ticket_manager._clean_messages = lambda messages: [
|
|
{k: v for k, v in msg.items() if k != "body_original"}
|
|
for msg in original_clean_method(messages)
|
|
]
|
|
|
|
if not ticket_manager.login():
|
|
print("Échec de la connexion à Odoo")
|
|
sys.exit(1)
|
|
|
|
# Récupérer le ticket
|
|
if args.verbose:
|
|
print(f"Recherche du ticket {args.ticket_code}...")
|
|
|
|
ticket = ticket_manager.get_ticket_by_code(args.ticket_code)
|
|
|
|
if not ticket:
|
|
print(f"Ticket {args.ticket_code} non trouvé")
|
|
sys.exit(1)
|
|
|
|
if args.verbose:
|
|
print(f"Ticket {args.ticket_code} trouvé (ID: {ticket.get('id')})")
|
|
print(f"Extraction des données vers {output_dir}...")
|
|
|
|
# Extraire et sauvegarder toutes les données
|
|
result = ticket_manager.extract_ticket_data(ticket["id"], output_dir)
|
|
|
|
if "error" in result:
|
|
print(f"Erreur: {result['error']}")
|
|
sys.exit(1)
|
|
|
|
print(f"Extraction terminée avec succès")
|
|
print(f"- Informations du ticket: {result['ticket_info']}")
|
|
print(f"- Messages: {result['messages_file']}")
|
|
print(f"- Données complètes: {result['ticket_data_file']}")
|
|
print(f"- Pièces jointes: {len(result['attachments'])} fichiers")
|
|
|
|
# Afficher un résumé
|
|
print(f"\nRésumé du ticket {args.ticket_code}:")
|
|
print(f"- Nom: {ticket.get('name', 'N/A')}")
|
|
print(f"- Description: {ticket.get('description', 'N/A')[:100]}...")
|
|
print(f"- Étape: {ticket.get('stage_id', ['N/A'])[1] if isinstance(ticket.get('stage_id'), (list, tuple)) else 'N/A'}")
|
|
|
|
if __name__ == "__main__":
|
|
main() |