Skip to content

Commit

Permalink
Merge pull request pallets-eco#1538 from beenje/citext
Browse files Browse the repository at this point in the history
Add support for postgres CITEXT type
  • Loading branch information
mrjoes authored Oct 13, 2017
2 parents 5fff53b + 07853d7 commit a9f4a84
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 2 deletions.
4 changes: 2 additions & 2 deletions flask_admin/contrib/sqla/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def convert(self, model, mapper, name, prop, field_args, hidden_pk):

@classmethod
def _string_common(cls, column, field_args, **extra):
if isinstance(column.type.length, int) and column.type.length:
if hasattr(column.type, 'length') and isinstance(column.type.length, int) and column.type.length:
field_args['validators'].append(validators.Length(max=column.type.length))

@converts('String') # includes VARCHAR, CHAR, and Unicode
Expand All @@ -290,7 +290,7 @@ def conv_String(self, column, field_args, **extra):
self._string_common(column=column, field_args=field_args, **extra)
return fields.StringField(**field_args)

@converts('Text', 'LargeBinary', 'Binary') # includes UnicodeText
@converts('Text', 'LargeBinary', 'Binary', 'CIText') # includes UnicodeText
def conv_Text(self, field_args, **extra):
self._string_common(field_args=field_args, **extra)
return fields.TextAreaField(**field_args)
Expand Down
37 changes: 37 additions & 0 deletions flask_admin/tests/sqla/test_postgres.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from .test_basic import CustomModelView

from sqlalchemy.dialects.postgresql import HSTORE, JSON
from citext import CIText


def test_hstore():
Expand Down Expand Up @@ -75,3 +76,39 @@ class JSONModel(db.Model):
data = rv.data.decode('utf-8')
ok_('json_test' in data)
ok_('>{"test_key1": "test_value1"}<' in data)


def test_citext():
app, db, admin = setup_postgres()

class CITextModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
citext_test = db.Column(CIText)

db.engine.execute('CREATE EXTENSION IF NOT EXISTS citext')
db.create_all()

view = CustomModelView(CITextModel, db.session)
admin.add_view(view)

client = app.test_client()

rv = client.get('/admin/citextmodel/')
eq_(rv.status_code, 200)

rv = client.post('/admin/citextmodel/new/', data={
'citext_test': 'Foo',
})
eq_(rv.status_code, 302)

rv = client.get('/admin/citextmodel/')
eq_(rv.status_code, 200)
data = rv.data.decode('utf-8')
ok_('citext_test' in data)
ok_('Foo' in data)

rv = client.get('/admin/citextmodel/edit/?id=1')
eq_(rv.status_code, 200)
data = rv.data.decode('utf-8')
ok_('name="citext_test"' in data)
ok_('>Foo<' in data)
1 change: 1 addition & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ psycopg2
nose
coveralls
pylint
sqlalchemy-citext

0 comments on commit a9f4a84

Please sign in to comment.