Kaynağa Gözat

TG-3: Create API sync script and push wiki content to Taiga

lanfr144 4 hafta önce
ebeveyn
işleme
d307c71fdc
2 değiştirilmiş dosya ile 100 ekleme ve 0 silme
  1. 79 0
      sync_taiga.py
  2. 21 0
      test_taiga.py

+ 79 - 0
sync_taiga.py

@@ -0,0 +1,79 @@
+import os
+import requests
+import urllib3
+from datetime import datetime, timedelta
+
+urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+
+# Authenticate
+base_url = 'https://192.168.130.161/taiga/api/v1'
+auth_url = f'{base_url}/auth'
+auth = requests.post(auth_url, json={'type': 'normal', 'username': 'lanfr1904@outlook.com', 'password': 'BTSai123'}, verify=False).json()
+headers = {'Authorization': f'Bearer {auth["auth_token"]}', 'Content-Type': 'application/json'}
+proj_id = 21
+
+# 1. Sync Milestones (Sprints 1-8)
+print("Syncing Sprints/Milestones...")
+existing_m_res = requests.get(f'{base_url}/milestones?project={proj_id}', headers=headers, verify=False).json()
+existing_sprints = {m['name']: m for m in existing_m_res}
+
+start_date = datetime(2026, 4, 16)
+for i in range(1, 9):
+    sprint_name = f"Sprint {i}"
+    sprint_start = start_date + timedelta(weeks=i-1)
+    sprint_end = sprint_start + timedelta(days=6)
+    
+    if sprint_name not in existing_sprints:
+        payload = {
+            "project": proj_id,
+            "name": sprint_name,
+            "estimated_start": sprint_start.strftime('%Y-%m-%d'),
+            "estimated_finish": sprint_end.strftime('%Y-%m-%d')
+        }
+        res = requests.post(f'{base_url}/milestones', json=payload, headers=headers, verify=False)
+        if res.status_code == 201:
+            print(f"Created {sprint_name}")
+        else:
+            print(f"Failed to create {sprint_name}: {res.text}")
+
+# 2. Sync Wiki
+print("\nSyncing Wiki pages...")
+for filename in os.listdir('taiga_wiki'):
+    if not filename.endswith('.md'):
+        continue
+    
+    filepath = os.path.join('taiga_wiki', filename)
+    with open(filepath, 'r') as f:
+        content = f.read()
+        
+    slug = filename.replace('.md', '').lower().replace('_', '-')
+    
+    # Check if exists
+    res = requests.get(f'{base_url}/wiki/by_slug?slug={slug}&project={proj_id}', headers=headers, verify=False)
+    if res.status_code == 200:
+        # Update
+        page_id = res.json()['id']
+        version = res.json()['version']
+        payload = {
+            "project": proj_id,
+            "slug": slug,
+            "content": content,
+            "version": version
+        }
+        update_res = requests.put(f'{base_url}/wiki/{page_id}', json=payload, headers=headers, verify=False)
+        print(f"Updated wiki '{slug}' (status {update_res.status_code})")
+        if update_res.status_code != 200:
+            print(update_res.text)
+    else:
+        # Create
+        payload = {
+            "project": proj_id,
+            "slug": slug,
+            "content": content
+        }
+        create_res = requests.post(f'{base_url}/wiki', json=payload, headers=headers, verify=False)
+        print(f"Created wiki '{slug}' (status {create_res.status_code})")
+        if create_res.status_code != 201:
+            print(create_res.text)
+
+print("\nDone syncing to Taiga Local Food AI project!")

+ 21 - 0
test_taiga.py

@@ -0,0 +1,21 @@
+import requests
+import urllib3
+urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+
+auth = requests.post(
+    'https://192.168.130.161/taiga/api/v1/auth', 
+    json={'type': 'normal', 'username': 'lanfr1904@outlook.com', 'password': 'BTSai123'}, 
+    verify=False
+).json()
+
+headers = {'Authorization': f'Bearer {auth["auth_token"]}'}
+proj_id = 21
+
+m_res = requests.get(f'https://192.168.130.161/taiga/api/v1/milestones?project={proj_id}', headers=headers, verify=False).json()
+print('Milestones:', [(m['name'], m['id']) for m in m_res])
+
+w_res = requests.get(f'https://192.168.130.161/taiga/api/v1/wiki?project={proj_id}', headers=headers, verify=False)
+if w_res.status_code == 200:
+    print('Wikis:', [(w['slug'], w['id']) for w in w_res.json()])
+else:
+    print('Wiki error:', w_res.text)