From 8407791839059d815971b67dc19659c42db85433 Mon Sep 17 00:00:00 2001 From: Martin Lettry Date: Fri, 14 Apr 2023 11:28:11 +0200 Subject: [PATCH] wip DB tests --- ...995_change_accountsrole_primary_key_to_.py | 85 ++++++++++++++----- invenio_accounts/models.py | 7 +- 2 files changed, 69 insertions(+), 23 deletions(-) diff --git a/invenio_accounts/alembic/8f11b75e0995_change_accountsrole_primary_key_to_.py b/invenio_accounts/alembic/8f11b75e0995_change_accountsrole_primary_key_to_.py index d74e00bb..79a8ba2f 100644 --- a/invenio_accounts/alembic/8f11b75e0995_change_accountsrole_primary_key_to_.py +++ b/invenio_accounts/alembic/8f11b75e0995_change_accountsrole_primary_key_to_.py @@ -7,13 +7,12 @@ """Change AccountsRole primary key to string.""" -from alembic import op import sqlalchemy as sa - +from alembic import op # revision identifiers, used by Alembic. -revision = '8f11b75e0995' -down_revision = 'eb9743315a9d' +revision = "8f11b75e0995" +down_revision = "eb9743315a9d" branch_labels = () depends_on = None @@ -21,32 +20,76 @@ def upgrade(): """Upgrade database.""" # Drop foreign key and change type - op.drop_constraint("fk_accounts_userrole_role_id", "accounts_userrole", type_="foreignkey") - op.alter_column('accounts_userrole', 'role_id', existing_type=sa.Integer, type_=sa.String(80)) + op.drop_constraint( + "fk_accounts_userrole_role_id", "accounts_userrole", type_="foreignkey" + ) + op.alter_column( + "accounts_userrole", + "role_id", + existing_type=sa.Integer, + type_=sa.String(80), + postgresql_using="role_id::integer", + + ) # Change primary key type - op.drop_constraint('pk_accounts_role', 'accounts_role', type_='primary') + op.drop_constraint("pk_accounts_role", "accounts_role", type_="primary") # server_default=None will remove the autoincrement - op.alter_column('accounts_role', 'id', existing_type=sa.Integer, type_=sa.String(80), server_default=None) - op.execute('DROP SEQUENCE accounts_role_id_seq') - op.create_primary_key('pk_accounts_role', 'accounts_role', ['id']) + op.alter_column( + "accounts_role", + "id", + existing_type=sa.Integer, + type_=sa.String(80), + server_default=None, + ) + op.execute("DROP SEQUENCE accounts_role_id_seq") + op.create_primary_key("pk_accounts_role", "accounts_role", ["id"]) # Add new column `is_managed` - op.add_column('accounts_role', sa.Column('is_managed', sa.Boolean(name='is_managed'), default=True, nullable=False)) + op.add_column( + "accounts_role", + sa.Column( + "is_managed", sa.Boolean(name="is_managed"), default=True, nullable=False + ), + ) # Re-create the foreign key constraint - op.create_foreign_key('fk_accounts_userrole_role_id', 'accounts_userrole', 'accounts_role', ['role_id'], ['id']) + op.create_foreign_key( + "fk_accounts_userrole_role_id", + "accounts_userrole", + "accounts_role", + ["role_id"], + ["id"], + ) def downgrade(): """Downgrade database.""" # Drop foreign key and change type - op.drop_constraint("fk_accounts_userrole_role_id", "accounts_userrole", type_="foreignkey") - op.alter_column('accounts_userrole', 'role_id', existing_type=sa.String(80), type_=sa.Integer) + op.drop_constraint( + "fk_accounts_userrole_role_id", "accounts_userrole", type_="foreignkey" + ) + op.alter_column( + "accounts_userrole", "role_id", existing_type=sa.String(80), type_=sa.Integer + ) # Change primary key type - op.drop_constraint('pk_accounts_role', 'accounts_role', type_='primary') - op.alter_column('accounts_role', 'id', existing_type=sa.String(80), type_=sa.Integer) - op.create_primary_key('pk_accounts_role', 'accounts_role', ['id']) - op.alter_column('accounts_role', 'id', existing_type=sa.Integer, autoincrement=True, existing_autoincrement=True, nullable=False) + op.drop_constraint("pk_accounts_role", "accounts_role", type_="primary") + op.alter_column( + "accounts_role", "id", existing_type=sa.String(80), type_=sa.Integer + ) + op.create_primary_key("pk_accounts_role", "accounts_role", ["id"]) + op.alter_column( + "accounts_role", + "id", + existing_type=sa.Integer, + autoincrement=True, + existing_autoincrement=True, + nullable=False, + ) # Drop new column `is_managed` - op.drop_column('accounts_role', 'is_managed') + op.drop_column("accounts_role", "is_managed") # Re-create the foreign key constraint - op.create_foreign_key('fk_accounts_userrole_role_id', 'accounts_userrole', 'accounts_role', ['role_id'], ['id']) - + op.create_foreign_key( + "fk_accounts_userrole_role_id", + "accounts_userrole", + "accounts_role", + ["role_id"], + ["id"], + ) diff --git a/invenio_accounts/models.py b/invenio_accounts/models.py index 52ea2dc9..773ee0bd 100644 --- a/invenio_accounts/models.py +++ b/invenio_accounts/models.py @@ -9,6 +9,7 @@ """Database models for accounts.""" +import uuid from datetime import datetime from flask import current_app, session @@ -51,7 +52,7 @@ ), db.Column( "role_id", - db.Integer(), + db.String(80), db.ForeignKey("accounts_role.id", name="fk_accounts_userrole_role_id"), ), ) @@ -63,7 +64,9 @@ class Role(db.Model, Timestamp, RoleMixin): __tablename__ = "accounts_role" - id = db.Column(db.String(80), primary_key=True) + id = db.Column( + db.String(80), primary_key=True, nullable=False, default=str(uuid.uuid4()) + ) name = db.Column(db.String(80), unique=True) """Role name."""