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))