Mercurial > kallithea
changeset 7963:46681ae86693
db: introduce migration step after 93834966ae01 dropped non-nullable inherit_default_permissions
The database migration step was lazily and naively skipped ... but that turns
out to be a problem when new users are added.
In the database, the original column 'inherit_default_permissions' was
marked as non-nullable without default value. In the Kallithea code after
commit 93834966ae01, the column 'inherit_default_permissions' was no longer
known, and thus not given a value when new users are added. As a result, the
database complained:
IntegrityError: (psycopg2.errors.NotNullViolation) null value in column "inherit_default_permissions" violates not-null constraint
Fix that now by adding an appropriate db migration step to actually remove
the columns.
Use meta reflection to check if columns exist before running the upgrade
step. The upgrade step only has to be run if it is an old database - not if
it has been created after the schema changes were introduced.
For the downgrade step, make sure to set a default value for non-nullable
columns.
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Sat, 23 Nov 2019 02:27:19 +0100 |
parents | d426fe131196 |
children | d2a97f73fa1f |
files | kallithea/alembic/versions/151b4a4e8c48_db_migration_step_after_93834966ae01_.py |
diffstat | 1 files changed, 51 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/alembic/versions/151b4a4e8c48_db_migration_step_after_93834966ae01_.py Sat Nov 23 02:27:19 2019 +0100 @@ -0,0 +1,51 @@ +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +"""db: migration step after 93834966ae01 dropped non-nullable inherit_default_permissions + +Revision ID: 151b4a4e8c48 +Revises: b74907136bc1 +Create Date: 2019-11-23 01:37:42.963119 + +""" + +# The following opaque hexadecimal identifiers ("revisions") are used +# by Alembic to track this migration script and its relations to others. +revision = '151b4a4e8c48' +down_revision = 'b74907136bc1' +branch_labels = None +depends_on = None + +import sqlalchemy as sa +from alembic import op + + +def upgrade(): + meta = sa.MetaData() + meta.reflect(bind=op.get_bind()) + + if 'inherit_default_permissions' in meta.tables['users'].columns: + with op.batch_alter_table('users', schema=None) as batch_op: + batch_op.drop_column('inherit_default_permissions') + + if 'users_group_inherit_default_permissions' in meta.tables['users_groups'].columns: + with op.batch_alter_table('users_groups', schema=None) as batch_op: + batch_op.drop_column('users_group_inherit_default_permissions') + + +def downgrade(): + with op.batch_alter_table('users_groups', schema=None) as batch_op: + batch_op.add_column(sa.Column('users_group_inherit_default_permissions', sa.BOOLEAN(), nullable=False, default=True)) + + with op.batch_alter_table('users', schema=None) as batch_op: + batch_op.add_column(sa.Column('inherit_default_permissions', sa.BOOLEAN(), nullable=False, default=True))