taiga_audit_deep.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import requests
  2. import json
  3. import urllib3
  4. import os
  5. from dotenv import load_dotenv
  6. load_dotenv()
  7. urllib3.disable_warnings()
  8. TAIGA_USER = os.environ.get('TAIGA_USER', 'FrancoisLange')
  9. TAIGA_PASS = os.environ.get('TAIGA_PASS', 'your_db_password_here')
  10. base_url = 'https://192.168.130.161/taiga/api/v1'
  11. auth_resp = requests.post(f'{base_url}/auth', json={'type': 'normal', 'username': TAIGA_USER, 'password': TAIGA_PASS}, verify=False)
  12. if auth_resp.status_code != 200:
  13. print("Auth failed!")
  14. exit(1)
  15. auth = auth_resp.json()
  16. h = {'Authorization': f'Bearer {auth["auth_token"]}', 'Content-Type': 'application/json'}
  17. project_id = 21
  18. print("--- Taiga Audit ---")
  19. # User Stories
  20. us_resp = requests.get(f'{base_url}/userstories?project={project_id}', headers=h, verify=False).json()
  21. print(f"Total User Stories: {len(us_resp)}")
  22. for us in us_resp:
  23. if not us.get("description"):
  24. print(f"⚠️ User Story '{us['subject']}' is missing a description!")
  25. if not us.get("milestone"):
  26. print(f"⚠️ User Story '{us['subject']}' is not assigned to a Sprint (Milestone)!")
  27. # Tasks
  28. tasks_resp = requests.get(f'{base_url}/tasks?project={project_id}', headers=h, verify=False).json()
  29. print(f"Total Tasks: {len(tasks_resp)}")
  30. for t in tasks_resp:
  31. if not t.get("description"):
  32. print(f"⚠️ Task '{t['subject']}' is missing a description!")
  33. # Wiki Pages
  34. wiki_resp = requests.get(f'{base_url}/wiki?project={project_id}', headers=h, verify=False).json()
  35. print(f"Total Wiki Pages: {len(wiki_resp)}")
  36. for w in wiki_resp:
  37. if not w.get("content"):
  38. print(f"⚠️ Wiki Page '{w['slug']}' is empty!")