From bbc5f99ae9b69734735b220f7ebc8fc7a715cd6c Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 20 Feb 2018 00:11:44 +0200 Subject: [PATCH] Fix Alembic setup and add timestamp to TelegramFile --- .../1b241f7e8530_add_telegramfile_table.py | 28 ++++++++ ...7d84380b6_add_timestamp_to_telegramfile.py | 25 ++++++++ .../versions/97d2a942bcf8_initial_revision.py | 64 ++++++++++++++++--- mautrix_telegram/db.py | 3 +- mautrix_telegram/portal.py | 4 +- 5 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 alembic/versions/1b241f7e8530_add_telegramfile_table.py create mode 100644 alembic/versions/7d47d84380b6_add_timestamp_to_telegramfile.py diff --git a/alembic/versions/1b241f7e8530_add_telegramfile_table.py b/alembic/versions/1b241f7e8530_add_telegramfile_table.py new file mode 100644 index 00000000..c9cca21c --- /dev/null +++ b/alembic/versions/1b241f7e8530_add_telegramfile_table.py @@ -0,0 +1,28 @@ +"""Add TelegramFile table + +Revision ID: 1b241f7e8530 +Revises: 97d2a942bcf8 +Create Date: 2018-02-19 23:52:06.605741 + +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = '1b241f7e8530' +down_revision = '97d2a942bcf8' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table('telegram_file', + sa.Column('id', sa.String(), nullable=False), + sa.Column('mxc', sa.String(), nullable=True), + sa.Column('mime_type', sa.String(), nullable=True), + sa.Column('was_converted', sa.Boolean(), nullable=True), + sa.PrimaryKeyConstraint('id')) + + +def downgrade(): + op.drop_table('telegram_file') diff --git a/alembic/versions/7d47d84380b6_add_timestamp_to_telegramfile.py b/alembic/versions/7d47d84380b6_add_timestamp_to_telegramfile.py new file mode 100644 index 00000000..10d59c87 --- /dev/null +++ b/alembic/versions/7d47d84380b6_add_timestamp_to_telegramfile.py @@ -0,0 +1,25 @@ +"""Add timestamp to TelegramFile + +Revision ID: 7d47d84380b6 +Revises: 1b241f7e8530 +Create Date: 2018-02-19 23:53:18.050871 + +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = '7d47d84380b6' +down_revision = '1b241f7e8530' +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column('telegram_file', + sa.Column('timestamp', sa.BigInteger(), nullable=False, default=0, + server_default="true")) + + +def downgrade(): + op.drop_column('telegram_file', 'timestamp') diff --git a/alembic/versions/97d2a942bcf8_initial_revision.py b/alembic/versions/97d2a942bcf8_initial_revision.py index 449f7f54..00d3354d 100644 --- a/alembic/versions/97d2a942bcf8_initial_revision.py +++ b/alembic/versions/97d2a942bcf8_initial_revision.py @@ -1,14 +1,13 @@ """initial revision Revision ID: 97d2a942bcf8 -Revises: +Revises: Create Date: 2018-02-11 18:40:55.483842 """ from alembic import op import sqlalchemy as sa - # revision identifiers, used by Alembic. revision = '97d2a942bcf8' down_revision = None @@ -17,12 +16,61 @@ depends_on = None def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - pass - # ### end Alembic commands ### + op.create_table('portal', + sa.Column('tgid', sa.Integer), + sa.Column('tg_receiver', sa.Integer), + sa.Column('peer_type', sa.String, nullable=False, default=""), + sa.Column('mxid', sa.String, nullable=True), + sa.Column('username', sa.String, nullable=True), + sa.Column('title', sa.String, nullable=True), + sa.Column('about', sa.String, nullable=True), + sa.Column('photo_id', sa.String, nullable=True), + sa.PrimaryKeyConstraint('tgid', 'tg_receiver'), + sa.UniqueConstraint('mxid')) + op.create_table('user', + sa.Column('mxid', sa.String), + sa.Column('tgid', sa.Integer, nullable=True), + sa.Column('tg_username', sa.String, nullable=True), + sa.Column('saved_contacts', sa.Integer, nullable=False, default=0), + sa.PrimaryKeyConstraint('mxid')) + op.create_table('puppet', + sa.Column('id', sa.Integer), + sa.Column('displayname', sa.String, nullable=True), + sa.Column('username', sa.String, nullable=True), + sa.Column('photo_id', sa.String, nullable=True), + sa.PrimaryKeyConstraint('id')) + op.create_table('contact', + sa.Column('user', sa.Integer), + sa.Column('contact', sa.Integer), + sa.ForeignKeyConstraint(("user",), ("user.tgid",)), + sa.ForeignKeyConstraint(("contact",), ("puppet.id",)), + sa.PrimaryKeyConstraint('user', 'contact')) + op.create_table('user_portal', + sa.Column('user', sa.Integer), + sa.Column('portal', sa.Integer), + sa.Column('portal_receiver', sa.Integer), + sa.PrimaryKeyConstraint('user', 'portal', 'portal_receiver'), + sa.ForeignKeyConstraint(("user",), ("user.tgid",)), + sa.ForeignKeyConstraint(("portal", "portal_receiver"), + ("portal.tgid", "portal.tg_receiver"))) + op.create_table('message', + sa.Column('mxid', sa.String), + sa.Column('mx_room', sa.String), + sa.Column('tgid', sa.Integer), + sa.Column('tg_space', sa.Integer), + sa.PrimaryKeyConstraint('tgid', 'tg_space'), + sa.UniqueConstraint("mxid", "mx_room", "tg_space", name="_mx_id_room")) + op.create_table('bot_chat', + sa.Column('id', sa.Integer), + sa.Column('type', sa.String, nullable=False, default=""), + sa.PrimaryKeyConstraint('id')) def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - pass - # ### end Alembic commands ### + op.drop_table('bot_chat') + op.drop_table('message') + op.drop_table('user_portal') + op.drop_table('contact') + op.drop_table('puppet') + op.drop_table('user') + op.drop_table('portal') diff --git a/mautrix_telegram/db.py b/mautrix_telegram/db.py index 3fa7976a..81829c7a 100644 --- a/mautrix_telegram/db.py +++ b/mautrix_telegram/db.py @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . from sqlalchemy import (Column, UniqueConstraint, ForeignKey, ForeignKeyConstraint, Integer, - String, Boolean) + BigInteger, String, Boolean) from sqlalchemy.orm import relationship from .base import Base @@ -112,6 +112,7 @@ class TelegramFile(Base): mxc = Column(String) mime_type = Column(String) was_converted = Column(Boolean) + timestamp = Column(BigInteger, primary_key=True) def init(db_session): diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index 3d938e86..219f20cd 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -25,6 +25,7 @@ import logging from PIL import Image import magic +import time from telethon.tl.functions.messages import * from telethon.tl.functions.channels import * @@ -815,7 +816,8 @@ class Portal: uploaded = await intent.upload_file(file, mime_type) db_file = DBTelegramFile(id=id, mxc=uploaded["content_uri"], - mime_type=mime_type, was_converted=image_converted) + mime_type=mime_type, was_converted=image_converted, + timestamp=int(time.time())) self.db.add(db_file) self.db.commit()