from sqlalchemy import Column, String, TIMESTAMP, func, BIGINT, LargeBinary, ARRAY from sqlalchemy.ext.declarative import declarative_base from sqlalchemy_utils.types.pg_composite import CompositeType from sqlalchemy.ext.mutable import MutableList Base = declarative_base() CompositeType.cache_ok = False comment_type = CompositeType( 'comment', [ Column('content', String), Column('ip', String), Column('hash', String), Column('created_at', TIMESTAMP), Column("sha1", String) ] ) # posts class SQLarticle(Base): __tablename__ = 'posts' id = Column(BIGINT, primary_key=True) content = Column(String) file_list = Column(ARRAY(String)) hash = Column(String) comment_list = Column(MutableList.as_mutable(ARRAY(comment_type))) # post metadata class SQLmeta(Base): __tablename__ = 'article_meta' hash = Column(String, primary_key=True) created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) igid = Column(String) ip = Column(String) # post mark class SQLmark(Base): __tablename__ = 'mark' hash = Column(String, primary_key=True) mark = Column(String) # logs class SQLlog(Base): __tablename__ = 'logs' id = Column(BIGINT, primary_key=True) created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) message = Column(String) source = Column(String) def __repr__(self): return f"" # deprecated class SQLfile(Base): __tablename__ = 'files' id = Column(BIGINT, primary_key=True) created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) type = Column(String) binary = Column(LargeBinary) class SQLuser(Base): __tablename__ = 'users' id = Column(BIGINT, primary_key=True) user = Column(String) password = Column(String) # hash , sha512 permission = Column(ARRAY(String)) def __repr__(self): return f""