Создал скрипт для работы с базой данных

This commit is contained in:
bogdan zažigin 2023-04-11 22:00:12 +03:00
parent 0c1f7efb82
commit 8e3113bfca
Signed by: zaboal
GPG key ID: C9918166D559FE8A

View file

@ -0,0 +1,85 @@
''' База данных бота-интегратора Дискорда и ГитЛаба
© Стешенко Артём и Зажигин Богдан 20232023 '''
from dataclasses import dataclass, field
# Описание структур данных —
# https://docs.python.org/3/library/dataclasses.html
# from yarl import URL
# # Работа с URL на Гитлаб Проект —
# # https://yarl.aio-libs.org/en/latest
from msgpack import ExtType, packb, unpackb
# Бинарная сериализация, создание машинной базы данных —
# https://github.com/msgpack/msgpack-python/blob/main/README.md
@dataclass
class GitlabDiscordBinding:
"""Данные, необходимые для интеграции Дискорд Канала и Гитлаб Проекта."""
discord_user_gitlab_token: str # Персональный токен Дискорд Пользователя для ГитЛаба
gitlab_project_url: str # URL ГитЛаб Проекта для которого подходит токен
discord_channel_id: int # Идентификационный номер Дискорд Канала для работы с проектом в ГитЛабе
discord_user_id: int # Идентификационный номер Дискорд Пользователя
# def get_project_id(self):
def get_project_host_url(self):
""" Слишком простой метод для реализации.
Используйте `URL.host` из `yarl`. """
return False
@dataclass
class GitlabDiscordDatabase:
""" Методы для работы со списком значений «`GitlabDiscordBinding`». """
gitlab_discord_bindings: list[GitlabDiscordBinding] = field(default_factory = lambda: [GitlabDiscordBinding("0", "0", 0, 0)])
filename: str = "gitlab-discord.msgpack"
def save(self, filename: str = filename) -> bool:
""" Подготовка базы данных и сохранение её сериализации
файл с названием «`gitlab-discord.msgpack`» по умолчанию. """
def prepare(database: list[GitlabDiscordBinding]) -> list:
basic_list = list() # создание обычного объекта типа «список»
for binding in range(len(self.gitlab_discord_bindings)): # перевод в него объектов типа «GitlabDiscordBinding»
basic_list.append([
self.gitlab_discord_bindings[binding].discord_user_gitlab_token,
self.gitlab_discord_bindings[binding].gitlab_project_url,
self.gitlab_discord_bindings[binding].discord_channel_id,
self.gitlab_discord_bindings[binding].discord_user_id])
return basic_list
try:
file = open(filename, "wb")
serialization = packb(prepare(self.gitlab_discord_bindings))
file.write(serialization) # type: ignore
return True
except:
return False
def retrieve(self, filename: str = filename) -> bool:
""" Установление значений из сериализованного файла
базы данных в с названием «gitlab-discord.msgpack» по умолчанию. """
def prepare(basic_list: list) -> list[GitlabDiscordBinding]:
database = list()
for element in range(len(basic_list)):
database.append(GitlabDiscordBinding(
discord_user_gitlab_token = basic_list[element][0],
gitlab_project_url = basic_list[element][1],
discord_channel_id = basic_list[element][2],
discord_user_id = basic_list[element][3]
))
return database
try:
file = open(filename, "rb")
content = file.read()
basic_list = unpackb(content)
self.gitlab_discord_bindings = prepare(basic_list)
return True
except:
return False