aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--alembic/versions/2743389eb63e_add_all_tables_with_string_keys.py63
-rw-r--r--alembic/versions/2e383ecae493_remove_all_tables_for_conversion_to_.py27
-rw-r--r--metricity/bot.py35
-rw-r--r--metricity/models.py14
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)