summaryrefslogtreecommitdiff
path: root/dumpfm/dumpfm.py
diff options
context:
space:
mode:
Diffstat (limited to 'dumpfm/dumpfm.py')
-rw-r--r--dumpfm/dumpfm.py160
1 files changed, 160 insertions, 0 deletions
diff --git a/dumpfm/dumpfm.py b/dumpfm/dumpfm.py
new file mode 100644
index 0000000..a6138b4
--- /dev/null
+++ b/dumpfm/dumpfm.py
@@ -0,0 +1,160 @@
+# coding: utf-8
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Index, Integer, Table, Text, text
+from sqlalchemy.orm import relationship
+from sqlalchemy.dialects.postgresql.base import CIDR, INTERVAL
+from sqlalchemy.ext.declarative import declarative_base
+
+
+Base = declarative_base()
+metadata = Base.metadata
+
+
+class DirectMessage(Base):
+ __tablename__ = 'direct_messages'
+
+ dm_id = Column(Integer, primary_key=True, server_default=text("nextval('direct_messages_dm_id_seq'::regclass)"))
+ message_id = Column(ForeignKey(u'messages.message_id'), nullable=False)
+ author_id = Column(ForeignKey(u'users.user_id'), nullable=False)
+ recip_id = Column(ForeignKey(u'users.user_id'), nullable=False)
+
+ author = relationship(u'User', primaryjoin='DirectMessage.author_id == User.user_id')
+ message = relationship(u'Message')
+ recip = relationship(u'User', primaryjoin='DirectMessage.recip_id == User.user_id')
+
+
+class FeedImage(Base):
+ __tablename__ = 'feed_images'
+
+ feed_url = Column(Text, nullable=False)
+ image_url = Column(Text, primary_key=True, nullable=False, index=True)
+ message_id = Column(ForeignKey(u'messages.message_id'))
+ queued_on = Column(DateTime, nullable=False, server_default=text("now()"))
+ room = Column(Text, primary_key=True, nullable=False)
+ link = Column(Text)
+ title = Column(Text)
+
+ message = relationship(u'Message')
+
+
+class ImageAltar(Base):
+ __tablename__ = 'image_altars'
+
+ message_id = Column(Integer, primary_key=True)
+ user_id = Column(Integer, nullable=False)
+
+
+class ImageUrl(Base):
+ __tablename__ = 'image_urls'
+
+ url = Column(Text, primary_key=True)
+ last_posted = Column(DateTime, nullable=False, server_default=text("now()"))
+
+
+t_invalid_feed_images = Table(
+ 'invalid_feed_images', metadata,
+ Column('image_url', Text, nullable=False, unique=True),
+ Column('reason', Text, nullable=False),
+ Column('added_on', DateTime, nullable=False, server_default=text("now()"))
+)
+
+
+class Message(Base):
+ __tablename__ = 'messages'
+ __table_args__ = (
+ Index('messages_room_id_created_on_idx', 'room_id', 'created_on'),
+ Index('messages_user_created_on_image_only_idx', 'user_id', 'created_on')
+ )
+
+ message_id = Column(Integer, primary_key=True, server_default=text("nextval('messages_message_id_seq'::regclass)"))
+ user_id = Column(ForeignKey(u'users.user_id'), nullable=False)
+ room_id = Column(ForeignKey(u'rooms.room_id'), nullable=False)
+ content = Column(Text, nullable=False)
+ created_on = Column(DateTime, nullable=False, server_default=text("now()"))
+ is_image = Column(Boolean)
+ is_text = Column(Boolean, nullable=False, server_default=text("false"))
+
+ room = relationship(u'Room')
+ user = relationship(u'User')
+
+
+class Mute(Base):
+ __tablename__ = 'mutes'
+
+ user_id = Column(ForeignKey(u'users.user_id'), nullable=False)
+ admin_id = Column(ForeignKey(u'users.user_id'), nullable=False)
+ set_on = Column(DateTime, nullable=False, server_default=text("now()"))
+ duration = Column(INTERVAL, nullable=False)
+ reason = Column(Text, nullable=False)
+ cancel_admin_id = Column(ForeignKey(u'users.user_id'))
+ cancelled = Column(Boolean, nullable=False, server_default=text("false"))
+ cancel_reason = Column(Text)
+ mute_id = Column(Integer, primary_key=True, server_default=text("nextval('mutes_mute_id_seq'::regclass)"))
+
+ admin = relationship(u'User', primaryjoin='Mute.admin_id == User.user_id')
+ cancel_admin = relationship(u'User', primaryjoin='Mute.cancel_admin_id == User.user_id')
+ user = relationship(u'User', primaryjoin='Mute.user_id == User.user_id')
+
+
+class Room(Base):
+ __tablename__ = 'rooms'
+
+ room_id = Column(Integer, primary_key=True, server_default=text("nextval('rooms_room_id_seq'::regclass)"))
+ key = Column(Text, nullable=False, unique=True)
+ created_on = Column(DateTime, nullable=False, server_default=text("now()"))
+ admin_only = Column(Boolean, nullable=False, server_default=text("false"))
+ name = Column(Text, nullable=False)
+ description = Column(Text)
+ active = Column(Boolean, nullable=False, server_default=text("true"))
+ history_size = Column(Integer, nullable=False, server_default=text("25"))
+ max_file_size = Column(Integer, nullable=False, server_default=text("1048576"))
+ max_image_width = Column(Integer, nullable=False, server_default=text("2000"))
+ max_image_height = Column(Integer, nullable=False, server_default=text("2000"))
+
+
+class Tag(Base):
+ __tablename__ = 'tags'
+ __table_args__ = (
+ Index('tags_user_id_created_on_idx', 'user_id', 'created_on'),
+ )
+
+ user_id = Column(ForeignKey(u'users.user_id'), primary_key=True, nullable=False, index=True)
+ message_id = Column(ForeignKey(u'messages.message_id'), primary_key=True, nullable=False, index=True)
+ created_on = Column(DateTime, nullable=False, server_default=text("now()"))
+ tag = Column(Text, primary_key=True, nullable=False)
+
+ message = relationship(u'Message')
+ user = relationship(u'User')
+
+
+class User(Base):
+ __tablename__ = 'users'
+
+ user_id = Column(Integer, primary_key=True, server_default=text("nextval('users_user_id_seq'::regclass)"))
+ nick = Column(Text, nullable=False, unique=True)
+ hash = Column(Text, nullable=False)
+ email = Column(Text, nullable=False)
+ created_on = Column(DateTime, nullable=False, server_default=text("now()"))
+ avatar = Column(Text)
+ contact = Column(Text)
+ bio = Column(Text)
+ is_admin = Column(Boolean)
+ last_login = Column(DateTime)
+ created_ip = Column(CIDR, server_default=text("'0.0.0.0/8'::cidr"))
+ last_ip = Column(CIDR, server_default=text("'0.0.0.0/8'::cidr"))
+
+from sqlalchemy import Column, Integer, LargeBinary, String, create_engine, sql
+from sqlalchemy.orm import sessionmaker
+DB_USER="postgres"
+DB_HOST="localhost"
+DB_NAME="dumpfm"
+engine = create_engine('postgresql://{}@{}/{}'.format(
+ DB_USER,
+# DB_PASSWORD,
+ DB_HOST,
+ DB_NAME
+))
+Session = sessionmaker(bind=engine)
+
+session = Session()
+message_list = session.query(Message).filter_by(is_image=True).all()
+print len(message_list)