ernestmindres commited on
Commit
9820e37
·
verified ·
1 Parent(s): bdfa8ec

Update baserow_storage.py

Browse files
Files changed (1) hide show
  1. baserow_storage.py +65 -31
baserow_storage.py CHANGED
@@ -600,41 +600,75 @@ def get_deployment_by_id(deploy_id: str) -> Optional[Dict]:
600
  logger.error(f"Échec de la récupération du déploiement Baserow. Status: {response.status_code}, Body: {response.text}")
601
  return None
602
 
603
- def save_new_deployment(
604
- user_id: str,
605
- deploy_id: str,
606
- index_file_present: bool, # Non utilisé directement ici, mais requis par l'appel dans web_routes.py
607
- full_repo_path: str
608
- ) -> tuple[bool, str, Optional[int]]:
609
  """
610
- Enregistre les données d'un nouveau déploiement dans Baserow en mettant
611
- à jour la ligne de l'utilisateur principal.
612
-
613
- C'est la fonction manquante qui cause l'ImportError.
614
  """
615
- # 1. Récupérer l'ID de ligne interne Baserow de l'utilisateur
616
- user_data = load_primary_user_by_id(user_id)
617
-
618
- if not user_data:
619
- # L'utilisateur (Primary) n'existe pas dans la base de données.
620
- return False, f"Erreur: Utilisateur principal ID '{user_id}' non trouvé pour l'enregistrement du déploiement.", None
621
 
622
- user_baserow_row_id = user_data.get('baserow_row_id')
623
-
624
- if not user_baserow_row_id:
625
- return False, f"Erreur critique: ID de ligne Baserow manquant pour l'utilisateur '{user_id}'.", None
626
-
627
- # 2. Mettre à jour la ligne utilisateur avec les données de déploiement
628
- # (ceci utilise la fonction existante update_user_deployment_data)
629
- success, message = update_user_deployment_data(
630
- user_baserow_row_id=user_baserow_row_id,
631
- deploy_id=deploy_id,
632
- user_link=user_id, # L'ID interne de l'utilisateur (UUID) sert de lien
633
- hf_repo_path=full_repo_path
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
634
  )
635
-
636
- # 3. Retourner le succès, le message et l'ID de ligne Baserow
637
- return success, message, user_baserow_row_id
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
 
639
  def delete_deployment_by_id(deploy_id: str) -> tuple[bool, str]:
640
  """
 
600
  logger.error(f"Échec de la récupération du déploiement Baserow. Status: {response.status_code}, Body: {response.text}")
601
  return None
602
 
603
+ def save_new_repository(
604
+ user_id: int,
605
+ repo_data: Dict
606
+ ) -> tuple[bool, str]:
 
 
607
  """
608
+ Ajoute un nouveau dépôt à la liste 'FIELD_REPOS_DATA' de l'utilisateur.
609
+ Ceci remplace l'ancienne approche 'save_new_deployment' qui supposait un seul déploiement par utilisateur.
 
 
610
  """
 
 
 
 
 
 
611
 
612
+ user_record = load_primary_user_data(filters={FIELD_ID: user_id}, single_record=True)
613
+ if not user_record:
614
+ logger.error(f"Utilisateur ID '{user_id}' non trouvé pour l'enregistrement du dépôt.")
615
+ return False, "Utilisateur non trouvé."
616
+
617
+ row_id = user_record.get('id')
618
+ if not row_id:
619
+ return False, f"Erreur critique: ID de ligne Baserow manquant pour l'utilisateur '{user_id}'."
620
+
621
+ # 1. Récupérer et désérialiser la liste des dépôts existants
622
+ repos_json = user_record.get(FIELD_REPOS_DATA)
623
+ try:
624
+ # Baserow renvoie 'None' ou une chaîne vide si le champ est vide
625
+ existing_repos = json.loads(repos_json) if repos_json and isinstance(repos_json, str) else []
626
+ except json.JSONDecodeError:
627
+ logger.warning(f"Champs Repositories Data corrompu pour l'utilisateur {user_id}. Réinitialisation.")
628
+ existing_repos = []
629
+
630
+ # 2. Ajouter le nouveau dépôt
631
+ existing_repos.append(repo_data)
632
+
633
+ # 3. Sérialiser la liste mise à jour
634
+ updated_repos_json = json.dumps(existing_repos)
635
+
636
+ # 4. Mettre à jour Baserow
637
+ url = f"{DATA_BASE_URL}table/{PRIMARY_USERS_TABLE_ID}/{row_id}/"
638
+ data = {
639
+ FIELD_REPOS_DATA: updated_repos_json
640
+ }
641
+
642
+ response = _make_baserow_request(
643
+ method="PATCH",
644
+ url=url,
645
+ data=data,
646
+ log_response=True
647
  )
648
+
649
+ if response.status_code == 200:
650
+ logger.info(f"Nouveau dépôt '{repo_data['repo_name']}' enregistré pour l'utilisateur ID {user_id}.")
651
+ return True, "Dépôt enregistré avec succès."
652
+ else:
653
+ # Gérer l'échec de la mise à jour (ex: données trop volumineuses ou erreur API)
654
+ error_message = response.text
655
+ logger.error(f"Échec de l'enregistrement du dépôt pour l'utilisateur {user_id}: {error_message}")
656
+ return False, f"Échec de la mise à jour Baserow: {error_message}"
657
+
658
+ # Nouvelle fonction pour récupérer la liste de tous les dépôts d'un utilisateur
659
+ def get_all_user_repositories(user_id: int) -> list:
660
+ """Récupère tous les dépôts d'un utilisateur depuis le champ JSON."""
661
+ user_record = load_primary_user_data(filters={FIELD_ID: user_id}, single_record=True)
662
+ if not user_record:
663
+ return []
664
+
665
+ repos_json = user_record.get(FIELD_REPOS_DATA)
666
+ try:
667
+ return json.loads(repos_json) if repos_json and isinstance(repos_json, str) else []
668
+ except json.JSONDecodeError:
669
+ logger.warning(f"Champs Repositories Data corrompu pour l'utilisateur {user_id}.")
670
+ return []
671
+
672
 
673
  def delete_deployment_by_id(deploy_id: str) -> tuple[bool, str]:
674
  """