aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2020-07-12 02:43:48 +0100
committerrubenwardy <rw@rubenwardy.com>2020-07-12 02:43:51 +0100
commit4bd9411d870d0402ddf83d0c84591f7c8ce32daf (patch)
treed1b712d5a2f8c8a88d37e559aa5a9cab30e4176c
parent284683e7e541b8124b5a13bf3c7139423e063985 (diff)
downloadcheatdb-4bd9411d870d0402ddf83d0c84591f7c8ce32daf.tar.xz
Add check constraint on MetaPackage name
-rw-r--r--app/models.py2
-rw-r--r--migrations/versions/838081950f27_.py30
2 files changed, 32 insertions, 0 deletions
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")