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. Настройка осуществляется установкой переменных окружения при старте 1. Настройка осуществляется установкой переменных окружения при старте
- TODO_PATH - каталог (локальный), где хранится файл с заданиями - TODOS_PATH - каталог (локальный), где хранится файл с заданиями
- TODO_FILE - имя файла с заданиями
2. Формат файла с заданиями такой: это MarkDown с жесткой структурой 2. Формат файла с заданиями такой: это MarkDown с жесткой структурой
``` ```
# ToDo # ToDo
- [ ] task 1 - [ ] task 1
- [ ] task 2 - [ ] task 2
``` ```
сервис при добавлении новой задачи ищет строку `# ToDo`, после этого отступает одну пустую строку и добавляет задачу в формате MarkDown checked action. Советую ознакомиться с [форматом MarkDown](https://www.graef.io/basic-markdown-syntax/), потому что полезно. сервис при добавлении новой задачи ищет строку `# ToDo`, после этого отступает одну пустую строку и добавляет задачу в формате MarkDown checked action. Советую ознакомиться с [форматом MarkDown](https://www.graef.io/basic-markdown-syntax/), потому что полезно.
@ -80,15 +77,25 @@
3. Третья важная переменная окружения 3. Третья важная переменная окружения
- TOKEN - это тот авторизационный токен, который будет необходимо сообщить боту JeDoIst при добавлении себе списка задач. - TOKEN - это тот авторизационный токен, который будет необходимо сообщить боту JeDoIst при добавлении себе списка задач.
4. Конфигурационный файл. Формат JSON, содержит список путей к TODO-файлам относительно TODOS_PATH, указанных в п.1.
```
{
"lists": {
"personal": "./test/personal.md",
"work": "./test/work.md"
}
}
```
## Запуск ## Запуск
Запуск осуществляется стандартным путем, с помощью `docker-compose`: Запуск осуществляется стандартным путем, с помощью `docker-compose`:
``` ```
> TODO_PATH=/path/to/dir \ > TODOS_PATH=/path/to/dir \
TODO_FILE=file.md \
TOKEN=my-secret-token \ TOKEN=my-secret-token \
CONFIG_FILE=/path/to/config
docker-compose up -d docker-compose up -d
``` ```
@ -107,6 +114,7 @@
1. имя списка задач - необходимо для того, чтобы после введенной задачи (в диалоге бота в Телеграм) указать, в какой список добавить задачу 1. имя списка задач - необходимо для того, чтобы после введенной задачи (в диалоге бота в Телеграм) указать, в какой список добавить задачу
2. `callback URL` - это внешний адрес вашего запущенного сервиса (по этой инструкции). Если вы арендовали VPS, то добавьте в ее FireWall порт 8080 для настоящего сервиса, и укажите в диалоге бота адрес `http://YOUR_VPS_IP:8080/create-task` 2. `callback URL` - это внешний адрес вашего запущенного сервиса (по этой инструкции). Если вы арендовали VPS, то добавьте в ее FireWall порт 8080 для настоящего сервиса, и укажите в диалоге бота адрес `http://YOUR_VPS_IP:8080/create-task`
3. токен авторизации - тот самый токен, который указан при запуске настоящего сервиса на вашем VPS 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} image: localhost:5001/jedoist-client:${APP_VERSION}
environment: environment:
- TOKEN=${TOKEN} - TOKEN=${TOKEN}
- TODO_PATH=/mnt/todo - TODOS_PATH=/mnt/todos
- TODO_FILE=${TODO_FILE} - CONFIG_FILE=/mnt/config.json
volumes: volumes:
- ${TODO_PATH}:/mnt/todo - ${TODOS_PATH}:/mnt/todos
- ${CONFIG_FILE}:/mnt/config.json
restart: on-failure restart: on-failure
networks: networks:
- jedoist - jedoist

View File

@ -1,6 +1,7 @@
import falcon import falcon
import json import json
import os import os
from typing import Optional
# https://falcon.readthedocs.io/en/stable/user/quickstart.html#learning-by-example # https://falcon.readthedocs.io/en/stable/user/quickstart.html#learning-by-example
@ -115,24 +116,46 @@ class CreateTaskResource:
TODO_HEADER = '# ToDo' TODO_HEADER = '# ToDo'
def __init__(self) -> None: def __init__(self, config_file: str, todos_path: str) -> None:
self.__todo_path = "{0}/{1}".format(os.environ['TODO_PATH'], os.environ['TODO_FILE']) self.__todos_path = todos_path
self.__config = self.__read_config_file(config_file)
def on_post(self, req, resp): def on_post(self, req, resp, params):
task = req.context.doc['task'] list_id = 'default'
self.__create_task(task) if 'lists' in params:
quote = { list_id = params['lists']
'title': 'Получена задача', file_path = self.__detect_todo_file_path(list_id)
'description': task if file_path == None:
} quote = {
resp.media = quote 'title': 'Ошибка настройки',
resp.status = falcon.HTTP_201 '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 = [] content = []
section_found = False section_found = False
is_waiting_empty_line = 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(): while line := file.readline():
if section_found == False: if section_found == False:
if line.strip() == CreateTaskResource.TODO_HEADER: if line.strip() == CreateTaskResource.TODO_HEADER:
@ -154,4 +177,5 @@ app = falcon.App(
JSONTranslator() 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