From 7b0632bdc7d260d0333c5670b67efe0bc6a1c418 Mon Sep 17 00:00:00 2001 From: TriHard Date: Thu, 15 Feb 2024 06:17:23 -0700 Subject: [PATCH] Column -> mapped_column --- files/classes/alts.py | 11 +- files/classes/award.py | 22 +-- files/classes/badges.py | 22 +-- files/classes/casino_game.py | 22 +-- files/classes/clients.py | 26 ++-- files/classes/comment.py | 82 +++++----- files/classes/domains.py | 8 +- files/classes/emoji.py | 19 +-- files/classes/follows.py | 10 +- files/classes/group.py | 13 +- files/classes/group_membership.py | 14 +- files/classes/hats.py | 26 ++-- files/classes/hole.py | 27 ++-- files/classes/hole_logs.py | 22 +-- files/classes/hole_relationship.py | 12 +- files/classes/ip_logs.py | 12 +- files/classes/lottery.py | 17 ++- files/classes/media.py | 13 +- files/classes/mod_logs.py | 20 +-- files/classes/notifications.py | 12 +- files/classes/orgy.py | 17 ++- files/classes/polls.py | 40 ++--- files/classes/post.py | 94 ++++++------ files/classes/push_subscriptions.py | 9 +- files/classes/reports.py | 20 +-- files/classes/saves.py | 16 +- files/classes/subscriptions.py | 10 +- files/classes/transactions.py | 14 +- files/classes/user.py | 226 ++++++++++++++-------------- files/classes/userblock.py | 10 +- files/classes/usermute.py | 10 +- files/classes/views.py | 12 +- files/classes/votes.py | 28 ++-- 33 files changed, 460 insertions(+), 456 deletions(-) diff --git a/files/classes/alts.py b/files/classes/alts.py index 2cff4b7c2..28f853d63 100644 --- a/files/classes/alts.py +++ b/files/classes/alts.py @@ -1,6 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -8,10 +9,10 @@ from files.classes import Base class Alt(Base): __tablename__ = "alts" - user1 = Column(Integer, ForeignKey("users.id"), primary_key=True) - user2 = Column(Integer, ForeignKey("users.id"), primary_key=True) - is_manual = Column(Boolean, default=False) - created_utc = Column(Integer) + user1: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + user2: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + is_manual: Mapped[bool] = mapped_column(default=False) + created_utc: Mapped[int] def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) diff --git a/files/classes/award.py b/files/classes/award.py index c7538fadd..8f658226d 100644 --- a/files/classes/award.py +++ b/files/classes/award.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -12,15 +12,15 @@ from files.helpers.lazy import lazy class AwardRelationship(Base): __tablename__ = "award_relationships" - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - post_id = Column(Integer, ForeignKey("posts.id")) - comment_id = Column(Integer, ForeignKey("comments.id")) - kind = Column(String) - awarded_utc = Column(Integer) - created_utc = Column(Integer) - price_paid = Column(Integer, default = 0) - note = Column(String) + id: Mapped[int] = mapped_column(primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + post_id: Mapped[int] = mapped_column(ForeignKey("posts.id")) + comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id")) + kind: Mapped[str] + awarded_utc: Mapped[int] + created_utc: Mapped[int] + price_paid: Mapped[int] = mapped_column(default = 0) + note: Mapped[str] user = relationship("User", primaryjoin="AwardRelationship.user_id==User.id", back_populates="awards") post = relationship("Post", primaryjoin="AwardRelationship.post_id==Post.id", back_populates="awards") diff --git a/files/classes/badges.py b/files/classes/badges.py index c6230c645..4bce446a4 100644 --- a/files/classes/badges.py +++ b/files/classes/badges.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -11,10 +11,10 @@ from files.helpers.lazy import lazy class BadgeDef(Base): __tablename__ = "badge_defs" - id = Column(Integer, primary_key=True, autoincrement=True) - name = Column(String) - description = Column(String) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) + name: Mapped[str] + description: Mapped[str] + created_utc: Mapped[int] def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) @@ -32,11 +32,11 @@ class Badge(Base): __tablename__ = "badges" - user_id = Column(Integer, ForeignKey('users.id'), primary_key=True) - badge_id = Column(Integer, ForeignKey('badge_defs.id'), primary_key=True) - description = Column(String) - url = Column(String) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey('users.id'), primary_key=True) + badge_id: Mapped[int] = mapped_column(ForeignKey('badge_defs.id'), primary_key=True) + description: Mapped[str] + url: Mapped[str] + created_utc: Mapped[int] user = relationship("User", back_populates="badges") badge = relationship("BadgeDef", primaryjoin="Badge.badge_id == BadgeDef.id", lazy="joined", innerjoin=True) diff --git a/files/classes/casino_game.py b/files/classes/casino_game.py index 8864204ea..23380d0e5 100644 --- a/files/classes/casino_game.py +++ b/files/classes/casino_game.py @@ -1,8 +1,8 @@ import json import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -13,15 +13,15 @@ CASINO_GAME_KINDS = ['blackjack', 'slots', 'roulette'] class CasinoGame(Base): __tablename__ = "casino_games" - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - created_utc = Column(Integer) - active = Column(Boolean, default=True) - currency = Column(String) - wager = Column(Integer) - winnings = Column(Integer) - kind = Column(String) - game_state = Column(JSON) + id: Mapped[int] = mapped_column(primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + created_utc: Mapped[int] + active: Mapped[bool] = mapped_column(default=True) + currency: Mapped[str] + wager: Mapped[int] + winnings: Mapped[int] + kind: Mapped[str] + game_state: Mapped[str] = mapped_column(JSON) user = relationship("User") diff --git a/files/classes/clients.py b/files/classes/clients.py index f4bebecfb..8034cd697 100644 --- a/files/classes/clients.py +++ b/files/classes/clients.py @@ -1,8 +1,8 @@ import time from flask import g -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship, load_only +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, load_only, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -15,13 +15,13 @@ from .post import Post class OauthApp(Base): __tablename__ = "oauth_apps" - id = Column(Integer, primary_key=True) - client_id = Column(String) - app_name = Column(String) - redirect_uri = Column(String) - description = Column(String) - author_id = Column(Integer, ForeignKey("users.id")) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + client_id: Mapped[str] + app_name: Mapped[str] + redirect_uri: Mapped[str] + description: Mapped[str] + author_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + created_utc: Mapped[int] author = relationship("User", back_populates="apps") @@ -51,10 +51,10 @@ class OauthApp(Base): class ClientAuth(Base): __tablename__ = "client_auths" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - oauth_client = Column(Integer, ForeignKey("oauth_apps.id"), primary_key=True) - access_token = Column(String) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + oauth_client: Mapped[int] = mapped_column(ForeignKey("oauth_apps.id"), primary_key=True) + access_token: Mapped[str] + created_utc: Mapped[int] user = relationship("User") application = relationship("OauthApp") diff --git a/files/classes/comment.py b/files/classes/comment.py index 18b775815..a275f04c4 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -4,9 +4,9 @@ from random import randint from urllib.parse import parse_qs, urlencode, urlparse from flask import g -from sqlalchemy import Column, ForeignKey +from sqlalchemy import ForeignKey from sqlalchemy.dialects.postgresql import TSVECTOR -from sqlalchemy.orm import relationship +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.schema import FetchedValue from sqlalchemy.sql.sqltypes import * @@ -172,47 +172,47 @@ def add_options(self, body, v): class Comment(Base): __tablename__ = "comments" - id = Column(Integer, primary_key=True) - author_id = Column(Integer, ForeignKey("users.id")) - parent_post = Column(Integer, ForeignKey("posts.id")) - wall_user_id = Column(Integer, ForeignKey("users.id")) - created_utc = Column(Integer) - edited_utc = Column(Integer, default=0) - is_banned = Column(Boolean, default=False) - ghost = Column(Boolean, default=False) - bannedfor = Column(String) - chuddedfor = Column(String) - distinguished = Column(Boolean, default=False) - deleted_utc = Column(Integer, default=0) - is_approved = Column(Integer, ForeignKey("users.id")) - level = Column(Integer, default=1) - parent_comment_id = Column(Integer, ForeignKey("comments.id")) - top_comment_id = Column(Integer) - is_bot = Column(Boolean, default=False) - stickied = Column(String) - stickied_utc = Column(Integer) - num_of_pinned_children = Column(Integer, default=0) - sentto = Column(Integer, ForeignKey("users.id")) - app_id = Column(Integer, ForeignKey("oauth_apps.id")) - upvotes = Column(Integer, default=1) - downvotes = Column(Integer, default=0) - realupvotes = Column(Integer, default=1) - body = Column(String) - body_html = Column(String) - body_ts = Column(TSVECTOR(), server_default=FetchedValue()) - ban_reason = Column(String) - treasure_amount = Column(String) - slots_result = Column(String) - ping_cost = Column(Integer, default=0) - blackjack_result = Column(String) - casino_game_id = Column(Integer, ForeignKey("casino_games.id")) - chudded = Column(Boolean, default=False) - rainbowed = Column(Boolean, default=False) - queened = Column(Boolean, default=False) - sharpened = Column(Boolean, default=False) + id: Mapped[int] = mapped_column(primary_key=True) + author_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + parent_post: Mapped[int] = mapped_column(ForeignKey("posts.id")) + wall_user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + created_utc: Mapped[int] + edited_utc: Mapped[int] = mapped_column(default=0) + is_banned: Mapped[bool] = mapped_column(default=False) + ghost: Mapped[bool] = mapped_column(default=False) + bannedfor: Mapped[str] + chuddedfor: Mapped[str] + distinguished: Mapped[bool] = mapped_column(default=False) + deleted_utc: Mapped[int] = mapped_column(default=0) + is_approved: Mapped[int] = mapped_column(ForeignKey("users.id")) + level: Mapped[int] = mapped_column(default=1) + parent_comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id")) + top_comment_id: Mapped[int] + is_bot: Mapped[bool] = mapped_column(default=False) + stickied: Mapped[str] + stickied_utc: Mapped[int] + num_of_pinned_children: Mapped[int] = mapped_column(default=0) + sentto: Mapped[int] = mapped_column(ForeignKey("users.id")) + app_id: Mapped[int] = mapped_column(ForeignKey("oauth_apps.id")) + upvotes: Mapped[int] = mapped_column(default=1) + downvotes: Mapped[int] = mapped_column(default=0) + realupvotes: Mapped[int] = mapped_column(default=1) + body: Mapped[str] + body_html: Mapped[str] + body_ts: Mapped[str] = mapped_column(TSVECTOR(), server_default=FetchedValue()) + ban_reason: Mapped[str] + treasure_amount: Mapped[str] + slots_result: Mapped[str] + ping_cost: Mapped[int] = mapped_column(default=0) + blackjack_result: Mapped[str] + casino_game_id: Mapped[int] = mapped_column(ForeignKey("casino_games.id")) + chudded: Mapped[bool] = mapped_column(default=False) + rainbowed: Mapped[bool] = mapped_column(default=False) + queened: Mapped[bool] = mapped_column(default=False) + sharpened: Mapped[bool] = mapped_column(default=False) if FEATURES['NSFW_MARKING']: - nsfw = Column(Boolean, default=False) + nsfw: Mapped[bool] = mapped_column(default=False) else: nsfw = False diff --git a/files/classes/domains.py b/files/classes/domains.py index 4c6bf820c..36d27ef0a 100644 --- a/files/classes/domains.py +++ b/files/classes/domains.py @@ -1,15 +1,15 @@ import time -from sqlalchemy import Column +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base class BannedDomain(Base): __tablename__ = "banneddomains" - domain = Column(String, primary_key=True) - reason = Column(String) - created_utc = Column(Integer) + domain: Mapped[str] = mapped_column(primary_key=True) + reason: Mapped[str] + created_utc: Mapped[int] def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) diff --git a/files/classes/emoji.py b/files/classes/emoji.py index 1b43d5719..7b1c1a8db 100644 --- a/files/classes/emoji.py +++ b/files/classes/emoji.py @@ -1,6 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -8,14 +9,14 @@ from files.classes import Base class Emoji(Base): __tablename__ = "emojis" - name = Column(String, primary_key=True) - kind = Column(String) - author_id = Column(Integer, ForeignKey("users.id")) - tags = Column(String) - count = Column(Integer, default=0) - submitter_id = Column(Integer, ForeignKey("users.id")) - created_utc = Column(Integer) - nsfw = Column(Boolean, default=False) + name: Mapped[str] = mapped_column(primary_key=True) + kind: Mapped[str] + author_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + tags: Mapped[str] + count: Mapped[int] = mapped_column(default=0) + submitter_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + created_utc: Mapped[int] + nsfw: Mapped[bool] = mapped_column(default=False) def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) diff --git a/files/classes/follows.py b/files/classes/follows.py index 67e253eec..0229a86bb 100644 --- a/files/classes/follows.py +++ b/files/classes/follows.py @@ -1,16 +1,16 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base class Follow(Base): __tablename__ = "follows" - target_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - created_utc = Column(Integer) + target_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + created_utc: Mapped[int] user = relationship("User", uselist=False, primaryjoin="User.id==Follow.user_id", back_populates="following") target = relationship("User", uselist=False, primaryjoin="User.id==Follow.target_id", back_populates="followers") diff --git a/files/classes/group.py b/files/classes/group.py index 525e607f2..cae7a3768 100644 --- a/files/classes/group.py +++ b/files/classes/group.py @@ -1,7 +1,6 @@ import time -from sqlalchemy import Column -from sqlalchemy.orm import relationship +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.types import Integer from files.classes import Base @@ -12,11 +11,11 @@ from .group_membership import * class Group(Base): __tablename__ = "groups" - name = Column(String, primary_key=True) - created_utc = Column(Integer) - owner_id = Column(Integer, ForeignKey("users.id")) - description = Column(String) - description_html = Column(String) + name: Mapped[str] = mapped_column(primary_key=True) + created_utc: Mapped[int] + owner_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + description: Mapped[str] + description_html: Mapped[str] memberships = relationship("GroupMembership", primaryjoin="GroupMembership.group_name==Group.name", order_by="GroupMembership.approved_utc") owner = relationship("User", primaryjoin="Group.owner_id==User.id") diff --git a/files/classes/group_membership.py b/files/classes/group_membership.py index e0adf493d..733158be1 100644 --- a/files/classes/group_membership.py +++ b/files/classes/group_membership.py @@ -1,18 +1,18 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.types import Integer, String, Boolean from files.classes import Base class GroupMembership(Base): __tablename__ = "group_memberships" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - group_name = Column(String, ForeignKey("groups.name"), primary_key=True) - created_utc = Column(Integer) - approved_utc = Column(Integer) - is_mod = Column(Boolean, default=False) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + group_name: Mapped[str] = mapped_column(ForeignKey("groups.name"), primary_key=True) + created_utc: Mapped[int] + approved_utc: Mapped[int] + is_mod: Mapped[bool] = mapped_column(default=False) user = relationship("User", uselist=False) diff --git a/files/classes/hats.py b/files/classes/hats.py index 746ffc73f..2e7bd9f42 100644 --- a/files/classes/hats.py +++ b/files/classes/hats.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from flask import g @@ -12,13 +12,13 @@ from files.helpers.slurs_and_profanities import censor_slurs_profanities class HatDef(Base): __tablename__ = "hat_defs" - id = Column(Integer, primary_key=True) - name = Column(String) - description = Column(String) - author_id = Column(Integer, ForeignKey('users.id')) - price = Column(Integer) - submitter_id = Column(Integer, ForeignKey("users.id")) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] + description: Mapped[str] + author_id: Mapped[int] = mapped_column(ForeignKey('users.id')) + price: Mapped[int] + submitter_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + created_utc: Mapped[int] author = relationship("User", primaryjoin="HatDef.author_id == User.id", back_populates="designed_hats") submitter = relationship("User", primaryjoin="HatDef.submitter_id == User.id") @@ -48,10 +48,10 @@ class HatDef(Base): class Hat(Base): __tablename__ = "hats" - user_id = Column(Integer, ForeignKey('users.id'), primary_key=True) - hat_id = Column(Integer, ForeignKey('hat_defs.id'), primary_key=True) - equipped = Column(Boolean, default=False) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey('users.id'), primary_key=True) + hat_id: Mapped[int] = mapped_column(ForeignKey('hat_defs.id'), primary_key=True) + equipped: Mapped[bool] = mapped_column(default=False) + created_utc: Mapped[int] hat_def = relationship("HatDef") owners = relationship("User", back_populates="owned_hats") diff --git a/files/classes/hole.py b/files/classes/hole.py index b4cc4200c..3e9ae7958 100644 --- a/files/classes/hole.py +++ b/files/classes/hole.py @@ -1,10 +1,9 @@ import random import time +from typing import Annotated -from sqlalchemy import Column from sqlalchemy.ext.mutable import MutableList -from sqlalchemy.orm import relationship, deferred -from sqlalchemy.types import * +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.dialects.postgresql import ARRAY from files.classes import Base @@ -15,20 +14,20 @@ from .hole_relationship import * class Hole(Base): __tablename__ = "holes" - name = Column(String, primary_key=True) - sidebar = Column(String) - sidebar_html = Column(String) - sidebarurls = Column(MutableList.as_mutable(ARRAY(String)), default=MutableList([])) - bannerurls = Column(MutableList.as_mutable(ARRAY(String)), default=MutableList([])) - marseyurl = Column(String) - css = deferred(Column(String)) - stealth = Column(Boolean, default=False) - public_use = Column(Boolean, default=False) - created_utc = Column(Integer) + name: Mapped[str] = mapped_column(primary_key=True) + sidebar: Mapped[str] + sidebar_html: Mapped[str] + sidebarurls: Mapped[list[str]] = mapped_column(MutableList.as_mutable(ARRAY(String)), default=MutableList([])) + bannerurls: Mapped[list[str]] = mapped_column(MutableList.as_mutable(ARRAY(String)), default=MutableList([])) + marseyurl: Mapped[str] + css: Mapped[str] = mapped_column(deferred=True) + stealth: Mapped[bool] = mapped_column(default=False) + public_use: Mapped[bool] = mapped_column(default=False) + created_utc: Mapped[int] if SITE_NAME == 'WPD': snappy_quotes = None else: - snappy_quotes = deferred(Column(String)) + snappy_quotes: Mapped[Annotated[str, HOLE_SNAPPY_QUOTES_LENGTH]] = mapped_column(deferred=True) blocks = relationship("HoleBlock", primaryjoin="HoleBlock.hole==Hole.name") followers = relationship("HoleFollow", primaryjoin="HoleFollow.hole==Hole.name") diff --git a/files/classes/hole_logs.py b/files/classes/hole_logs.py index aa45dc484..1c7bf7233 100644 --- a/files/classes/hole_logs.py +++ b/files/classes/hole_logs.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from flask import g @@ -13,15 +13,15 @@ from files.helpers.sorting_and_time import make_age_string class HoleAction(Base): __tablename__ = "hole_actions" - id = Column(Integer, primary_key=True) - hole = Column(String, ForeignKey("holes.name")) - user_id = Column(Integer, ForeignKey("users.id")) - kind = Column(String) - target_user_id = Column(Integer, ForeignKey("users.id")) - target_post_id = Column(Integer, ForeignKey("posts.id")) - target_comment_id = Column(Integer, ForeignKey("comments.id")) - _note = Column(String) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + hole: Mapped[str] = mapped_column(ForeignKey("holes.name")) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + kind: Mapped[str] + target_user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + target_post_id: Mapped[int] = mapped_column(ForeignKey("posts.id")) + target_comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id")) + _note: Mapped[str] + created_utc: Mapped[int] user = relationship("User", primaryjoin="User.id==HoleAction.user_id") target_user = relationship("User", primaryjoin="User.id==HoleAction.target_user_id") diff --git a/files/classes/hole_relationship.py b/files/classes/hole_relationship.py index a231ad862..07b70031f 100644 --- a/files/classes/hole_relationship.py +++ b/files/classes/hole_relationship.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, relationship, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -10,9 +10,9 @@ class HoleRelationship(Base): __tablename__ = NotImplemented __abstract__ = True - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - hole = Column(String, ForeignKey("holes.name"), primary_key=True) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + hole: Mapped[str] = mapped_column(ForeignKey("holes.name"), primary_key=True) + created_utc: Mapped[int] def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) @@ -35,5 +35,5 @@ class Mod(HoleRelationship): class Exile(HoleRelationship): __tablename__ = "exiles" - exiler_id = Column(Integer, ForeignKey("users.id")) + exiler_id: Mapped[int] = mapped_column(ForeignKey("users.id")) exiler = relationship("User", primaryjoin="User.id==Exile.exiler_id") diff --git a/files/classes/ip_logs.py b/files/classes/ip_logs.py index 3d6d3db37..d19941df0 100644 --- a/files/classes/ip_logs.py +++ b/files/classes/ip_logs.py @@ -1,17 +1,17 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base class IPLog(Base): __tablename__ = "ip_logs" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - ip = Column(String, primary_key=True) - created_utc = Column(Integer) - last_used = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + ip: Mapped[str] = mapped_column(primary_key=True) + created_utc: Mapped[int] + last_used: Mapped[int] user = relationship("User") diff --git a/files/classes/lottery.py b/files/classes/lottery.py index abde47b0b..794ea7617 100644 --- a/files/classes/lottery.py +++ b/files/classes/lottery.py @@ -1,6 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -10,13 +11,13 @@ from files.helpers.lazy import lazy class Lottery(Base): __tablename__ = "lotteries" - id = Column(Integer, primary_key=True) - is_active = Column(Boolean, default=False) - ends_at = Column(Integer) - prize = Column(Integer, default=0) - tickets_sold = Column(Integer, default=0) - winner_id = Column(Integer, ForeignKey("users.id")) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + is_active: Mapped[bool] = mapped_column(default=False) + ends_at: Mapped[int] + prize: Mapped[int] = mapped_column(default=0) + tickets_sold: Mapped[int] = mapped_column(default=0) + winner_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + created_utc: Mapped[int] def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) diff --git a/files/classes/media.py b/files/classes/media.py index 574c0a3c4..0e144ad4f 100644 --- a/files/classes/media.py +++ b/files/classes/media.py @@ -1,16 +1,17 @@ import time -from sqlalchemy import Column, ForeignKey +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base class Media(Base): __tablename__ = "media" - kind = Column(String, primary_key=True) - filename = Column(String, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - created_utc = Column(Integer) - size = Column(Integer) + kind: Mapped[str] = mapped_column(primary_key=True) + filename: Mapped[str] = mapped_column(primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + created_utc: Mapped[int] + size: Mapped[int] def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) diff --git a/files/classes/mod_logs.py b/files/classes/mod_logs.py index 94a009ad3..747fbe79b 100644 --- a/files/classes/mod_logs.py +++ b/files/classes/mod_logs.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from flask import g @@ -13,14 +13,14 @@ from files.helpers.sorting_and_time import make_age_string class ModAction(Base): __tablename__ = "modactions" - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - kind = Column(String) - target_user_id = Column(Integer, ForeignKey("users.id")) - target_post_id = Column(Integer, ForeignKey("posts.id")) - target_comment_id = Column(Integer, ForeignKey("comments.id")) - _note = Column(String) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + kind: Mapped[str] + target_user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + target_post_id: Mapped[int] = mapped_column(ForeignKey("posts.id")) + target_comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id")) + _note: Mapped[str] + created_utc: Mapped[int] user = relationship("User", primaryjoin="User.id==ModAction.user_id") target_user = relationship("User", primaryjoin="User.id==ModAction.target_user_id") diff --git a/files/classes/notifications.py b/files/classes/notifications.py index 5ad09c049..4e50e63b1 100644 --- a/files/classes/notifications.py +++ b/files/classes/notifications.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -9,10 +9,10 @@ from files.classes import Base class Notification(Base): __tablename__ = "notifications" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True) - read = Column(Boolean, default=False) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id"), primary_key=True) + read: Mapped[bool] = mapped_column(default=False) + created_utc: Mapped[int] comment = relationship("Comment") user = relationship("User") diff --git a/files/classes/orgy.py b/files/classes/orgy.py index 80bee5d2f..01708e643 100644 --- a/files/classes/orgy.py +++ b/files/classes/orgy.py @@ -2,7 +2,8 @@ import time from flask import g, abort import requests -from sqlalchemy import Column, or_ +from sqlalchemy import or_ +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -13,13 +14,13 @@ from files.helpers.config.const import * class Orgy(Base): __tablename__ = "orgies" - created_utc = Column(Integer, primary_key=True) - type = Column(String) - data = Column(String) - title = Column(String) - start_utc = Column(Integer) - end_utc = Column(Integer) - started = Column(Boolean, default=False) + created_utc: Mapped[int] = mapped_column(primary_key=True) + type: Mapped[str] + data: Mapped[str] + title: Mapped[str] + start_utc: Mapped[int] + end_utc: Mapped[int] + started: Mapped[bool] = mapped_column(default=False) def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) diff --git a/files/classes/polls.py b/files/classes/polls.py index 3b7923e1e..d0b297100 100644 --- a/files/classes/polls.py +++ b/files/classes/polls.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -10,11 +10,11 @@ from files.helpers.lazy import lazy class PostOption(Base): __tablename__ = "post_options" - id = Column(Integer, primary_key=True) - parent_id = Column(Integer, ForeignKey("posts.id")) - body_html = Column(Text) - exclusive = Column(Integer) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + parent_id: Mapped[int] = mapped_column(ForeignKey("posts.id")) + body_html: Mapped[str] = mapped_column(Text) + exclusive: Mapped[int] + created_utc: Mapped[int] votes = relationship("PostOptionVote") parent = relationship("Post", back_populates="options") @@ -40,10 +40,10 @@ class PostOptionVote(Base): __tablename__ = "post_option_votes" - option_id = Column(Integer, ForeignKey("post_options.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - created_utc = Column(Integer) - post_id = Column(Integer, ForeignKey("posts.id")) + option_id: Mapped[int] = mapped_column(ForeignKey("post_options.id"), primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + created_utc: Mapped[int] + post_id: Mapped[int] = mapped_column(ForeignKey("posts.id")) user = relationship("User") @@ -59,11 +59,11 @@ class CommentOption(Base): __tablename__ = "comment_options" - id = Column(Integer, primary_key=True) - parent_id = Column(Integer, ForeignKey("comments.id")) - body_html = Column(Text) - exclusive = Column(Integer) - created_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + parent_id: Mapped[int] = mapped_column(ForeignKey("comments.id")) + body_html: Mapped[str] = mapped_column(Text) + exclusive: Mapped[int] + created_utc: Mapped[int] votes = relationship("CommentOptionVote") parent = relationship("Comment", back_populates="options") @@ -89,10 +89,10 @@ class CommentOptionVote(Base): __tablename__ = "comment_option_votes" - option_id = Column(Integer, ForeignKey("comment_options.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - created_utc = Column(Integer) - comment_id = Column(Integer, ForeignKey("comments.id")) + option_id: Mapped[int] = mapped_column(ForeignKey("comment_options.id"), primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + created_utc: Mapped[int] + comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id")) user = relationship("User") diff --git a/files/classes/post.py b/files/classes/post.py index 5fc1b5a6d..af110938e 100644 --- a/files/classes/post.py +++ b/files/classes/post.py @@ -3,8 +3,8 @@ import time from urllib.parse import urlparse from flask import g -from sqlalchemy import Column, FetchedValue, ForeignKey -from sqlalchemy.orm import deferred, relationship +from sqlalchemy import FetchedValue, ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -25,57 +25,57 @@ from .saves import SaveRelationship class Post(Base): __tablename__ = "posts" - id = Column(Integer, primary_key=True) - author_id = Column(Integer, ForeignKey("users.id")) - edited_utc = Column(Integer, default=0) - created_utc = Column(Integer) - thumburl = Column(String) - posterurl = Column(String) - is_banned = Column(Boolean, default=False) - bannedfor = Column(String) - chuddedfor = Column(String) - ghost = Column(Boolean, default=False) - effortpost = Column(Boolean, default=False) - views = Column(Integer, default=0) - deleted_utc = Column(Integer, default=0) - distinguished = Column(Boolean, default=False) - stickied = Column(String) - stickied_utc = Column(Integer) - hole_pinned = Column(String) - hole = Column(String, ForeignKey("holes.name")) - is_pinned = Column(Boolean, default=False) - private = Column(Boolean, default=False) - comment_count = Column(Integer, default=0) - is_approved = Column(Integer, ForeignKey("users.id")) - is_bot = Column(Boolean, default=False) - upvotes = Column(Integer, default=1) - downvotes = Column(Integer, default=0) - realupvotes = Column(Integer, default=1) - app_id = Column(Integer, ForeignKey("oauth_apps.id")) - title = Column(String) - title_html = Column(String) - url = Column(String) - body = Column(String) - body_html = Column(String) - flair = Column(String) - ban_reason = Column(String) - embed = Column(String) - new = Column(Boolean) - notify = Column(Boolean) - chudded = Column(Boolean, default=False) - rainbowed = Column(Boolean, default=False) - queened = Column(Boolean, default=False) - sharpened = Column(Boolean, default=False) - ping_cost = Column(Integer, default=0) - bump_utc = Column(Integer) + id: Mapped[int] = mapped_column(primary_key=True) + author_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + edited_utc: Mapped[int] = mapped_column(default=0) + created_utc: Mapped[int] + thumburl: Mapped[str] + posterurl: Mapped[str] + is_banned: Mapped[bool] = mapped_column(default=False) + bannedfor: Mapped[str] + chuddedfor: Mapped[str] + ghost: Mapped[bool] = mapped_column(default=False) + effortpost: Mapped[bool] = mapped_column(default=False) + views: Mapped[int] = mapped_column(default=0) + deleted_utc: Mapped[int] = mapped_column(default=0) + distinguished: Mapped[bool] = mapped_column(default=False) + stickied: Mapped[str] + stickied_utc: Mapped[int] + hole_pinned: Mapped[str] + hole: Mapped[str] = mapped_column(ForeignKey("holes.name")) + is_pinned: Mapped[bool] = mapped_column(default=False) + private: Mapped[bool] = mapped_column(default=False) + comment_count: Mapped[int] = mapped_column(default=0) + is_approved: Mapped[int] = mapped_column(ForeignKey("users.id")) + is_bot: Mapped[bool] = mapped_column(default=False) + upvotes: Mapped[int] = mapped_column(default=1) + downvotes: Mapped[int] = mapped_column(default=0) + realupvotes: Mapped[int] = mapped_column(default=1) + app_id: Mapped[int] = mapped_column(ForeignKey("oauth_apps.id")) + title: Mapped[str] + title_html: Mapped[str] + url: Mapped[str] + body: Mapped[str] + body_html: Mapped[str] + flair: Mapped[str] + ban_reason: Mapped[str] + embed: Mapped[str] + new: Mapped[bool] + notify: Mapped[bool] + chudded: Mapped[bool] = mapped_column(default=False) + rainbowed: Mapped[bool] = mapped_column(default=False) + queened: Mapped[bool] = mapped_column(default=False) + sharpened: Mapped[bool] = mapped_column(default=False) + ping_cost: Mapped[int] = mapped_column(default=0) + bump_utc: Mapped[int] if FEATURES['NSFW_MARKING']: - nsfw = Column(Boolean, default=False) + nsfw: Mapped[bool] = mapped_column(default=False) else: nsfw = False if SITE_NAME == 'WPD': - cw = Column(Boolean, default=False) + cw: Mapped[bool] = mapped_column(default=False) author = relationship("User", primaryjoin="Post.author_id==User.id") oauth_app = relationship("OauthApp") diff --git a/files/classes/push_subscriptions.py b/files/classes/push_subscriptions.py index 0a34763a9..ca1d91c54 100644 --- a/files/classes/push_subscriptions.py +++ b/files/classes/push_subscriptions.py @@ -1,15 +1,16 @@ import time -from sqlalchemy import Column, ForeignKey +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base class PushSubscription(Base): __tablename__ = "push_subscriptions" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - subscription_json = Column(String, primary_key=True) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + subscription_json: Mapped[str] = mapped_column(primary_key=True) + created_utc: Mapped[int] def __init__(self, *args, **kwargs): if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) diff --git a/files/classes/reports.py b/files/classes/reports.py index f05e391f2..877804473 100644 --- a/files/classes/reports.py +++ b/files/classes/reports.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -11,10 +11,10 @@ from files.helpers.slurs_and_profanities import censor_slurs_profanities class Report(Base): __tablename__ = "reports" - post_id = Column(Integer, ForeignKey("posts.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - reason = Column(String) - created_utc = Column(Integer) + post_id: Mapped[int] = mapped_column(ForeignKey("posts.id"), primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + reason: Mapped[str] + created_utc: Mapped[int] user = relationship("User", primaryjoin = "Report.user_id == User.id", uselist = False) @@ -39,10 +39,10 @@ class Report(Base): class CommentReport(Base): __tablename__ = "commentreports" - comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - reason = Column(String) - created_utc = Column(Integer) + comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id"), primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + reason: Mapped[str] + created_utc: Mapped[int] user = relationship("User", primaryjoin = "CommentReport.user_id == User.id", uselist = False) diff --git a/files/classes/saves.py b/files/classes/saves.py index 0eeef40d7..4d02a50d8 100644 --- a/files/classes/saves.py +++ b/files/classes/saves.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -9,9 +9,9 @@ from files.classes import Base class SaveRelationship(Base): __tablename__ = "save_relationship" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - post_id = Column(Integer, ForeignKey("posts.id"), primary_key=True) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + post_id: Mapped[int] = mapped_column(ForeignKey("posts.id"), primary_key=True) + created_utc: Mapped[int] post = relationship("Post", uselist=False) @@ -27,9 +27,9 @@ class CommentSaveRelationship(Base): __tablename__ = "comment_save_relationship" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id"), primary_key=True) + created_utc: Mapped[int] comment = relationship("Comment", uselist=False) diff --git a/files/classes/subscriptions.py b/files/classes/subscriptions.py index 46d746fed..aa7b0b034 100644 --- a/files/classes/subscriptions.py +++ b/files/classes/subscriptions.py @@ -1,16 +1,16 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base class Subscription(Base): __tablename__ = "subscriptions" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - post_id = Column(Integer, ForeignKey("posts.id"), primary_key=True) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + post_id: Mapped[int] = mapped_column(ForeignKey("posts.id"), primary_key=True) + created_utc: Mapped[int] user = relationship("User", uselist=False) post = relationship("Post", uselist=False) diff --git a/files/classes/transactions.py b/files/classes/transactions.py index 4b5457537..c18fa11df 100644 --- a/files/classes/transactions.py +++ b/files/classes/transactions.py @@ -1,16 +1,16 @@ -from sqlalchemy import Column +from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.sqltypes import * from files.classes import Base class Transaction(Base): __tablename__ = "transactions" - id = Column(String, primary_key=True) - created_utc = Column(Integer) - type = Column(String) - amount = Column(Integer) - email = Column(String) - claimed = Column(Boolean) + id: Mapped[str] = mapped_column(primary_key=True) + created_utc: Mapped[int] + type: Mapped[str] + amount: Mapped[int] + email: Mapped[str] + claimed: Mapped[bool] def __repr__(self): return f"<{self.__class__.__name__}(id={self.id})>" diff --git a/files/classes/user.py b/files/classes/user.py index a419110c7..eefc857e2 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -2,8 +2,8 @@ import random from operator import * import pyotp -from sqlalchemy import Column, ForeignKey, FetchedValue -from sqlalchemy.orm import aliased, deferred, Query +from sqlalchemy import ForeignKey, FetchedValue +from sqlalchemy.orm import Mapped, Query, aliased, deferred, mapped_column from sqlalchemy.sql import case, func, literal from sqlalchemy.sql.expression import not_, and_, or_ from sqlalchemy.sql.sqltypes import * @@ -49,106 +49,106 @@ else: class User(Base): __tablename__ = "users" - id = Column(Integer, primary_key=True) - username = Column(String) - namecolor = Column(String, default=DEFAULT_COLOR) - background = Column(String) - profile_background = Column(String) - flair = deferred(Column(String)) - flair_html = Column(String) - flaircolor = Column(String, default=DEFAULT_COLOR) - theme = Column(String, default=DEFAULT_THEME) - themecolor = Column(String, default=DEFAULT_COLOR) - song = Column(String) - highres = Column(String) - profileurl = Column(String) - bannerurl = Column(String) - house = Column(String, default='') - old_house = Column(String, default='') - patron = Column(Integer, default=0) - patron_utc = Column(Integer, default=0) - verified = Column(String) - verifiedcolor = Column(String) - hieroglyphs = Column(Integer, default=0) - rehab = Column(Integer, default=0) - longpost = Column(Integer, default=0) - bird = Column(Integer, default=0) - email = deferred(Column(String)) - css = Column(String) - profilecss = deferred(Column(String)) - passhash = deferred(Column(String)) - post_count = Column(Integer, default=0) - comment_count = Column(Integer, default=0) - received_award_count = Column(Integer, default=0) - created_utc = Column(Integer) - admin_level = Column(Integer, default=DEFAULT_ADMIN_LEVEL) - last_active = Column(Integer) - coins_spent = Column(Integer, default=0) - coins_spent_on_hats = Column(Integer, default=0) - lootboxes_bought = Column(Integer, default=0) - chud = Column(Integer, default=0) - queen = Column(Integer, default=0) - chud_phrase = Column(String) - email_verified = Column(Boolean, default=False) - shadowbanned = Column(Integer, ForeignKey("users.id")) - chudded_by = Column(Integer, ForeignKey("users.id")) - slurreplacer = Column(Integer, default=1) - profanityreplacer = Column(Integer, default=1) - flairchanged = Column(Integer, default=0) - namechanged = Column(Integer, default=0) - newtab = Column(Boolean, default=False) - newtabexternal = Column(Boolean, default=True) - frontsize = Column(Integer, default=25) - bio = deferred(Column(String)) - bio_html = Column(String) - sig = deferred(Column(String)) - sig_html = Column(String) - show_sigs = Column(Boolean, default=True) - progressivestack = Column(Integer, default=0) - deflector = Column(Integer, default=0) - friends = deferred(Column(String)) - friends_html = deferred(Column(String)) - enemies = deferred(Column(String)) - enemies_html = deferred(Column(String)) - is_banned = Column(Integer, ForeignKey("users.id")) - unban_utc = Column(Integer) - ban_reason = deferred(Column(String)) - shadowban_reason = deferred(Column(String)) - is_muted = Column(Boolean, default=False) - login_nonce = Column(Integer, default=0) - coins = Column(Integer, default=DEFAULT_COINS) - truescore = Column(Integer, default=0) - marseybux = Column(Integer, default=DEFAULT_MARSEYBUX) - mfa_secret = deferred(Column(String)) - is_private = Column(Boolean, default=False) - stored_subscriber_count = Column(Integer, default=0) - defaultsortingcomments = Column(String, default="hot") - defaultsorting = Column(String, default="hot") - defaulttime = Column(String, default=DEFAULT_TIME_FILTER) - custom_filter_list = Column(String) - original_username = Column(String) - extra_username = Column(String) - prelock_username = Column(String) - referred_by = Column(Integer, ForeignKey("users.id")) - currently_held_lottery_tickets = Column(Integer, default=0) - total_held_lottery_tickets = Column(Integer, default=0) - total_lottery_winnings = Column(Integer, default=0) - last_viewed_modmail_notifs = Column(Integer, default=0) - last_viewed_post_notifs = Column(Integer, default=0) - last_viewed_log_notifs = Column(Integer, default=0) - last_viewed_offsite_notifs = Column(Integer, default=0) - bite = Column(Integer, default=0) - owoify = Column(Integer, default=0) - sharpen = Column(Integer, default=0) - marsify = Column(Integer, default=0) - rainbow = Column(Integer, default=0) - spider = Column(Integer, default=0) - lifetimedonated = Column(Integer, default=0) - lifetimedonated_visible = Column(Boolean, default=False) - blacklisted_by = Column(Integer, ForeignKey("users.id")) - grinch = Column(Boolean, default=SITE_NAME != 'rDrama') #don't put in an if condition, it will cause an error bc it has a not-null constraint - group_creation_notifs = Column(Boolean, default=False) - effortpost_notifs = Column(Boolean, default=False) + id: Mapped[int] = mapped_column(primary_key=True) + username: Mapped[str] + namecolor: Mapped[str] = mapped_column(default=DEFAULT_COLOR) + background: Mapped[str] + profile_background: Mapped[str] + flair: Mapped[str] = mapped_column(deferred=True) + flair_html: Mapped[str] + flaircolor: Mapped[str] = mapped_column(default=DEFAULT_COLOR) + theme: Mapped[str] = mapped_column(default=DEFAULT_THEME) + themecolor: Mapped[str] = mapped_column(default=DEFAULT_COLOR) + song: Mapped[str] + highres: Mapped[str] + profileurl: Mapped[str] + bannerurl: Mapped[str] + house: Mapped[str] = mapped_column(default='') + old_house: Mapped[str] = mapped_column(default='') + patron: Mapped[int] = mapped_column(default=0) + patron_utc: Mapped[int] = mapped_column(default=0) + verified: Mapped[str] + verifiedcolor: Mapped[str] + hieroglyphs: Mapped[int] = mapped_column(default=0) + rehab: Mapped[int] = mapped_column(default=0) + longpost: Mapped[int] = mapped_column(default=0) + bird: Mapped[int] = mapped_column(default=0) + email: Mapped[str] = mapped_column(deferred=True) + css: Mapped[str] + profilecss: Mapped[str] = mapped_column(deferred=True) + passhash: Mapped[str] = mapped_column(deferred=True) + post_count: Mapped[int] = mapped_column(default=0) + comment_count: Mapped[int] = mapped_column(default=0) + received_award_count: Mapped[int] = mapped_column(default=0) + created_utc: Mapped[int] + admin_level: Mapped[int] = mapped_column(default=DEFAULT_ADMIN_LEVEL) + last_active: Mapped[int] + coins_spent: Mapped[int] = mapped_column(default=0) + coins_spent_on_hats: Mapped[int] = mapped_column(default=0) + lootboxes_bought: Mapped[int] = mapped_column(default=0) + chud: Mapped[int] = mapped_column(default=0) + queen: Mapped[int] = mapped_column(default=0) + chud_phrase: Mapped[str] + email_verified: Mapped[bool] = mapped_column(default=False) + shadowbanned: Mapped[int] = mapped_column(ForeignKey("users.id")) + chudded_by: Mapped[int] = mapped_column(ForeignKey("users.id")) + slurreplacer: Mapped[int] = mapped_column(default=1) + profanityreplacer: Mapped[int] = mapped_column(default=1) + flairchanged: Mapped[int] = mapped_column(default=0) + namechanged: Mapped[int] = mapped_column(default=0) + newtab: Mapped[bool] = mapped_column(default=False) + newtabexternal: Mapped[bool] = mapped_column(default=True) + frontsize: Mapped[int] = mapped_column(default=25) + bio: Mapped[str] = mapped_column(deferred=True) + bio_html: Mapped[str] + sig: Mapped[str] = mapped_column(deferred=True) + sig_html: Mapped[str] + show_sigs: Mapped[bool] = mapped_column(default=True) + progressivestack: Mapped[int] = mapped_column(default=0) + deflector: Mapped[int] = mapped_column(default=0) + friends: Mapped[str] = mapped_column(deferred=True) + friends_html: Mapped[str] = mapped_column(deferred=True) + enemies: Mapped[str] = mapped_column(deferred=True) + enemies_html: Mapped[str] = mapped_column(deferred=True) + is_banned: Mapped[int] = mapped_column(ForeignKey("users.id")) + unban_utc: Mapped[int] + ban_reason: Mapped[str] = mapped_column(deferred=True) + shadowban_reason: Mapped[str] = mapped_column(deferred=True) + is_muted: Mapped[bool] = mapped_column(default=False) + login_nonce: Mapped[int] = mapped_column(default=0) + coins: Mapped[int] = mapped_column(default=DEFAULT_COINS) + truescore: Mapped[int] = mapped_column(default=0) + marseybux: Mapped[int] = mapped_column(default=DEFAULT_MARSEYBUX) + mfa_secret: Mapped[str] = mapped_column(deferred=True) + is_private: Mapped[bool] = mapped_column(default=False) + stored_subscriber_count: Mapped[int] = mapped_column(default=0) + defaultsortingcomments: Mapped[str] = mapped_column(default="hot") + defaultsorting: Mapped[str] = mapped_column(default="hot") + defaulttime: Mapped[str] = mapped_column(default=DEFAULT_TIME_FILTER) + custom_filter_list: Mapped[str] + original_username: Mapped[str] + extra_username: Mapped[str] + prelock_username: Mapped[str] + referred_by: Mapped[int] = mapped_column(ForeignKey("users.id")) + currently_held_lottery_tickets: Mapped[int] = mapped_column(default=0) + total_held_lottery_tickets: Mapped[int] = mapped_column(default=0) + total_lottery_winnings: Mapped[int] = mapped_column(default=0) + last_viewed_modmail_notifs: Mapped[int] = mapped_column(default=0) + last_viewed_post_notifs: Mapped[int] = mapped_column(default=0) + last_viewed_log_notifs: Mapped[int] = mapped_column(default=0) + last_viewed_offsite_notifs: Mapped[int] = mapped_column(default=0) + bite: Mapped[int] = mapped_column(default=0) + owoify: Mapped[int] = mapped_column(default=0) + sharpen: Mapped[int] = mapped_column(default=0) + marsify: Mapped[int] = mapped_column(default=0) + rainbow: Mapped[int] = mapped_column(default=0) + spider: Mapped[int] = mapped_column(default=0) + lifetimedonated: Mapped[int] = mapped_column(default=0) + lifetimedonated_visible: Mapped[bool] = mapped_column(default=False) + blacklisted_by: Mapped[int] = mapped_column(ForeignKey("users.id")) + grinch: Mapped[bool] = mapped_column(default=SITE_NAME != 'rDrama') #don't put in an if condition, it will cause an error bc it has a not-null constraint + group_creation_notifs: Mapped[bool] = mapped_column(default=False) + effortpost_notifs: Mapped[bool] = mapped_column(default=False) if SITE_NAME == 'WPD': nitter = False @@ -158,22 +158,22 @@ class User(Base): pronouns = 'they/them' earlylife = 0 hole_creation_notifs = False - hidevotedon = Column(Boolean, default=False) - hide_cw = Column(Boolean, default=False) + hidevotedon: Mapped[bool] = mapped_column(default=False) + hide_cw: Mapped[bool] = mapped_column(default=False) else: - nitter = Column(Boolean, default=False) - imgsed = Column(Boolean, default=False) - controversial = Column(Boolean, default=False) - reddit = Column(String, default='old.reddit.com') - pronouns = Column(String, default='they/them') - earlylife = Column(Integer, default=0) - hole_creation_notifs = Column(Boolean, default=True) + nitter: Mapped[bool] = mapped_column(default=False) + imgsed: Mapped[bool] = mapped_column(default=False) + controversial: Mapped[bool] = mapped_column(default=False) + reddit: Mapped[str] = mapped_column(default='old.reddit.com') + pronouns: Mapped[str] = mapped_column(default='they/them') + earlylife: Mapped[int] = mapped_column(default=0) + hole_creation_notifs: Mapped[bool] = mapped_column(default=True) hidevotedon = False hide_cw = False if IS_HOMOWEEN(): - zombie = Column(Integer, default=0) # > 0 vaxxed; < 0 zombie - jumpscare = Column(Integer, default=0) + zombie: Mapped[int] = mapped_column(default=0) # > 0 vaxxed; < 0 zombie + jumpscare: Mapped[int] = mapped_column(default=0) badges = relationship("Badge", order_by="Badge.created_utc", back_populates="user") subscriptions = relationship("Subscription", back_populates="user") diff --git a/files/classes/userblock.py b/files/classes/userblock.py index 7e17ebf4b..5d815179d 100644 --- a/files/classes/userblock.py +++ b/files/classes/userblock.py @@ -1,16 +1,16 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base class UserBlock(Base): __tablename__ = "userblocks" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - target_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + target_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + created_utc: Mapped[int] user = relationship("User", primaryjoin="User.id==UserBlock.user_id", back_populates="blocking") target = relationship("User", primaryjoin="User.id==UserBlock.target_id", back_populates="blocked") diff --git a/files/classes/usermute.py b/files/classes/usermute.py index 10db9750d..48c0d1566 100644 --- a/files/classes/usermute.py +++ b/files/classes/usermute.py @@ -1,16 +1,16 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base class UserMute(Base): __tablename__ = "usermutes" - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - target_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + target_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + created_utc: Mapped[int] user = relationship("User", primaryjoin="User.id==UserMute.user_id") target = relationship("User", primaryjoin="User.id==UserMute.target_id") diff --git a/files/classes/views.py b/files/classes/views.py index b8984db8f..654eeee93 100644 --- a/files/classes/views.py +++ b/files/classes/views.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -11,10 +11,10 @@ from files.helpers.sorting_and_time import make_age_string class ViewerRelationship(Base): __tablename__ = "viewers" - user_id = Column(Integer, ForeignKey('users.id'), primary_key=True) - viewer_id = Column(Integer, ForeignKey('users.id'), primary_key=True) - last_view_utc = Column(Integer) - created_utc = Column(Integer) + user_id: Mapped[int] = mapped_column(ForeignKey('users.id'), primary_key=True) + viewer_id: Mapped[int] = mapped_column(ForeignKey('users.id'), primary_key=True) + last_view_utc: Mapped[int] + created_utc: Mapped[int] viewer = relationship("User", primaryjoin="ViewerRelationship.viewer_id == User.id") diff --git a/files/classes/votes.py b/files/classes/votes.py index a2d96e112..7d19add0b 100644 --- a/files/classes/votes.py +++ b/files/classes/votes.py @@ -1,7 +1,7 @@ import time -from sqlalchemy import Column, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql.sqltypes import * from files.classes import Base @@ -10,12 +10,12 @@ from files.helpers.lazy import lazy class Vote(Base): __tablename__ = "votes" - post_id = Column(Integer, ForeignKey("posts.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - vote_type = Column(Integer) - real = Column(Boolean, default=True) - coins = Column(Integer, default=1) - created_utc = Column(Integer) + post_id: Mapped[int] = mapped_column(ForeignKey("posts.id"), primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + vote_type: Mapped[int] + real: Mapped[bool] = mapped_column(default=True) + coins: Mapped[int] = mapped_column(default=1) + created_utc: Mapped[int] user = relationship("User") @@ -40,12 +40,12 @@ class CommentVote(Base): __tablename__ = "commentvotes" - comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - vote_type = Column(Integer) - real = Column(Boolean, default=True) - coins = Column(Integer, default=1) - created_utc = Column(Integer) + comment_id: Mapped[int] = mapped_column(ForeignKey("comments.id"), primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), primary_key=True) + vote_type: Mapped[int] + real: Mapped[bool] = mapped_column(default=True) + coins: Mapped[int] = mapped_column(default=1) + created_utc: Mapped[int] user = relationship("User")