Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
flask-admin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Python-Dev
flask-admin
Commits
f09d81dd
Commit
f09d81dd
authored
Oct 22, 2018
by
PJ Janse van Rensburg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support sqlalchemy-utils EmailType.
parent
716307f8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
18 additions
and
5 deletions
+18
-5
form.py
flask_admin/contrib/sqla/form.py
+5
-0
test_basic.py
flask_admin/tests/sqla/test_basic.py
+12
-5
requirements-dev.txt
requirements-dev.txt
+1
-0
No files found.
flask_admin/contrib/sqla/form.py
View file @
f09d81dd
...
@@ -317,6 +317,11 @@ class AdminModelConverter(ModelConverterBase):
...
@@ -317,6 +317,11 @@ class AdminModelConverter(ModelConverterBase):
def
convert_time
(
self
,
field_args
,
**
extra
):
def
convert_time
(
self
,
field_args
,
**
extra
):
return
form
.
TimeField
(
**
field_args
)
return
form
.
TimeField
(
**
field_args
)
@
converts
(
'EmailType'
)
def
convert_email
(
self
,
field_args
,
**
extra
):
field_args
[
'validators'
]
.
append
(
validators
.
Email
())
return
fields
.
StringField
(
**
field_args
)
@
converts
(
'Integer'
)
# includes BigInteger and SmallInteger
@
converts
(
'Integer'
)
# includes BigInteger and SmallInteger
def
handle_integer_types
(
self
,
column
,
field_args
,
**
extra
):
def
handle_integer_types
(
self
,
column
,
field_args
,
**
extra
):
unsigned
=
getattr
(
column
.
type
,
'unsigned'
,
False
)
unsigned
=
getattr
(
column
.
type
,
'unsigned'
,
False
)
...
...
flask_admin/tests/sqla/test_basic.py
View file @
f09d81dd
...
@@ -9,6 +9,7 @@ from flask_admin.contrib.sqla import ModelView, filters, tools
...
@@ -9,6 +9,7 @@ from flask_admin.contrib.sqla import ModelView, filters, tools
from
flask_babelex
import
Babel
from
flask_babelex
import
Babel
from
sqlalchemy.ext.hybrid
import
hybrid_property
from
sqlalchemy.ext.hybrid
import
hybrid_property
from
sqlalchemy_utils.types.email
import
EmailType
from
.
import
setup
from
.
import
setup
...
@@ -30,7 +31,7 @@ def create_models(db):
...
@@ -30,7 +31,7 @@ def create_models(db):
class
Model1
(
db
.
Model
):
class
Model1
(
db
.
Model
):
def
__init__
(
self
,
test1
=
None
,
test2
=
None
,
test3
=
None
,
test4
=
None
,
def
__init__
(
self
,
test1
=
None
,
test2
=
None
,
test3
=
None
,
test4
=
None
,
bool_field
=
False
,
date_field
=
None
,
time_field
=
None
,
bool_field
=
False
,
date_field
=
None
,
time_field
=
None
,
datetime_field
=
None
,
enum_field
=
None
):
datetime_field
=
None
,
enum_field
=
None
,
email_field
=
None
):
self
.
test1
=
test1
self
.
test1
=
test1
self
.
test2
=
test2
self
.
test2
=
test2
self
.
test3
=
test3
self
.
test3
=
test3
...
@@ -48,10 +49,10 @@ def create_models(db):
...
@@ -48,10 +49,10 @@ def create_models(db):
test4
=
db
.
Column
(
db
.
UnicodeText
)
test4
=
db
.
Column
(
db
.
UnicodeText
)
bool_field
=
db
.
Column
(
db
.
Boolean
)
bool_field
=
db
.
Column
(
db
.
Boolean
)
enum_field
=
db
.
Column
(
db
.
Enum
(
'model1_v1'
,
'model1_v2'
),
nullable
=
True
)
enum_field
=
db
.
Column
(
db
.
Enum
(
'model1_v1'
,
'model1_v2'
),
nullable
=
True
)
date_field
=
db
.
Column
(
db
.
Date
)
date_field
=
db
.
Column
(
db
.
Date
)
time_field
=
db
.
Column
(
db
.
Time
)
time_field
=
db
.
Column
(
db
.
Time
)
datetime_field
=
db
.
Column
(
db
.
DateTime
)
datetime_field
=
db
.
Column
(
db
.
DateTime
)
email_field
=
db
.
Column
(
EmailType
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
test1
return
self
.
test1
...
@@ -153,6 +154,7 @@ def test_model():
...
@@ -153,6 +154,7 @@ def test_model():
eq_
(
view
.
_create_form_class
.
test2
.
field_class
,
fields
.
StringField
)
eq_
(
view
.
_create_form_class
.
test2
.
field_class
,
fields
.
StringField
)
eq_
(
view
.
_create_form_class
.
test3
.
field_class
,
fields
.
TextAreaField
)
eq_
(
view
.
_create_form_class
.
test3
.
field_class
,
fields
.
TextAreaField
)
eq_
(
view
.
_create_form_class
.
test4
.
field_class
,
fields
.
TextAreaField
)
eq_
(
view
.
_create_form_class
.
test4
.
field_class
,
fields
.
TextAreaField
)
eq_
(
view
.
_create_form_class
.
email_field
.
field_class
,
fields
.
StringField
)
# Make some test clients
# Make some test clients
client
=
app
.
test_client
()
client
=
app
.
test_client
()
...
@@ -166,7 +168,8 @@ def test_model():
...
@@ -166,7 +168,8 @@ def test_model():
rv
=
client
.
post
(
'/admin/model1/new/'
,
rv
=
client
.
post
(
'/admin/model1/new/'
,
data
=
dict
(
test1
=
'test1large'
,
data
=
dict
(
test1
=
'test1large'
,
test2
=
'test2'
,
test2
=
'test2'
,
time_field
=
time
(
0
,
0
,
0
)))
time_field
=
time
(
0
,
0
,
0
),
email_field
=
"Test@TEST.com"
))
eq_
(
rv
.
status_code
,
302
)
eq_
(
rv
.
status_code
,
302
)
model
=
db
.
session
.
query
(
Model1
)
.
first
()
model
=
db
.
session
.
query
(
Model1
)
.
first
()
...
@@ -174,6 +177,7 @@ def test_model():
...
@@ -174,6 +177,7 @@ def test_model():
eq_
(
model
.
test2
,
u'test2'
)
eq_
(
model
.
test2
,
u'test2'
)
eq_
(
model
.
test3
,
u''
)
eq_
(
model
.
test3
,
u''
)
eq_
(
model
.
test4
,
u''
)
eq_
(
model
.
test4
,
u''
)
eq_
(
model
.
email_field
,
u'test@test.com'
)
rv
=
client
.
get
(
'/admin/model1/'
)
rv
=
client
.
get
(
'/admin/model1/'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
...
@@ -187,7 +191,9 @@ def test_model():
...
@@ -187,7 +191,9 @@ def test_model():
ok_
(
u'00:00:00'
in
rv
.
data
.
decode
(
'utf-8'
))
ok_
(
u'00:00:00'
in
rv
.
data
.
decode
(
'utf-8'
))
rv
=
client
.
post
(
url
,
rv
=
client
.
post
(
url
,
data
=
dict
(
test1
=
'test1small'
,
test2
=
'test2large'
))
data
=
dict
(
test1
=
'test1small'
,
test2
=
'test2large'
,
email_field
=
'Test2@TEST.com'
))
eq_
(
rv
.
status_code
,
302
)
eq_
(
rv
.
status_code
,
302
)
model
=
db
.
session
.
query
(
Model1
)
.
first
()
model
=
db
.
session
.
query
(
Model1
)
.
first
()
...
@@ -195,6 +201,7 @@ def test_model():
...
@@ -195,6 +201,7 @@ def test_model():
eq_
(
model
.
test2
,
'test2large'
)
eq_
(
model
.
test2
,
'test2large'
)
eq_
(
model
.
test3
,
''
)
eq_
(
model
.
test3
,
''
)
eq_
(
model
.
test4
,
''
)
eq_
(
model
.
test4
,
''
)
eq_
(
model
.
email_field
,
u'test2@test.com'
)
url
=
'/admin/model1/delete/?id=
%
s'
%
model
.
id
url
=
'/admin/model1/delete/?id=
%
s'
%
model
.
id
rv
=
client
.
post
(
url
)
rv
=
client
.
post
(
url
)
...
@@ -285,7 +292,7 @@ def test_exclude_columns():
...
@@ -285,7 +292,7 @@ def test_exclude_columns():
eq_
(
eq_
(
view
.
_list_columns
,
view
.
_list_columns
,
[(
'test1'
,
'Test1'
),
(
'test3'
,
'Test3'
),
(
'bool_field'
,
'Bool Field'
)]
[(
'test1'
,
'Test1'
),
(
'test3'
,
'Test3'
),
(
'bool_field'
,
'Bool Field'
)
,
(
'email_field'
,
'Email Field'
)
]
)
)
client
=
app
.
test_client
()
client
=
app
.
test_client
()
...
...
requirements-dev.txt
View file @
f09d81dd
...
@@ -15,4 +15,5 @@ nose
...
@@ -15,4 +15,5 @@ nose
coveralls
coveralls
pylint
pylint
sqlalchemy-citext
sqlalchemy-citext
sqlalchemy_utils
azure-storage-blob
azure-storage-blob
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment