Автоматическая подгрузка переменных с сервера при их отсутствии

This commit is contained in:
QuickLike
2025-05-24 16:09:57 +03:00
parent 1dc299406b
commit 5ea040815e
7 changed files with 39 additions and 10 deletions

1
.gitignore vendored
View File

@@ -123,6 +123,7 @@ celerybeat.pid
*.sage.py *.sage.py
# Environments # Environments
.env.txt
.env .env
.venv .venv
env/ env/

View File

@@ -11,6 +11,7 @@
|Описание задачи (Description)|Комментарий|Уточнение у аналитика| |Описание задачи (Description)|Комментарий|Уточнение у аналитика|
|Теги (Tags)|<Задача> - <Название задачи>|28882 - Прочие активности по Ветро| |Теги (Tags)|<Задача> - <Название задачи>|28882 - Прочие активности по Ветро|
|Трекать/Не трекать (Billable/Non-billable)|<Занесена в Redmine или нет>|Если выбрано, то активность будет перенесена |Трекать/Не трекать (Billable/Non-billable)|<Занесена в Redmine или нет>|Если выбрано, то активность будет перенесена
<br>
Тег обязательно должен содержать номер задачи (5 цифр) в начале.<br> Тег обязательно должен содержать номер задачи (5 цифр) в начале.<br>
28882 - Прочие активности<br> 28882 - Прочие активности<br>
28882<br> 28882<br>
@@ -54,11 +55,11 @@ touch .env
```env ```env
*REDMINE_TOKEN=<api_ключ_redmine> *REDMINE_TOKEN=<api_ключ_redmine>
*CLOCKIFY_TOKEN=<api_ключ_clockify> *CLOCKIFY_TOKEN=<api_ключ_clockify>
*CLOCKIFY_USER_ID=<user_id_clockify> ?USER_ID=<user_id_clockify>
*CLOCKIFY_WORKSPACE_ID=<workspace_id_clockify> ?WORKSPACE_ID=<workspace_id_clockify>
``` ```
\* - Обязательные<br> \* - Обязательные.<br>
? - Опциональные ? - Опциональные. Могут быть пустыми, но не должны отсутствовать вовсе.
## Запуск. ## Запуск.

View File

@@ -123,3 +123,17 @@ class ClockifyAPI(ClockifyConfig):
resp = resp.json() resp = resp.json()
logger.debug({"id": resp["id"], "email": resp["email"], "name": resp["name"]}) logger.debug({"id": resp["id"], "email": resp["email"], "name": resp["name"]})
return token return token
def getenvs(self):
resp = requests.get(self.base_url + self.user_url, headers={"X-API-KEY": self.token})
filename = ".env.txt"
if not resp.ok:
logger.error(resp.json())
raise requests.exceptions.RequestException(Fore.RED + "Ошибка запроса.")
with open(filename, "w") as file:
try:
file.write(f"USER_ID={resp.json()['id']}\nWORKSPACE_ID={resp.json()['activeWorkspace']}")
logger.info(f"{Fore.GREEN}Необходимые переменные были сохранены в файл {filename}{Fore.RESET}")
except Exception as e:
logger.error(f"{Fore.RED}Не удалось сохранить необходимые переменные.{Fore.RESET}")
raise e

View File

@@ -12,8 +12,8 @@ from exceptions import InvalidToken
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
WORKSPACE_ID = config.CLOCKIFY_WORKSPACE_ID WORKSPACE_ID = config.WORKSPACE_ID
USER_ID = config.CLOCKIFY_USER_ID USER_ID = config.USER_ID
class RedmineAPI(RedmineConfig): class RedmineAPI(RedmineConfig):

View File

@@ -13,9 +13,10 @@ load_dotenv()
class Config(BaseSettings): class Config(BaseSettings):
CLOCKIFY_TOKEN: str CLOCKIFY_TOKEN: str
REDMINE_TOKEN: str REDMINE_TOKEN: str
CLOCKIFY_USER_ID: str USER_ID: str = None
CLOCKIFY_WORKSPACE_ID: str WORKSPACE_ID: str = None
ENV_TXT: str = ".env.txt"
DB_NAME: str = "RedmineTracker.db" DB_NAME: str = "RedmineTracker.db"
SQL_PATH: str = "config/RedmineTracker.sql" SQL_PATH: str = "config/RedmineTracker.sql"

4
env.example Normal file
View File

@@ -0,0 +1,4 @@
REDMINE_TOKEN=
CLOCKIFY_TOKEN=
USER_ID=
WORKSPACE_ID=

View File

@@ -1,4 +1,5 @@
import logging import logging
import os.path
import sys import sys
logging.basicConfig( logging.basicConfig(
@@ -18,8 +19,8 @@ from config import arg_parser, config, db # noqa: E402
from utils import format_date, str_to_date, today_start, today_end # noqa: E402 from utils import format_date, str_to_date, today_start, today_end # noqa: E402
WORKSPACE_ID = config.CLOCKIFY_WORKSPACE_ID WORKSPACE_ID = config.WORKSPACE_ID
USER_ID = config.CLOCKIFY_USER_ID USER_ID = config.USER_ID
def main(): def main():
@@ -47,6 +48,13 @@ def main():
workspace_id=WORKSPACE_ID, workspace_id=WORKSPACE_ID,
user_id=USER_ID user_id=USER_ID
) )
if not WORKSPACE_ID or not USER_ID:
if not os.path.exists(config.ENV_TXT):
logging.info(f"{Fore.YELLOW}Необходимые переменные не были обнаружены. Попытка получения...{Fore.RESET}")
clock.getenvs()
else:
logger.info(f'{Fore.YELLOW}Проверьте файл "{config.ENV_TXT}". Если необходимых переменных в нём нет, то просто удалите его.{Fore.RESET}')
return
red = RedmineAPI(config.REDMINE_TOKEN) red = RedmineAPI(config.REDMINE_TOKEN)
if args.init_db: if args.init_db: