Spaces:
Running
Running
| from neo4j import GraphDatabase, basic_auth | |
| from graphdatascience import GraphDataScience | |
| import utils as u | |
| import argparse | |
| # --- Configuration --- | |
| SOURCE_CSV = 'models_with_all_information.csv' | |
| NEO4J_URI = "bolt://localhost:7687" | |
| # --- Configuration des arguments du script --- | |
| parser = argparse.ArgumentParser(description="Script pour peupler une base de données Neo4j avec des données sur des modèles.") | |
| parser.add_argument( | |
| 'reset', # Le nom de l'argument (positionnel, car sans tirets) | |
| type=str, # On attend une chaîne de caractères | |
| choices=['true', 'false'], # L'utilisateur DOIT choisir entre 'true' et 'false' | |
| help="Spécifiez 'true' pour réinitialiser la base de données, 'false' pour continuer." | |
| ) | |
| parser.add_argument( | |
| 'neo4j_user', # Le nom de l'argument (positionnel, car sans tirets) | |
| type=str, # On attend une chaîne de caractères | |
| help="Nom de votre instance Neo4J" | |
| ) | |
| parser.add_argument( | |
| 'neo4j_password', # Le nom de l'argument (positionnel, car sans tirets) | |
| type=str, # On attend une chaîne de caractères | |
| help="Mot de passe de votre instance Neo4J" | |
| ) | |
| args = parser.parse_args() | |
| # Conversion de l'argument string 'true'/'false' en un vrai booléen Python True/False | |
| RESET = args.reset.lower() == 'true' | |
| NEO4J_PASSWORD = args.neo4j_password | |
| NEO4J_USER = args.neo4j_user | |
| # --- Initialisation et chargement de la base Neo4j --- | |
| # Connexion au serveur Neo4j via le driver natif | |
| # C'est une bonne pratique de garder le driver et de ne pas créer la session tout de suite | |
| driver = GraphDatabase.driver(NEO4J_URI, auth=basic_auth(NEO4J_USER, NEO4J_PASSWORD)) | |
| # Réinitialisation de la base si activé | |
| if RESET: | |
| u.reset_database(driver) # Cette fonction supprime maintenant la DB + le fichier | |
| processed_ids = set() # On part d'un set vide | |
| print("Reset done") | |
| else: | |
| # Si on ne réinitialise pas, ALORS on charge les IDs existants pour continuer | |
| processed_ids = u.load_processed_ids() | |
| # Création des index pour améliorer les performances des requêtes | |
| with driver.session() as session: | |
| session.run("CREATE INDEX IF NOT EXISTS FOR (m:Model) ON (m.name);") | |
| session.run("CREATE INDEX IF NOT EXISTS FOR (a:Author) ON (a.name);") | |
| session.run("CREATE INDEX IF NOT EXISTS FOR (d:Dataset) ON (d.name);") | |
| print("Indexes created.") | |
| # Insertion des données dans la base Neo4j depuis le fichier CSV en parallèle | |
| u.insert_parallel('models_with_all_information.csv', driver, processed_ids) | |
| # --- Finalisation --- | |
| # Fermer la connexion du driver à la toute fin du script | |
| driver.close() | |
| print("\nScript finished. Neo4j driver connection closed.") |