added ability to setup multiple lists

This commit is contained in:
bvn13 2024-06-29 00:08:56 +03:00
parent fe559edc97
commit 4888f3d485
4 changed files with 57 additions and 24 deletions

View File

@ -62,17 +62,14 @@
## Настройка запуска
1. Настройка осуществляется установкой переменных окружения при старте
- TODO_PATH - каталог (локальный), где хранится файл с заданиями
- TODO_FILE - имя файла с заданиями
- TODOS_PATH - каталог (локальный), где хранится файл с заданиями
2. Формат файла с заданиями такой: это MarkDown с жесткой структурой
```
# ToDo
- [ ] task 1
- [ ] task 2
```
сервис при добавлении новой задачи ищет строку `# ToDo`, после этого отступает одну пустую строку и добавляет задачу в формате MarkDown checked action. Советую ознакомиться с [форматом MarkDown](https://www.graef.io/basic-markdown-syntax/), потому что полезно.
@ -80,15 +77,25 @@
3. Третья важная переменная окружения
- TOKEN - это тот авторизационный токен, который будет необходимо сообщить боту JeDoIst при добавлении себе списка задач.
4. Конфигурационный файл. Формат JSON, содержит список путей к TODO-файлам относительно TODOS_PATH, указанных в п.1.
```
{
"lists": {
"personal": "./test/personal.md",
"work": "./test/work.md"
}
}
```
## Запуск
Запуск осуществляется стандартным путем, с помощью `docker-compose`:
```
> TODO_PATH=/path/to/dir \
TODO_FILE=file.md \
> TODOS_PATH=/path/to/dir \
TOKEN=my-secret-token \
CONFIG_FILE=/path/to/config
docker-compose up -d
```
@ -107,6 +114,7 @@
1. имя списка задач - необходимо для того, чтобы после введенной задачи (в диалоге бота в Телеграм) указать, в какой список добавить задачу
2. `callback URL` - это внешний адрес вашего запущенного сервиса (по этой инструкции). Если вы арендовали VPS, то добавьте в ее FireWall порт 8080 для настоящего сервиса, и укажите в диалоге бота адрес `http://YOUR_VPS_IP:8080/create-task`
3. токен авторизации - тот самый токен, который указан при запуске настоящего сервиса на вашем VPS
4. Для списка важно задать ID - он указывается в `config.json` в качестве ключей объекта `$.['lists']`. Этот ID необходимо указать в callback URL в параметре `list`: `http://YOUR_VPS_IP:8080/create-task?list=personal`
# Важная информация

View File

@ -11,10 +11,11 @@ services:
image: localhost:5001/jedoist-client:${APP_VERSION}
environment:
- TOKEN=${TOKEN}
- TODO_PATH=/mnt/todo
- TODO_FILE=${TODO_FILE}
- TODOS_PATH=/mnt/todos
- CONFIG_FILE=/mnt/config.json
volumes:
- ${TODO_PATH}:/mnt/todo
- ${TODOS_PATH}:/mnt/todos
- ${CONFIG_FILE}:/mnt/config.json
restart: on-failure
networks:
- jedoist

View File

@ -1,6 +1,7 @@
import falcon
import json
import os
from typing import Optional
# https://falcon.readthedocs.io/en/stable/user/quickstart.html#learning-by-example
@ -115,24 +116,46 @@ class CreateTaskResource:
TODO_HEADER = '# ToDo'
def __init__(self) -> None:
self.__todo_path = "{0}/{1}".format(os.environ['TODO_PATH'], os.environ['TODO_FILE'])
def __init__(self, config_file: str, todos_path: str) -> None:
self.__todos_path = todos_path
self.__config = self.__read_config_file(config_file)
def on_post(self, req, resp):
task = req.context.doc['task']
self.__create_task(task)
quote = {
'title': 'Получена задача',
'description': task
}
resp.media = quote
resp.status = falcon.HTTP_201
def on_post(self, req, resp, params):
list_id = 'default'
if 'lists' in params:
list_id = params['lists']
file_path = self.__detect_todo_file_path(list_id)
if file_path == None:
quote = {
'title': 'Ошибка настройки',
'description': 'В URL не указан параметр "list"'
}
resp.media = quote
resp.status = falcon.HTTP_500
else:
task = req.context.doc['task']
self.__create_task(task, file_path)
quote = {
'title': 'Получена задача',
'description': task
}
resp.media = quote
resp.status = falcon.HTTP_201
def __create_task(self, text: str) -> None:
def __read_config_file(self, config_file: str) -> None:
with open(config_file, 'r') as f:
return json.load(f)
def __detect_todo_file_path(self, todo_list_id) -> Optional[str]:
if not 'lists' in self.__config or not todo_list_id in self.__config['lists']:
return None
return "{0}/{1}".format(self.__todos_path, self.__config['lists'][todo_list_id])
def __create_task(self, text: str, file_path: str) -> None:
content = []
section_found = False
is_waiting_empty_line = False
with open(self.__todo_path, 'r', encoding='UTF-8') as file:
with open(file_path, 'r', encoding='UTF-8') as file:
while line := file.readline():
if section_found == False:
if line.strip() == CreateTaskResource.TODO_HEADER:
@ -154,4 +177,5 @@ app = falcon.App(
JSONTranslator()
]
)
app.add_route('/create-task', CreateTaskResource())
app.add_route('/create-task', CreateTaskResource(config_file=os.environ['CONFIG_FILE'],
todos_path=os.environ['TODOS_PATH']))

View File

@ -1 +1 @@
1.2.4
1.3.0