From 8770dec79370ad7e89350a74dafdc1e5a1cf8d02 Mon Sep 17 00:00:00 2001 From: Benjamin Bertrand <benjamin.bertrand@esss.se> Date: Wed, 9 Aug 2017 23:06:56 +0200 Subject: [PATCH] Add citext module for case-insensitive string type The citext module provides a case-insensitive character string type. Use CIText for QRCodeMixin name column. name should be case-insensitive to avoid duplicate names. --- app/factory.py | 1 + app/models.py | 3 ++- environment.yml | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/factory.py b/app/factory.py index 66b20c2..ea0ca8d 100644 --- a/app/factory.py +++ b/app/factory.py @@ -25,6 +25,7 @@ def register_cli(app): @app.cli.command() def initdb(): """Create the database tables and initialize them with default values""" + db.engine.execute('CREATE EXTENSION IF NOT EXISTS citext') db.create_all() for instance in defaults: db.session.add(instance) diff --git a/app/models.py b/app/models.py index 727b66e..01107be 100644 --- a/app/models.py +++ b/app/models.py @@ -13,6 +13,7 @@ import uuid import qrcode from sqlalchemy.types import TypeDecorator, CHAR from sqlalchemy.dialects.postgresql import UUID +from citext import CIText from flask_login import UserMixin from .extensions import db, login_manager, ldap_manager from . import utils @@ -126,7 +127,7 @@ class User(db.Model, UserMixin): class QRCodeMixin: id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(50), nullable=False, unique=True) + name = db.Column(CIText, nullable=False, unique=True) def image(self): """Return a QRCode image to identify a record diff --git a/environment.yml b/environment.yml index 20d4c15..c2a7f72 100644 --- a/environment.yml +++ b/environment.yml @@ -56,4 +56,5 @@ dependencies: - ldap3==2.2.4 - pyasn1==0.2.3 - pyjwt==1.4.2 + - sqlalchemy-citext==1.3.post0 - visitor==0.1.3 -- GitLab