Fix(ci): Use project-specific API endpoints in youtrack-sync-kb.py (fixes 404)
This commit is contained in:
@@ -67,31 +67,64 @@ def http(method: str, url: str, **kw):
|
|||||||
|
|
||||||
# *** KORRIGIERTE FUNKTION ***
|
# *** KORRIGIERTE FUNKTION ***
|
||||||
def get_project_by_short_name(name: str):
|
def get_project_by_short_name(name: str):
|
||||||
"""Sucht die interne ID des Projekts anhand des Kürzels (z.B. 'MP')."""
|
"""Sucht die interne ID des Projekts anhand des Kürzels (z.B. 'MP').
|
||||||
url = yt_url(f"/api/projects?fields=id,shortName")
|
Versucht zuerst /api/projects, fällt bei Fehler auf /api/admin/projects zurück.
|
||||||
r = http("GET", url)
|
"""
|
||||||
if r.status_code != 200:
|
# 1) Primärer, nicht-admin Endpunkt
|
||||||
print(f"[YT] Projektliste fehlgeschlagen: HTTP {r.status_code} {r.text[:400]}")
|
url1 = yt_url("/api/projects?fields=id,shortName")
|
||||||
sys.exit(1)
|
r1 = http("GET", url1)
|
||||||
for proj in r.json():
|
if r1.status_code == 200:
|
||||||
if proj.get("shortName") == name:
|
for proj in r1.json():
|
||||||
return proj
|
if proj.get("shortName") == name:
|
||||||
return None
|
print("[YT] Projekte via /api/projects gefunden.")
|
||||||
|
return proj
|
||||||
|
else:
|
||||||
|
print(f"[YT] Projektliste (\"/api/projects\") fehlgeschlagen: HTTP {r1.status_code} {r1.text[:200]}")
|
||||||
|
|
||||||
|
# 2) Fallback: Admin-Endpunkt (ältere Versionen/Setups)
|
||||||
|
url2 = yt_url("/api/admin/projects?fields=id,shortName")
|
||||||
|
r2 = http("GET", url2)
|
||||||
|
if r2.status_code == 200:
|
||||||
|
for proj in r2.json():
|
||||||
|
if proj.get("shortName") == name:
|
||||||
|
print("[YT] Projekte via /api/admin/projects gefunden.")
|
||||||
|
return proj
|
||||||
|
return None
|
||||||
|
|
||||||
|
print(f"[YT] Projektliste (\"/api/admin/projects\") fehlgeschlagen: HTTP {r2.status_code} {r2.text[:200]}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# Neues Hilfs-API: Knowledge Base des Projekts abfragen
|
# Neues Hilfs-API: Knowledge Base des Projekts abfragen
|
||||||
|
|
||||||
def get_project_knowledge_base(project_id: str):
|
def get_project_knowledge_base(project_id: str):
|
||||||
"""Liest die Knowledge-Base eines Projekts, inkl. Root-Container-Artikel."""
|
"""Liest die Knowledge-Base eines Projekts, inkl. Root-Container-Artikel.
|
||||||
url = yt_url(f"/api/projects/{project_id}?fields=knowledgeBase(id,articlesCount,rootArticle(id,title))")
|
Versucht zuerst /api/projects/{id}, fällt bei Fehler auf /api/admin/projects/{id} zurück.
|
||||||
r = http("GET", url)
|
"""
|
||||||
if r.status_code != 200:
|
# 1) Primärer Endpunkt
|
||||||
print(f"[YT] Projekt-Details fehlgeschlagen: HTTP {r.status_code} {r.text[:400]}")
|
url1 = yt_url(f"/api/projects/{project_id}?fields=knowledgeBase(id,articlesCount,rootArticle(id,title))")
|
||||||
sys.exit(1)
|
r1 = http("GET", url1)
|
||||||
data = r.json()
|
if r1.status_code == 200:
|
||||||
kb = data.get("knowledgeBase")
|
data = r1.json()
|
||||||
if not kb:
|
kb = data.get("knowledgeBase")
|
||||||
|
if kb:
|
||||||
|
print("[YT] Projekt-Details via /api/projects/{id} geladen.")
|
||||||
|
return kb
|
||||||
|
else:
|
||||||
|
print(f"[YT] Projekt-Details (\"/api/projects/{project_id}\") fehlgeschlagen: HTTP {r1.status_code} {r1.text[:200]}")
|
||||||
|
|
||||||
|
# 2) Fallback: Admin-Endpunkt
|
||||||
|
url2 = yt_url(f"/api/admin/projects/{project_id}?fields=knowledgeBase(id,articlesCount,rootArticle(id,title))")
|
||||||
|
r2 = http("GET", url2)
|
||||||
|
if r2.status_code == 200:
|
||||||
|
data = r2.json()
|
||||||
|
kb = data.get("knowledgeBase")
|
||||||
|
if kb:
|
||||||
|
print("[YT] Projekt-Details via /api/admin/projects/{id} geladen.")
|
||||||
|
return kb
|
||||||
return None
|
return None
|
||||||
return kb
|
|
||||||
|
print(f"[YT] Projekt-Details (\"/api/admin/projects/{project_id}\") fehlgeschlagen: HTTP {r2.status_code} {r2.text[:200]}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# *** KORRIGIERTE FUNKTION ***
|
# *** KORRIGIERTE FUNKTION ***
|
||||||
def find_article_in_kb_by_title(title: str, parent_id: str | None = None):
|
def find_article_in_kb_by_title(title: str, parent_id: str | None = None):
|
||||||
|
|||||||
Reference in New Issue
Block a user