removed SQLAlchemy ORM stuff

This commit is contained in:
0x01FE committed 2025-07-09 16:06:05 -05:00
1 parent 6dcb020bb5
commit e6d3f5c7b7
5 files changed
+60 -85

No files matched your search

+32 -85
View File
@@ -5,10 +5,6 @@ import dataclasses
import argon2 import argon2
import flask_login import flask_login
from sqlalchemy import create_engine, Column, Integer, ForeignKey, Text, select
from sqlalchemy.orm import sessionmaker, DeclarativeBase
from sqlalchemy.exc import SQLAlchemyError
import mgU import mgU
DATABASE = "./main2.db" DATABASE = "./main2.db"
@@ -41,41 +37,6 @@ class Opener():
self.con.commit() self.con.commit()
self.con.close() self.con.close()
# orm garbage
class Base(DeclarativeBase):
pass
class MessageORM(Base):
__tablename__ = "messages"
id = Column(Integer, primary_key=True, autoincrement=True)
user = Column(Integer, ForeignKey("users.id"), nullable=False)
thread = Column(Integer, ForeignKey("threads.id"), nullable=False)
content = Column(Text, nullable=False)
time = Column(Integer, nullable=False)
class UserORM(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(Text, nullable=False, unique=True)
passhash = Column(Text, nullable=False)
class ForumORM(Base):
__tablename__ = "forums"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(Text, nullable=False)
class UserForumsORM(Base):
__tablename__ = "user_forums"
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True, nullable=False)
forum_id = Column(Integer, ForeignKey("forums.id"), primary_key=True, nullable=False)
class ThreadORM(Base):
__tablename__ = "threads"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(Text, nullable=False)
forum = Column(Integer, ForeignKey("forums.id"), nullable=False)
# Raw SQL DTOs # Raw SQL DTOs
@dataclasses.dataclass @dataclasses.dataclass
@@ -91,22 +52,19 @@ class MessageDTO:
thread_id: int thread_id: int
id: int | None = None id: int | None = None
engine = create_engine(f"sqlite:///{DATABASE}", echo=False, future=True) def insert_message(message: mgU.Message) -> None:
SessionLocal = sessionmaker(bind=engine)
def insert_message(message: MessageORM) -> None:
""" """
Insert a new message (from mgU.Message dataclass) and return a new mgU.Message with id, or None on failure. Insert a new message (from mgU.Message dataclass) and return a new mgU.Message with id, or None on failure.
""" """
session = SessionLocal() with Opener() as (conn, cur):
try: q = load_query("insert_message")
session.add(message) cur.execute(q, [
session.commit() message.user,
except SQLAlchemyError: message.thread,
session.rollback() message.content,
return None message.time
finally: ])
session.close()
def get_messages_by_thread(thread_id: int) -> list[mgU.Message]: def get_messages_by_thread(thread_id: int) -> list[mgU.Message]:
""" """
@@ -132,62 +90,51 @@ def get_messages_by_thread(thread_id: int) -> list[mgU.Message]:
] ]
def get_user_forums(user_id: int) -> list[mgU.Forum]: def get_user_forums(user_id: int) -> list[mgU.Forum]:
session = SessionLocal() q = load_query("get_user_forums")
try: with Opener() as (conn, cur):
q = ( cur.execute(q, [user_id])
select(ForumORM.id, ForumORM.name) results = cur.fetchall()
.join_from(ForumORM, UserForumsORM)
.where(UserForumsORM.user_id == user_id)
)
results = session.execute(q)
return [ return [
mgU.Forum( mgU.Forum(
name=forum.name, name=forum[0],
id=forum.id id=forum[1]
) )
for forum in results for forum in results
] ]
finally:
session.close()
def get_forum_threads(forum_id: int) -> list[mgU.Thread]: def get_forum_threads(forum_id: int) -> list[mgU.Thread]:
session = SessionLocal() q = load_query("get_forum_threads")
try: with Opener() as (conn, cur):
q = ( cur.execute(q, [forum_id])
select(ThreadORM.id, ThreadORM.name, ThreadORM.forum) results = cur.fetchall()
.where(ThreadORM.forum == forum_id)
)
results = session.execute(q)
return [ return [
mgU.Thread( mgU.Thread(
name=thread.name, name=thread[0],
forum=thread.forum, forum=thread[1],
id=thread.id id=thread[2]
) )
for thread in results for thread in results
] ]
finally:
session.close()
# For flask_login # For flask_login
def get_user(username: str, api_key: str) -> User | None: def get_user(username: str, api_key: str) -> User | None:
session = SessionLocal() q = load_query("get_user_passhash")
try: with Opener() as (conn, cur):
results = session.query(UserORM).where(UserORM.name == username) cur.execute(q)
finally: results = cur.fetchall()
session.close()
if not results: if not results:
return None return None
user_row = results[0] row = results[0]
user_id, user_name, passhash = row[0], row[1], row[2]
try: try:
ph.verify(user_row.passhash, api_key) ph.verify(passhash, api_key)
except argon2.exceptions.VerifyMismatchError: except argon2.exceptions.VerifyMismatchError:
return None return None
return User(str(user_row.id), str(user_row.name)) return User(str(user_id), str(user_name))
+7
View File
@@ -0,0 +1,7 @@
select
threads.name,
threads.forum
threads.id
from threads
where threads.forum_id = ?
;
+7
View File
@@ -0,0 +1,7 @@
select
users.id,
users.name,
users.passhash
from users
where users.name = ?
;
+7
View File
@@ -0,0 +1,7 @@
select
forum.name,
forum.id
from user_forums
inner join forums on user_forums.forum_id = forums.id
where user_forums.user_id = ?
;
+7
View File
@@ -0,0 +1,7 @@
insert into messages (
user,
thread,
content,
time
) values (?, ?, ?, ?)
;