diff options
| -rw-r--r-- | alembic/versions/2743389eb63e_add_all_tables_with_string_keys.py | 63 | ||||
| -rw-r--r-- | alembic/versions/2e383ecae493_remove_all_tables_for_conversion_to_.py | 27 | ||||
| -rw-r--r-- | metricity/bot.py | 35 | ||||
| -rw-r--r-- | metricity/models.py | 14 |
4 files changed, 114 insertions, 25 deletions
diff --git a/alembic/versions/2743389eb63e_add_all_tables_with_string_keys.py b/alembic/versions/2743389eb63e_add_all_tables_with_string_keys.py new file mode 100644 index 0000000..10bb0d2 --- /dev/null +++ b/alembic/versions/2743389eb63e_add_all_tables_with_string_keys.py @@ -0,0 +1,63 @@ +"""add all tables with string keys + +Revision ID: 2743389eb63e +Revises: 2e383ecae493 +Create Date: 2020-08-25 16:35:38.833315 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '2743389eb63e' +down_revision = '2e383ecae493' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('categories', + sa.Column('id', sa.String(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('users', + sa.Column('id', sa.String(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('avatar_hash', sa.String(), nullable=True), + sa.Column('joined_at', sa.DateTime(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.Column('is_staff', sa.Boolean(), nullable=False), + sa.Column('opt_out', sa.Boolean(), nullable=True), + sa.Column('bot', sa.Boolean(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('channels', + sa.Column('id', sa.String(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('category_id', sa.String(), nullable=True), + sa.Column('is_staff', sa.Boolean(), nullable=False), + sa.ForeignKeyConstraint(['category_id'], ['categories.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('messages', + sa.Column('id', sa.String(), nullable=False), + sa.Column('channel_id', sa.String(), nullable=True), + sa.Column('author_id', sa.String(), nullable=True), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.ForeignKeyConstraint(['author_id'], ['users.id'], ondelete='CASCADE'), + sa.ForeignKeyConstraint(['channel_id'], ['channels.id'], ondelete='CASCADE'), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('messages') + op.drop_table('channels') + op.drop_table('users') + op.drop_table('categories') + # ### end Alembic commands ### diff --git a/alembic/versions/2e383ecae493_remove_all_tables_for_conversion_to_.py b/alembic/versions/2e383ecae493_remove_all_tables_for_conversion_to_.py new file mode 100644 index 0000000..33f3673 --- /dev/null +++ b/alembic/versions/2e383ecae493_remove_all_tables_for_conversion_to_.py @@ -0,0 +1,27 @@ +"""remove all tables for conversion to string keys + +Revision ID: 2e383ecae493 +Revises: b1fdfe71fcb7 +Create Date: 2020-08-25 16:31:05.025135 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '2e383ecae493' +down_revision = 'b1fdfe71fcb7' +branch_labels = None +depends_on = None + + +def upgrade(): + op.drop_table('messages') + op.drop_table('users') + op.drop_table('channels') + op.drop_table('categories') + + +def downgrade(): + pass diff --git a/metricity/bot.py b/metricity/bot.py index 74d4636..1380c9d 100644 --- a/metricity/bot.py +++ b/metricity/bot.py @@ -34,10 +34,10 @@ async def sync_channels(guild: Guild) -> None: for channel in guild.channels: if isinstance(channel, CategoryChannel): - if db_cat := await Category.get(channel.id): + if db_cat := await Category.get(str(channel.id)): await db_cat.update(name=channel.name).apply() else: - await Category.create(id=channel.id, name=channel.name) + await Category.create(id=str(channel.id), name=channel.name) log.info("Category synchronisation process complete, synchronising channels") @@ -50,11 +50,10 @@ async def sync_channels(guild: Guild) -> None: not isinstance(channel, CategoryChannel) and not isinstance(channel, VoiceChannel) ): - if db_chan := await Channel.get(channel.id): + if db_chan := await Channel.get(str(channel.id)): await db_chan.update( - id=channel.id, name=channel.name, - category_id=channel.category.id if channel.category else None, + category_id=str(channel.category.id) if channel.category else None, is_staff=( True if channel.category.id in BotConfig.staff_categories @@ -63,9 +62,9 @@ async def sync_channels(guild: Guild) -> None: ).apply() else: await Channel.create( - id=channel.id, + id=str(channel.id), name=channel.name, - category_id=channel.category.id if channel.category else None, + category_id=str(channel.category.id) if channel.category else None, is_staff=( True if channel.category.id in BotConfig.staff_categories @@ -126,7 +125,7 @@ async def on_guild_available(guild: Guild) -> None: for user in guild.members: users.append({ - "id": user.id, + "id": str(user.id), "name": user.name, "avatar_hash": user.avatar, "joined_at": user.joined_at, @@ -156,9 +155,9 @@ async def on_member_join(member: Member) -> None: if member.guild.id != BotConfig.guild_id: return - if db_user := await User.get(member.id): + if db_user := await User.get(str(member.id)): await db_user.update( - id=member.id, + id=str(member.id), name=member.name, avatar_hash=member.avatar, joined_at=member.joined_at, @@ -168,7 +167,7 @@ async def on_member_join(member: Member) -> None: else: try: await User.create( - id=member.id, + id=str(member.id), name=member.name, avatar_hash=member.avatar, joined_at=member.joined_at, @@ -191,7 +190,7 @@ async def on_member_update(_before: Member, member: Member) -> None: if not member.joined_at: return - if db_user := await User.get(member.id): + if db_user := await User.get(str(member.id)): if ( db_user.name != member.name or db_user.avatar_hash != member.avatar or @@ -199,7 +198,7 @@ async def on_member_update(_before: Member, member: Member) -> None: [role.id for role in member.roles] != db_user.is_staff ): await db_user.update( - id=member.id, + id=str(member.id), name=member.name, avatar_hash=member.avatar, joined_at=member.joined_at, @@ -209,7 +208,7 @@ async def on_member_update(_before: Member, member: Member) -> None: else: try: await User.create( - id=member.id, + id=str(member.id), name=member.name, avatar_hash=member.avatar, joined_at=member.joined_at, @@ -231,7 +230,7 @@ async def on_message(message: DiscordMessage) -> None: await channel_sync_in_progress.wait() - if author := await User.get(message.author.id): + if author := await User.get(str(message.author.id)): if author.opt_out: return else: @@ -243,8 +242,8 @@ async def on_message(message: DiscordMessage) -> None: return await Message.create( - id=message.id, - channel_id=message.channel.id, - author_id=message.author.id, + id=str(message.id), + channel_id=str(message.channel.id), + author_id=str(message.author.id), created_at=message.created_at ) diff --git a/metricity/models.py b/metricity/models.py index 43e14d3..0489e8c 100644 --- a/metricity/models.py +++ b/metricity/models.py @@ -13,7 +13,7 @@ class Category(db.Model): __tablename__ = "categories" - id = db.Column(db.BigInteger, primary_key=True) + id = db.Column(db.String, primary_key=True) name = db.Column(db.String, nullable=False) @@ -22,10 +22,10 @@ class Channel(db.Model): __tablename__ = "channels" - id = db.Column(db.BigInteger, primary_key=True) + id = db.Column(db.String, primary_key=True) name = db.Column(db.String, nullable=False) category_id = db.Column( - db.BigInteger, + db.String, db.ForeignKey("categories.id"), nullable=True ) @@ -37,7 +37,7 @@ class User(db.Model): __tablename__ = "users" - id = db.Column(db.BigInteger, primary_key=True) + id = db.Column(db.String, primary_key=True) name = db.Column(db.String, nullable=False) avatar_hash = db.Column(db.String, nullable=True) joined_at = db.Column(db.DateTime, nullable=False) @@ -71,10 +71,10 @@ class Message(db.Model): __tablename__ = "messages" - id = db.Column(db.BigInteger, primary_key=True) + id = db.Column(db.String, primary_key=True) channel_id = db.Column( - db.BigInteger, + db.String, db.ForeignKey("channels.id", ondelete="CASCADE"), ) - author_id = db.Column(db.BigInteger, db.ForeignKey("users.id", ondelete="CASCADE")) + author_id = db.Column(db.String, db.ForeignKey("users.id", ondelete="CASCADE")) created_at = db.Column(db.DateTime, default=datetime.utcnow) |