Spaces:
Build error
Build error
Update baserow_storage.py
Browse files- baserow_storage.py +80 -3
baserow_storage.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# baserow_storage.py
|
| 2 |
|
| 3 |
import os
|
| 4 |
import requests
|
|
@@ -19,6 +19,8 @@ API_TOKEN = os.environ.get("BASEROW_API_TOKEN")
|
|
| 19 |
# Les IDs de table seront récupérés depuis les variables d'environnement
|
| 20 |
PRIMARY_USERS_TABLE_ID = os.environ.get("PRIMARY_USERS_TABLE_ID")
|
| 21 |
END_USERS_TABLE_ID = os.environ.get("END_USERS_TABLE_ID")
|
|
|
|
|
|
|
| 22 |
|
| 23 |
# Headers pour l'authentification
|
| 24 |
HEADERS = {
|
|
@@ -27,8 +29,12 @@ HEADERS = {
|
|
| 27 |
}
|
| 28 |
|
| 29 |
# ----------------------------------------------------------------------
|
| 30 |
-
# --- Noms de Colonnes pour
|
| 31 |
# ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
FIELD_ID = 'ID' # Correspond à 'user_id' dans le code
|
| 33 |
FIELD_EMAIL = 'Email' # Correspond à 'email'
|
| 34 |
FIELD_USERNAME = 'Nom d\'utilisateur' # Correspond à 'username'
|
|
@@ -521,4 +527,75 @@ def _make_baserow_request(method: str, url: str, params: Optional[Dict] = None,
|
|
| 521 |
except requests.exceptions.RequestException as e:
|
| 522 |
logger.error(f"BASEROW CONNECTION ERROR: {e}")
|
| 523 |
# Retourne un objet Response factice pour l'utiliser dans la fonction appelante
|
| 524 |
-
return requests.Response()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# baserow_storage.py (Version Modifiée)
|
| 2 |
|
| 3 |
import os
|
| 4 |
import requests
|
|
|
|
| 19 |
# Les IDs de table seront récupérés depuis les variables d'environnement
|
| 20 |
PRIMARY_USERS_TABLE_ID = os.environ.get("PRIMARY_USERS_TABLE_ID")
|
| 21 |
END_USERS_TABLE_ID = os.environ.get("END_USERS_TABLE_ID")
|
| 22 |
+
# NOUVEL ID DE TABLE POUR LES DÉPLOIEMENTS (Projets)
|
| 23 |
+
DEPLOYMENTS_TABLE_ID = os.environ.get("DEPLOYMENTS_TABLE_ID")
|
| 24 |
|
| 25 |
# Headers pour l'authentification
|
| 26 |
HEADERS = {
|
|
|
|
| 29 |
}
|
| 30 |
|
| 31 |
# ----------------------------------------------------------------------
|
| 32 |
+
# --- Noms de Colonnes pour les Déploiements (à adapter à votre structure Baserow) ---
|
| 33 |
# ----------------------------------------------------------------------
|
| 34 |
+
FIELD_DEPLOY_ID = 'Deployment ID' # Nom de la colonne pour l'ID de déploiement (le dossier HF)
|
| 35 |
+
FIELD_USER_REF = 'User Link' # Nom de la colonne pour la référence à l'utilisateur principal
|
| 36 |
+
FIELD_HF_REPO_PATH = 'HF Repo Path' # Chemin complet vers le dossier dans le repo
|
| 37 |
+
|
| 38 |
FIELD_ID = 'ID' # Correspond à 'user_id' dans le code
|
| 39 |
FIELD_EMAIL = 'Email' # Correspond à 'email'
|
| 40 |
FIELD_USERNAME = 'Nom d\'utilisateur' # Correspond à 'username'
|
|
|
|
| 527 |
except requests.exceptions.RequestException as e:
|
| 528 |
logger.error(f"BASEROW CONNECTION ERROR: {e}")
|
| 529 |
# Retourne un objet Response factice pour l'utiliser dans la fonction appelante
|
| 530 |
+
return requests.Response()
|
| 531 |
+
|
| 532 |
+
# --- NOUVELLES FONCTIONS POUR LES DÉPLOIEMENTS (Projets) ---
|
| 533 |
+
|
| 534 |
+
|
| 535 |
+
|
| 536 |
+
def update_user_deployment_data(
|
| 537 |
+
user_baserow_row_id: int,
|
| 538 |
+
deploy_id: str,
|
| 539 |
+
user_link: str, # Utilisera l'ID interne de l'utilisateur
|
| 540 |
+
hf_repo_path: str
|
| 541 |
+
) -> tuple[bool, str]:
|
| 542 |
+
"""
|
| 543 |
+
Met à jour la ligne de l'utilisateur principal (PRIMARY_USERS_TABLE_ID)
|
| 544 |
+
avec les données de déploiement du projet (ID, Repo, etc.).
|
| 545 |
+
"""
|
| 546 |
+
if not PRIMARY_USERS_TABLE_ID:
|
| 547 |
+
return False, "Erreur de configuration: ID de la table utilisateur principal manquant."
|
| 548 |
+
|
| 549 |
+
url = f"{DATA_BASE_URL}table/{PRIMARY_USERS_TABLE_ID}/{user_baserow_row_id}/"
|
| 550 |
+
|
| 551 |
+
# Les données à mettre à jour
|
| 552 |
+
data = {
|
| 553 |
+
FIELD_DEPLOY_ID: deploy_id,
|
| 554 |
+
FIELD_USER_REF: user_link,
|
| 555 |
+
FIELD_HF_REPO_PATH: hf_repo_path
|
| 556 |
+
}
|
| 557 |
+
|
| 558 |
+
# Utiliser PATCH pour mettre à jour seulement les champs spécifiés
|
| 559 |
+
response = _baserow_request(url, method="PATCH", data=data)
|
| 560 |
+
|
| 561 |
+
if response.status_code == 200:
|
| 562 |
+
logger.info(f"Déploiement ID {deploy_id} enregistré sur l'utilisateur Row ID {user_baserow_row_id}.")
|
| 563 |
+
return True, "Données de déploiement enregistrées avec succès sur le compte utilisateur."
|
| 564 |
+
else:
|
| 565 |
+
logger.error(f"Échec de la mise à jour du déploiement Baserow pour l'utilisateur {user_baserow_row_id}. Status: {response.status_code}, Body: {response.text}")
|
| 566 |
+
return False, f"Échec de la mise à jour Baserow: {response.status_code}"
|
| 567 |
+
|
| 568 |
+
|
| 569 |
+
# ----------------------------------------------------------------------
|
| 570 |
+
# --- MODIFICATION DE FONCTION : Récupérer le déploiement par ID ---
|
| 571 |
+
# La recherche doit maintenant se faire dans la table utilisateur.
|
| 572 |
+
# ----------------------------------------------------------------------
|
| 573 |
+
def get_deployment_by_id(deploy_id: str) -> Optional[Dict]:
|
| 574 |
+
"""
|
| 575 |
+
Récupère les détails du déploiement (la ligne de l'utilisateur) par son ID unique (le nom du dossier HF).
|
| 576 |
+
"""
|
| 577 |
+
if not PRIMARY_USERS_TABLE_ID:
|
| 578 |
+
return None
|
| 579 |
+
|
| 580 |
+
# Utiliser un filtre Baserow pour chercher par l'ID de déploiement dans la table utilisateur
|
| 581 |
+
url = f"{DATA_BASE_URL}table/{PRIMARY_USERS_TABLE_ID}/"
|
| 582 |
+
|
| 583 |
+
# Construction du filtre Baserow: filter__Deployment ID__equal={deploy_id}
|
| 584 |
+
filter_param = f"filter__{FIELD_DEPLOY_ID}__equal"
|
| 585 |
+
params = {
|
| 586 |
+
filter_param: deploy_id
|
| 587 |
+
}
|
| 588 |
+
|
| 589 |
+
response = _baserow_request(url, method="GET", params=params)
|
| 590 |
+
|
| 591 |
+
if response.status_code == 200:
|
| 592 |
+
results = response.json().get('results', [])
|
| 593 |
+
if results:
|
| 594 |
+
# Retourne les données de l'utilisateur contenant les données de déploiement
|
| 595 |
+
# Notez que cela renvoie la ligne utilisateur complète.
|
| 596 |
+
return results[0]
|
| 597 |
+
else:
|
| 598 |
+
return None
|
| 599 |
+
else:
|
| 600 |
+
logger.error(f"Échec de la récupération du déploiement Baserow. Status: {response.status_code}, Body: {response.text}")
|
| 601 |
+
return None
|