diff --git a/Dockerfile b/Dockerfile index 13a32a2..2a4b039 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,18 @@ FROM python:3.12.3-slim -# install dependencies for mysqlclient -# RUN apt-get update && apt-get -y upgrade && apt-get -y install python3-dev default-libmysqlclient-dev build-essential +RUN apt-get update && apt-get -y upgrade && apt-get -y install sqlite3 WORKDIR /home -COPY classes classes/ -COPY cogs cogs/ -COPY utilities utilities/ + COPY main.py main.py COPY pyproject.toml pyproject.toml +COPY classes classes/ +COPY cogs cogs/ +COPY database_setup database_setup/ +COPY utilities utilities/ + RUN pip install --upgrade pip && pip install poetry && poetry export -f requirements.txt --output requirements.txt && pip install -r requirements.txt -# remove build deps that aren't needed to run -# RUN apt-get -y remove python3-dev build-essential && apt-get -y autoremove - CMD ["python3", "./main.py"] \ No newline at end of file diff --git a/classes/submission.py b/classes/submission.py index b349bc4..da51795 100644 --- a/classes/submission.py +++ b/classes/submission.py @@ -9,7 +9,7 @@ from sqlalchemy import select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Category, CategoryGroup, engine +from database_setup.sql_data_classes import Category, CategoryGroup, engine class SubmissionState(Enum): diff --git a/cogs/commands/create.py b/cogs/commands/create.py index 8f2d58c..fbec2fe 100644 --- a/cogs/commands/create.py +++ b/cogs/commands/create.py @@ -9,7 +9,7 @@ from sqlalchemy.orm import Session # pylint: disable=import-error from cogs.submission.submission_views import SubmissionCreateButton -from utilities.sql_data_classes import Category, CategoryGroup, engine +from database_setup.sql_data_classes import Category, CategoryGroup, engine from utilities.utils import MAX_LINE_LENGTH, autofill_groups, send_highscore_message diff --git a/cogs/commands/delete.py b/cogs/commands/delete.py index 1757a6d..4c2a9dc 100644 --- a/cogs/commands/delete.py +++ b/cogs/commands/delete.py @@ -8,7 +8,7 @@ from sqlalchemy import distinct, select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Category, CategoryGroup, Score, engine +from database_setup.sql_data_classes import Category, CategoryGroup, Score, engine from utilities.utils import ( autofill_categories, autofill_groups, diff --git a/cogs/commands/refresh.py b/cogs/commands/refresh.py index f7d3a91..811513b 100644 --- a/cogs/commands/refresh.py +++ b/cogs/commands/refresh.py @@ -9,7 +9,7 @@ from sqlalchemy.orm import Session # pylint: disable=import-error from cogs.submission.submission_views import SubmissionCreateButton -from utilities.sql_data_classes import CategoryGroup, engine +from database_setup.sql_data_classes import CategoryGroup, engine from utilities.utils import autofill_groups, send_highscore_message diff --git a/cogs/commands/set.py b/cogs/commands/set.py index c820daa..c6b03d4 100644 --- a/cogs/commands/set.py +++ b/cogs/commands/set.py @@ -8,7 +8,7 @@ from sqlalchemy import select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import CategoryGroup, Guild, engine +from database_setup.sql_data_classes import CategoryGroup, Guild, engine from utilities.utils import MAX_LINE_LENGTH, autofill_groups diff --git a/cogs/commands/update.py b/cogs/commands/update.py index 2f8ac0a..4c1c853 100644 --- a/cogs/commands/update.py +++ b/cogs/commands/update.py @@ -8,7 +8,7 @@ from sqlalchemy import select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Guild, engine +from database_setup.sql_data_classes import Guild, engine from utilities.utils import autofill_users_in_guild from .views.update_username_verify import UpdateUsernameVerifyView diff --git a/cogs/commands/view.py b/cogs/commands/view.py index 497956d..32d5dcb 100644 --- a/cogs/commands/view.py +++ b/cogs/commands/view.py @@ -9,7 +9,7 @@ from sqlalchemy import select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Category, CategoryGroup, Score, engine +from database_setup.sql_data_classes import Category, CategoryGroup, Score, engine from utilities.utils import MAX_LINE_LENGTH, autofill_categories, autofill_groups, format_score_string diff --git a/cogs/commands/views/delete_confirm.py b/cogs/commands/views/delete_confirm.py index 095c449..e950441 100644 --- a/cogs/commands/views/delete_confirm.py +++ b/cogs/commands/views/delete_confirm.py @@ -7,7 +7,7 @@ from sqlalchemy import delete, select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Category, CategoryGroup, engine +from database_setup.sql_data_classes import Category, CategoryGroup, engine from utilities.utils import send_highscore_message diff --git a/cogs/commands/views/update_username_verify.py b/cogs/commands/views/update_username_verify.py index 7af7cb6..0e494d7 100644 --- a/cogs/commands/views/update_username_verify.py +++ b/cogs/commands/views/update_username_verify.py @@ -5,7 +5,7 @@ from sqlalchemy import distinct, exc, select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Category, CategoryGroup, Score, engine +from database_setup.sql_data_classes import Category, CategoryGroup, Score, engine from utilities.utils import send_highscore_message diff --git a/cogs/guild_listener/__init__.py b/cogs/guild_listener/__init__.py index f51f447..6838c28 100644 --- a/cogs/guild_listener/__init__.py +++ b/cogs/guild_listener/__init__.py @@ -8,7 +8,7 @@ from sqlalchemy import select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Guild, engine +from database_setup.sql_data_classes import Guild, engine class GuildListener(commands.Cog, name="Guild Listener"): diff --git a/cogs/loops/guild_data.py b/cogs/loops/guild_data.py index 98fd77b..0c6d227 100644 --- a/cogs/loops/guild_data.py +++ b/cogs/loops/guild_data.py @@ -7,7 +7,7 @@ from sqlalchemy import select from sqlalchemy.orm import Session # pylint: disable=import-error -from utilities.sql_data_classes import Guild, engine +from database_setup.sql_data_classes import Guild, engine class GuildData(commands.Cog, name="Guild Data"): diff --git a/cogs/message_listener/__init__.py b/cogs/message_listener/__init__.py index 1abb3b9..18c569d 100644 --- a/cogs/message_listener/__init__.py +++ b/cogs/message_listener/__init__.py @@ -13,7 +13,7 @@ from sqlalchemy.orm import Session # pylint: disable=import-error from classes.submission import SubmissionState from main import submission_objects -from utilities.sql_data_classes import Category, Guild, engine +from database_setup.sql_data_classes import Category, Guild, engine class SubmissionListener(commands.Cog, name="Message Listener"): diff --git a/cogs/submission/submission_views.py b/cogs/submission/submission_views.py index 28c5bff..3c38470 100644 --- a/cogs/submission/submission_views.py +++ b/cogs/submission/submission_views.py @@ -8,7 +8,7 @@ from sqlalchemy.orm import Session, aliased # pylint: disable=import-error from classes.submission import Submission, SubmissionState from main import submission_objects -from utilities.sql_data_classes import Category, CategoryGroup, Guild, engine +from database_setup.sql_data_classes import Category, CategoryGroup, Guild, engine from .verification_view import VerificationView diff --git a/database_setup/create_database.py b/database_setup/create_database.py new file mode 100644 index 0000000..612f614 --- /dev/null +++ b/database_setup/create_database.py @@ -0,0 +1,13 @@ +"""Small script to create the database if it doesn't already exist.""" + +import sqlite3 +from pathlib import Path + +if not Path("database/dakiny.db").exists(): + with sqlite3.connect("database/dakiny.db") as con: + cur = con.cursor() + + with Path("database_setup/database.sql", encoding="utf-8").open() as file: + database_script = file.read() + cur.executescript(database_script) + con.commit() diff --git a/database_setup/pyproject.toml b/database_setup/pyproject.toml new file mode 100644 index 0000000..e3c5aa1 --- /dev/null +++ b/database_setup/pyproject.toml @@ -0,0 +1,7 @@ +[tool.ruff] +# Extend the `pyproject.toml` file in the parent directory... +extend = "../pyproject.toml" + +[tool.ruff.lint] +# ignore implicit-namespace-package in this directory. +ignore = ["INP001"] diff --git a/utilities/sql_data_classes.py b/database_setup/sql_data_classes.py similarity index 83% rename from utilities/sql_data_classes.py rename to database_setup/sql_data_classes.py index 4d2c0d9..0cb27a1 100644 --- a/utilities/sql_data_classes.py +++ b/database_setup/sql_data_classes.py @@ -1,11 +1,7 @@ -""" -Simple file to set up the sqlalchemy connection to database. -""" +"""Simple file to set up the sqlalchemy connection to database.""" from sqlalchemy import create_engine from sqlalchemy.ext.automap import automap_base - -# pylint: disable=import-error from utilities import config # connect with sql alchemy and autoload schema diff --git a/utilities/utils.py b/utilities/utils.py index 4207ecc..6595ad6 100644 --- a/utilities/utils.py +++ b/utilities/utils.py @@ -11,7 +11,7 @@ from sqlalchemy import distinct, select from sqlalchemy.orm import Session, aliased # pylint: disable=import-error -from utilities.sql_data_classes import Category, CategoryGroup, Guild, Score, engine +from database_setup.sql_data_classes import Category, CategoryGroup, Guild, Score, engine MAX_LINE_LENGTH = 142