WIP: [DO NOT MERGE] archives as ui and stuff #29
|
@ -0,0 +1,19 @@
|
|||
import time
|
||||
from math import floor
|
||||
from random import randint
|
||||
from urllib.parse import parse_qs, urlencode, urlparse
|
||||
|
||||
from sqlalchemy import Column, ForeignKey
|
||||
from sqlalchemy.dialects.postgresql import TSVECTOR
|
||||
from sqlalchemy.orm import relationship, scoped_session
|
||||
from sqlalchemy.schema import FetchedValue
|
||||
from sqlalchemy.sql.sqltypes import *
|
||||
|
||||
from files.classes import Base
|
||||
from files.helpers.const import *
|
||||
from files.helpers.lazy import lazy
|
||||
from files.helpers.regex import *
|
||||
from files.helpers.sorting_and_time import *
|
||||
|
||||
class ArchivedComment(Base):
|
||||
pass
|
|
@ -0,0 +1,95 @@
|
|||
import random
|
||||
import time
|
||||
import typing
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from sqlalchemy import Column, FetchedValue, ForeignKey
|
||||
from sqlalchemy.orm import deferred, relationship, scoped_session
|
||||
from sqlalchemy.sql.sqltypes import *
|
||||
|
||||
from files.classes import Base
|
||||
if typing.TYPE_CHECKING:
|
||||
from files.classes.user import User
|
||||
from files.helpers.const import *
|
||||
from files.helpers.lazy import lazy
|
||||
from files.helpers.regex import *
|
||||
from files.helpers.sorting_and_time import make_age_string
|
||||
|
||||
from .comment import normalize_urls_runtime
|
||||
from .polls import *
|
||||
from .sub import *
|
||||
from .subscriptions import *
|
||||
|
||||
class ArchivedSubmission(Base):
|
||||
__tablename__ = "archived_submissions"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
author_id = Column(Integer)
|
||||
author_name = Column(String)
|
||||
created_utc = Column(Integer, nullable=False)
|
||||
edited_utc = Column(Integer, default=0, nullable=False)
|
||||
thumburl = Column(String)
|
||||
distinguish_level = Column(Integer, default=0)
|
||||
sub = Column(String, nullable=False)
|
||||
comment_count = Column(Integer, default=0, nullable=False)
|
||||
over_18 = Column(Boolean, default=False, nullable=False)
|
||||
score = Column(Integer, default=1, nullable=False)
|
||||
upvotes = Column(Integer, default=1)
|
||||
downvotes = Column(Integer, default=0)
|
||||
title = Column(String)
|
||||
url = Column(String)
|
||||
body = Column(String)
|
||||
body_html = Column(String)
|
||||
flair = Column(String)
|
||||
|
||||
hidden_by = Column(Integer, ForeignKey("users.id")) # null if not hidden
|
||||
|
||||
author = relationship("User", primaryjoin="ArchivedSubmission.author_id==User.id")
|
||||
flags = relationship("Flag", order_by="Flag.created_utc")
|
||||
comments = relationship("ArchivedComment", primaryjoin="ArchivedComment.parent_submission==ArchivedSubmission.id", back_populates="post")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ArchivedSubmission(id={self.id})>"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def created_datetime(self):
|
||||
return str(time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(self.created_utc)))
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def age_string(self):
|
||||
return make_age_string(self.created_utc)
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def edited_string(self):
|
||||
return make_age_string(self.edited_utc)
|
||||
|
||||
@lazy
|
||||
def realbody(self, v:Optional["User"]):
|
||||
if self.hidden_by and not v.admin_level >= PERMS['POST_COMMENT_MODERATION']: return "[removed]" # TODO: use v.can_see_content??
|
||||
body = self.body_html or ""
|
||||
if not body: return ""
|
||||
body = censor_slurs(body, v)
|
||||
body = normalize_urls_runtime(body, v)
|
||||
return body
|
||||
|
||||
def plainbody(self, v:Optional["User"]):
|
||||
if self.hidden_by and not v.admin_level >= PERMS['POST_COMMENT_MODERATION']: return "[removed]" # TODO: use v.can_see_content??
|
||||
body = self.body or ""
|
||||
if not body: return ""
|
||||
body = censor_slurs(body, v)
|
||||
body = normalize_urls_runtime(body, v)
|
||||
return body
|
||||
|
||||
@lazy
|
||||
def realtitle(self, v:Optional["User"]):
|
||||
if self.hidden_by and not v.admin_level >= PERMS['POST_COMMENT_MODERATION']: return "[removed]" # TODO: use v.can_see_content??
|
||||
return censor_slurs(self.title, v)
|
||||
|
||||
|
Loading…
Reference in New Issue