Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev database tasks #9

Closed
wants to merge 23 commits into from
Closed

Dev database tasks #9

wants to merge 23 commits into from

Conversation

futorio
Copy link
Collaborator

@futorio futorio commented Nov 28, 2018

Примеры использования методов класса TasksDatabase

Подключение базы данных задач

from tasksdb import TasksDatabase
from task import Task

# Если базы данных не существует произойдёт исключение OSError("database does not exist")
tasks_db = TasksDatabase("bot/dbs/tasks")

Для сохранения изменений базу данных необходимо закрыть методом close

# Закрыть базу данных с сохранением изменений
tasks_db.close()

# Так же можно вызвать метод, явно указав параметр save=True
tasks_db.close(save=True)

# Для того, чтобы отменить изменения, нужно вызвать метод с параметром save=False
tasks_db.close(save=False)

Поиск в базе данных

По имени:

# Метод вернёт все объекты класса Task, в имени которых есть подстрока "Найти"
tasks = tasks_db.find_tasks_by_name("Найти")

По номеру:

# Метод вернёт объект класса Task.
# Если такого номера нет, происходит исключение ValueError("task number out of range")
task = tasks_db.find_task_by_number(10)

По тегам:

# Теги можно передавать в двух режимах. За выбор режима отвечает параметр mode
# mode="or" - хотя бы один тег должен присутвовать в тегах задания
# mode="and" - все теги должны присутствовать в тегах задания
# по умолчанию mode="or"

tags = ["char", "string"]
tasks = tasks_db.find_tasks_by_tags(tags)
tasks = tasks_db.find_tasks_by_tags(tags, mode="and")

По уровню сложности:

# Метод оперирует классом Complexity и возвращает все задания с данным уровнем сложности
tasks = tasks_db.find_tasks_by_level(Complexity.Easy)

Добавление новых задач

# Метод записывает новый объек класса Task в базу данных
tasks_db.add_task(task)

Редактирование существующих задач

# Редактирование производится по номеру задания
# Параметры редактирования задаются словарём
# Ключ словаря - название столбца

task_number = 10
# Здесь теги передаются в виде строки, а не в виде списка, я перепишу в скором времени
task_params = {"tags": "char|string|chars"}
tasks_db.edit_task(task_number, task_params)

UPD

Добавлен атрибут объекта last_task_number. Он создаётся при инициализации нового объекта класса и хранит номер последней задачи. Пример использования - получение рандомной задачи:

def get_random_task() -> Task:
	random_number = randomint(1, tasks_db.last_task_number)
	return tasks_db.find_by_number(random_number)

bot/tasksdb.py Outdated Show resolved Hide resolved
bot/tasksdb.py Outdated
else:
return task

def find_tasks_by_tags(self, tags: list, mode: str = "or") -> list:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кто будет устанавливать mode? И кто будет обрабатывать исключения? Если пользователь, то ему это не нужно. Он должен вводить несколько тегов в окошко и получать результат. Значит, должен быть код-обертка над find_tasks_by_tags, который принимает от пользователя строку, парсит ее на теги, упаковывает их в список, устанавливает mode и вызывает метод TasksDatabase.find_tasks_by_tags. Этот код реализован?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю сделать поиск только по mode=='or' и выдавать вариант с наибольшим количеством совпадений тегов. Если пользователь ввел один тег, то искать его наличие. Если несколько, то подбирать несколько записей - здесь совпали все теги, здесь не найден один, здесь не найдены два - и из этих записей выбирать ответ пользователю.

Плюс сейчас, насколько я понимаю, никак не распознается ошибка по тегам - типа "такого тега не существует" или "не найдено задач". Кто будет выполнять такую проверку?

bot/tasksdb.py Show resolved Hide resolved
bot/tasksdb.py Outdated Show resolved Hide resolved
@LostInKadath LostInKadath mentioned this pull request Nov 29, 2018
7 tasks
bot/tasksdb.py Outdated Show resolved Hide resolved
bot/tasksdb.py Outdated Show resolved Hide resolved
Copy link
Collaborator

@Davletov Davletov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@futorio, сделай изменения, про ктр написал @LostInKadath
Остальное выглядит отлично!

bot/tasksdb.py Show resolved Hide resolved
bot/tasksdb.py Outdated Show resolved Hide resolved
bot/bot.py Show resolved Hide resolved
bot/tasksdb.py Show resolved Hide resolved
bot/tasksdb.py Outdated Show resolved Hide resolved
bot/tasksdb.py Outdated Show resolved Hide resolved
@LostInKadath
Copy link
Collaborator

Database: DB development

@LostInKadath LostInKadath mentioned this pull request Dec 2, 2018
6 tasks
@LostInKadath
Copy link
Collaborator

По коду последних пяти коммитов вопросов нет. Однако придержим эту ветку разработки до тех пор, пока не появится кристальная ясность - как дальше жить. =)

@unilecs unilecs deleted the dev-database-tasks branch October 31, 2022 06:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants