removed SQLAlchemy ORM stuff
This commit is contained in:
1 parent
6dcb020bb5
commit
e6d3f5c7b7
5 files changed
+60
-85
No files matched your search
+32
-85
@@ -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))
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
select
|
||||||
|
threads.name,
|
||||||
|
threads.forum
|
||||||
|
threads.id
|
||||||
|
from threads
|
||||||
|
where threads.forum_id = ?
|
||||||
|
;
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
select
|
||||||
|
users.id,
|
||||||
|
users.name,
|
||||||
|
users.passhash
|
||||||
|
from users
|
||||||
|
where users.name = ?
|
||||||
|
;
|
||||||
@@ -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 = ?
|
||||||
|
;
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
insert into messages (
|
||||||
|
user,
|
||||||
|
thread,
|
||||||
|
content,
|
||||||
|
time
|
||||||
|
) values (?, ?, ?, ?)
|
||||||
|
;
|
||||||
Reference in new issue
Block a user