From 4bd9411d870d0402ddf83d0c84591f7c8ce32daf Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 12 Jul 2020 02:43:48 +0100 Subject: [PATCH] Add check constraint on MetaPackage name --- app/models.py | 2 ++ migrations/versions/838081950f27_.py | 30 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 migrations/versions/838081950f27_.py diff --git a/app/models.py b/app/models.py index 4102049..0db7ca4 100644 --- a/app/models.py +++ b/app/models.py @@ -758,6 +758,8 @@ class MetaPackage(db.Model): name = db.Column(db.String(100), unique=True, nullable=False) dependencies = db.relationship("Dependency", backref="meta_package", lazy="dynamic") + mp_name_valid = db.CheckConstraint("name ~* '^[a-z0-9_]+$'") + def __init__(self, name=None): self.name = name diff --git a/migrations/versions/838081950f27_.py b/migrations/versions/838081950f27_.py new file mode 100644 index 0000000..f30d547 --- /dev/null +++ b/migrations/versions/838081950f27_.py @@ -0,0 +1,30 @@ +"""empty message + +Revision ID: 838081950f27 +Revises: 86512692b770 +Create Date: 2020-07-12 01:33:19.499459 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '838081950f27' +down_revision = '86512692b770' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_check_constraint("mp_name_valid", "meta_package", "name ~* '^[a-z0-9_]+$'") + + op.execute(""" + DELETE FROM provides AS t USING meta_package AS m WHERE t.metapackage_id = m.id AND NOT (m.name ~* '^[a-z0-9_]+$'); + DELETE FROM dependency AS t USING meta_package AS m WHERE t.meta_package_id = m.id AND NOT (m.name ~* '^[a-z0-9_]+$'); + DELETE FROM meta_package WHERE NOT (name ~* '^[a-z0-9_]+$'); + """) + + +def downgrade(): + op.drop_constraint("mp_name_valid", "meta_package", type_="check")