1
0

setup_sprint11_taiga.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import requests
  2. import urllib3
  3. from datetime import datetime, timedelta
  4. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
  5. base_url = 'https://192.168.130.161/taiga/api/v1'
  6. auth = requests.post(f'{base_url}/auth', json={'type': 'normal', 'username': 'FrancoisLange', 'password': 'BTSai123'}, verify=False).json()
  7. headers = {'Authorization': f'Bearer {auth["auth_token"]}', 'Content-Type': 'application/json'}
  8. proj_id = 21
  9. print("Fetching Sprints...")
  10. milestones = requests.get(f'{base_url}/milestones?project={proj_id}', headers=headers, verify=False).json()
  11. sprint11 = next((m for m in milestones if m['name'] == 'Sprint 11'), None)
  12. if not sprint11:
  13. print("Sprint 11 not found, creating it...")
  14. payload = {
  15. "project": proj_id,
  16. "name": "Sprint 11",
  17. "estimated_start": datetime.now().strftime('%Y-%m-%d'),
  18. "estimated_finish": (datetime.now() + timedelta(days=7)).strftime('%Y-%m-%d')
  19. }
  20. sprint11 = requests.post(f'{base_url}/milestones', json=payload, headers=headers, verify=False).json()
  21. sprint_id = sprint11['id']
  22. print(f"Sprint 11 ID: {sprint_id}")
  23. stories = [
  24. {"subject": "Pre-Emptive Database Cleaning via Upsert", "description": "Rewrite ingestion logic to use COALESCE and ON DUPLICATE KEY UPDATE to clean massive CSV dataset without requiring GROUP BY in the app layer."},
  25. {"subject": "Cascaded Search Logic & Nutrient Selectors", "description": "Update Plate Builder to allow scoped search (Name vs Ingredients) and sort results dynamically by nutrient richness (Iron, Vitamin C)."},
  26. {"subject": "Food Scale Conversion Expansion", "description": "Update unit_converter.py to natively support extra-large, large, medium, and small egg sizing and generic food scales."},
  27. {"subject": "Self-Detaching NOHUP Ingestion Sync", "description": "Refactor data_sync.sh to proactively request sudo authentication upfront and detach the process to survive SSH drops."}
  28. ]
  29. for s in stories:
  30. payload = {
  31. "project": proj_id,
  32. "subject": s["subject"],
  33. "description": s["description"],
  34. "milestone": sprint_id
  35. }
  36. res = requests.post(f'{base_url}/userstories', json=payload, headers=headers, verify=False)
  37. if res.status_code == 201:
  38. us = res.json()
  39. print(f"Created US: {us['subject']}")
  40. # Create a task for it
  41. t_payload = {
  42. "project": proj_id,
  43. "subject": f"Execute: {us['subject']}",
  44. "user_story": us['id'],
  45. "milestone": sprint_id
  46. }
  47. requests.post(f'{base_url}/tasks', json=t_payload, headers=headers, verify=False)
  48. print("Sprint 11 populated!")
  49. # Get Closed status IDs
  50. us_statuses = requests.get(f'{base_url}/userstory-statuses?project={proj_id}', headers=headers, verify=False).json()
  51. task_statuses = requests.get(f'{base_url}/task-statuses?project={proj_id}', headers=headers, verify=False).json()
  52. closed_us_status = next((s['id'] for s in us_statuses if s['is_closed']), None)
  53. closed_task_status = next((s['id'] for s in task_statuses if s['is_closed']), None)
  54. # Update User Stories
  55. us_list = requests.get(f'{base_url}/userstories?project={proj_id}&milestone={sprint_id}', headers=headers, verify=False).json()
  56. for us in us_list:
  57. payload = {"status": closed_us_status, "version": us['version']}
  58. requests.patch(f'{base_url}/userstories/{us["id"]}', json=payload, headers=headers, verify=False)
  59. print(f"Closed User Story: {us['subject']}")
  60. # Update Tasks
  61. tasks = requests.get(f'{base_url}/tasks?project={proj_id}&milestone={sprint_id}', headers=headers, verify=False).json()
  62. for task in tasks:
  63. payload = {"status": closed_task_status, "version": task['version']}
  64. requests.patch(f'{base_url}/tasks/{task["id"]}', json=payload, headers=headers, verify=False)
  65. print(f"Closed Task: {task['subject']}")
  66. print("Sprint 11 successfully closed!")