diff --git a/api.py b/api.py index 74155ea..ae4fbe2 100644 --- a/api.py +++ b/api.py @@ -39,7 +39,7 @@ class RedmineAPI: return get(*args, **kwargs).json() - def post(self, *args, **kwargs) -> dict: + def post(self, *args, **kwargs) -> dict | None: if len(args) > 0: args = tuple([self._base + list(args)[0]] + list(args)[1:]) @@ -48,7 +48,9 @@ class RedmineAPI: kwargs["headers"] = self._headers - return post(*args, **kwargs).json() + response = post(*args, **kwargs) + if response.status_code == 201: + return post(*args, **kwargs).json() def get_issue(self, issue_id: int) -> dict: result = self.get(f"/issues/{issue_id}.json") @@ -88,8 +90,18 @@ class RedmineAPI: "custom_fields": [{"id": STAND_FIELD_ID, "value": "prod"}] }) + def get_current_user(self) -> dict: + result = self.get("/users/current.json") + return result["user"] + def add_version(self, data: dict) -> dict: result = self.post(f"/projects/{VETRO_PROJECT_ID}/versions.json", json={"version": data}) - return result["version"] + if result: + return result["version"] + + def add_issue(self, data: dict) -> dict | None: + result = self.post("/issues.json", json={"issue": data}) + if result: + return result["issue"] api = RedmineAPI(SITE_URL, KEY) diff --git a/constants.py b/constants.py index 378b7bf..0cde47a 100644 --- a/constants.py +++ b/constants.py @@ -1,7 +1,13 @@ RELEASE_STATUS_ID = 9 CHECK_STATUS_ID = 3 +WORK_STATUS_ID = 2 VETRO_PROJECT_ID = 10 +PROD_SUPPORT_TRACKER_ID = 3 + RESPONSIBLE_FIELD_ID = 37 STAND_FIELD_ID = 6 +EXECUTOR_FIELD_ID = 34 + +NORMAL_PRIORITY_ID = 2 diff --git a/tasks.py b/tasks.py index 7110109..0b8b436 100644 --- a/tasks.py +++ b/tasks.py @@ -1,5 +1,13 @@ from api import api from datetime import date, timedelta +from constants import ( + VETRO_PROJECT_ID, + PROD_SUPPORT_TRACKER_ID, + WORK_STATUS_ID, + NORMAL_PRIORITY_ID, + EXECUTOR_FIELD_ID, + RESPONSIBLE_FIELD_ID +) def release_current_version() -> None: @@ -16,3 +24,21 @@ def add_version() -> None: "description": today.strftime("Релиз от %d.%m.%y"), "sharing": "descendants" }) + +def add_release_issue() -> None: + today = date.today() + user = api.get_current_user() + api.add_issue( + { + "project_id": VETRO_PROJECT_ID, + "tracker_id": PROD_SUPPORT_TRACKER_ID, + "status_id": WORK_STATUS_ID, + "priority_id": NORMAL_PRIORITY_ID, + "subject": today.strftime("Релиз (%d.%m.%Y)"), + "description": "Выложить задачи со статусом Ожидает релиз в production.", + "assigned_to_id": "me", + "custom_fields": [ + {"id": EXECUTOR_FIELD_ID, "value": user["id"]}, {"id": RESPONSIBLE_FIELD_ID, "value": "Фадеев Виктор"} + ] + } + )