Автоматическая подгрузка переменных с сервера при их отсутствии
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -123,6 +123,7 @@ celerybeat.pid
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env.txt
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|Описание задачи (Description)|Комментарий|Уточнение у аналитика|
|
||||
|Теги (Tags)|<Задача> - <Название задачи>|28882 - Прочие активности по Ветро|
|
||||
|Трекать/Не трекать (Billable/Non-billable)|<Занесена в Redmine или нет>|Если выбрано, то активность будет перенесена
|
||||
<br>
|
||||
Тег обязательно должен содержать номер задачи (5 цифр) в начале.<br>
|
||||
28882 - Прочие активности<br>
|
||||
28882<br>
|
||||
@@ -54,11 +55,11 @@ touch .env
|
||||
```env
|
||||
*REDMINE_TOKEN=<api_ключ_redmine>
|
||||
*CLOCKIFY_TOKEN=<api_ключ_clockify>
|
||||
*CLOCKIFY_USER_ID=<user_id_clockify>
|
||||
*CLOCKIFY_WORKSPACE_ID=<workspace_id_clockify>
|
||||
?USER_ID=<user_id_clockify>
|
||||
?WORKSPACE_ID=<workspace_id_clockify>
|
||||
```
|
||||
\* - Обязательные<br>
|
||||
? - Опциональные
|
||||
\* - Обязательные.<br>
|
||||
? - Опциональные. Могут быть пустыми, но не должны отсутствовать вовсе.
|
||||
|
||||
|
||||
## Запуск.
|
||||
|
||||
@@ -123,3 +123,17 @@ class ClockifyAPI(ClockifyConfig):
|
||||
resp = resp.json()
|
||||
logger.debug({"id": resp["id"], "email": resp["email"], "name": resp["name"]})
|
||||
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
|
||||
@@ -12,8 +12,8 @@ from exceptions import InvalidToken
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
WORKSPACE_ID = config.CLOCKIFY_WORKSPACE_ID
|
||||
USER_ID = config.CLOCKIFY_USER_ID
|
||||
WORKSPACE_ID = config.WORKSPACE_ID
|
||||
USER_ID = config.USER_ID
|
||||
|
||||
|
||||
class RedmineAPI(RedmineConfig):
|
||||
|
||||
@@ -13,9 +13,10 @@ load_dotenv()
|
||||
class Config(BaseSettings):
|
||||
CLOCKIFY_TOKEN: str
|
||||
REDMINE_TOKEN: str
|
||||
CLOCKIFY_USER_ID: str
|
||||
CLOCKIFY_WORKSPACE_ID: str
|
||||
USER_ID: str = None
|
||||
WORKSPACE_ID: str = None
|
||||
|
||||
ENV_TXT: str = ".env.txt"
|
||||
DB_NAME: str = "RedmineTracker.db"
|
||||
SQL_PATH: str = "config/RedmineTracker.sql"
|
||||
|
||||
|
||||
4
env.example
Normal file
4
env.example
Normal file
@@ -0,0 +1,4 @@
|
||||
REDMINE_TOKEN=
|
||||
CLOCKIFY_TOKEN=
|
||||
USER_ID=
|
||||
WORKSPACE_ID=
|
||||
12
track.py
12
track.py
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
import os.path
|
||||
import sys
|
||||
|
||||
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
|
||||
|
||||
|
||||
WORKSPACE_ID = config.CLOCKIFY_WORKSPACE_ID
|
||||
USER_ID = config.CLOCKIFY_USER_ID
|
||||
WORKSPACE_ID = config.WORKSPACE_ID
|
||||
USER_ID = config.USER_ID
|
||||
|
||||
|
||||
def main():
|
||||
@@ -47,6 +48,13 @@ def main():
|
||||
workspace_id=WORKSPACE_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)
|
||||
|
||||
if args.init_db:
|
||||
|
||||
Reference in New Issue
Block a user