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
527de698
Commit
527de698
authored
Jun 13, 2013
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Test fixes
parent
0bf5ac48
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
74 additions
and
52 deletions
+74
-52
_compat.py
flask_admin/_compat.py
+3
-0
view.py
flask_admin/contrib/mongoengine/view.py
+4
-4
view.py
flask_admin/contrib/peeweemodel/view.py
+4
-4
test_basic.py
flask_admin/tests/sqlamodel/test_basic.py
+50
-35
test_inlineform.py
flask_admin/tests/sqlamodel/test_inlineform.py
+1
-0
test_model.py
flask_admin/tests/test_model.py
+12
-9
No files found.
flask_admin/_compat.py
View file @
527de698
...
...
@@ -25,6 +25,9 @@ if not PY2:
iteritems
=
lambda
d
:
iter
(
d
.
items
())
def
as_unicode
(
text
):
if
isinstance
(
text
,
bytes
):
return
text
.
decode
(
'utf-8'
)
return
str
(
text
)
from
functools
import
reduce
...
...
flask_admin/contrib/mongoengine/view.py
View file @
527de698
...
...
@@ -339,7 +339,7 @@ class ModelView(BaseModelView):
form
.
populate_obj
(
model
)
self
.
on_model_change
(
form
,
model
)
model
.
save
()
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to create model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
logging
.
exception
(
'Failed to create model'
)
...
...
@@ -362,7 +362,7 @@ class ModelView(BaseModelView):
form
.
populate_obj
(
model
)
self
.
on_model_change
(
form
,
model
)
model
.
save
()
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to update model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
logging
.
exception
(
'Failed to update model'
)
...
...
@@ -383,7 +383,7 @@ class ModelView(BaseModelView):
self
.
on_model_delete
(
model
)
model
.
delete
()
return
True
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to delete model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
logging
.
exception
(
'Failed to delete model'
)
...
...
@@ -412,6 +412,6 @@ class ModelView(BaseModelView):
'
%(count)
s models were successfully deleted.'
,
count
,
count
=
count
))
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to delete models.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
flask_admin/contrib/peeweemodel/view.py
View file @
527de698
...
...
@@ -341,7 +341,7 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved
save_inline
(
form
,
model
)
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to create model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
logging
.
exception
(
'Failed to create model'
)
return
False
...
...
@@ -358,7 +358,7 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved
save_inline
(
form
,
model
)
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to update model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
logging
.
exception
(
'Failed to update model'
)
return
False
...
...
@@ -372,7 +372,7 @@ class ModelView(BaseModelView):
self
.
on_model_delete
(
model
)
model
.
delete_instance
(
recursive
=
True
)
return
True
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to delete model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
logging
.
exception
(
'Failed to delete model'
)
return
False
...
...
@@ -407,5 +407,5 @@ class ModelView(BaseModelView):
'
%(count)
s models were successfully deleted.'
,
count
,
count
=
count
))
except
Exception
,
ex
:
except
Exception
as
ex
:
flash
(
gettext
(
'Failed to delete models.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
flask_admin/tests/sqlamodel/test_basic.py
View file @
527de698
...
...
@@ -84,10 +84,10 @@ def test_model():
eq_
(
view
.
_filters
,
None
)
# Verify form
eq_
(
view
.
_create_form_class
.
test1
.
field_class
,
wtf
.
TextField
)
eq_
(
view
.
_create_form_class
.
test2
.
field_class
,
wtf
.
TextField
)
eq_
(
view
.
_create_form_class
.
test3
.
field_class
,
wtf
.
TextAreaField
)
eq_
(
view
.
_create_form_class
.
test4
.
field_class
,
wtf
.
TextAreaField
)
eq_
(
view
.
_create_form_class
.
test1
.
field_class
,
fields
.
TextField
)
eq_
(
view
.
_create_form_class
.
test2
.
field_class
,
fields
.
TextField
)
eq_
(
view
.
_create_form_class
.
test3
.
field_class
,
fields
.
TextAreaField
)
eq_
(
view
.
_create_form_class
.
test4
.
field_class
,
fields
.
TextAreaField
)
# Make some test clients
client
=
app
.
test_client
()
...
...
@@ -110,7 +110,7 @@ def test_model():
rv
=
client
.
get
(
'/admin/model1view/'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'test1large'
in
rv
.
data
)
ok_
(
'test1large'
in
_compat
.
as_unicode
(
rv
.
data
)
)
url
=
'/admin/model1view/edit/?id=
%
s'
%
model
.
id
rv
=
client
.
get
(
url
)
...
...
@@ -159,8 +159,9 @@ def test_list_columns():
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/'
)
ok_
(
'Column1'
in
rv
.
data
)
ok_
(
'Test2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'Column1'
in
data
)
ok_
(
'Test2'
not
in
data
)
def
test_exclude_columns
():
...
...
@@ -170,7 +171,7 @@ def test_exclude_columns():
view
=
CustomModelView
(
Model1
,
db
.
session
,
column_exclude_list
=
[
'test2'
,
'test4'
,
'enum_field'
]
column_exclude_list
=
[
'test2'
,
'test4'
,
'enum_field'
]
)
admin
.
add_view
(
view
)
...
...
@@ -182,8 +183,9 @@ def test_exclude_columns():
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/'
)
ok_
(
'Test1'
in
rv
.
data
)
ok_
(
'Test2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'Test1'
in
data
)
ok_
(
'Test2'
not
in
data
)
def
test_column_searchable_list
():
...
...
@@ -209,8 +211,9 @@ def test_column_searchable_list():
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/?search=model1'
)
ok_
(
'model1'
in
rv
.
data
)
ok_
(
'model2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'model1'
in
data
)
ok_
(
'model2'
not
in
data
)
def
test_column_filters
():
...
...
@@ -304,13 +307,15 @@ def test_column_filters():
rv
=
client
.
get
(
'/admin/model1view/?flt0_0=model1_obj1'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'model1_obj1'
in
rv
.
data
)
ok_
(
'model1_obj2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'model1_obj1'
in
data
)
ok_
(
'model1_obj2'
not
in
data
)
rv
=
client
.
get
(
'/admin/model1view/?flt0_5=model1_obj1'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'model1_obj1'
in
rv
.
data
)
ok_
(
'model1_obj2'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'model1_obj1'
in
data
)
ok_
(
'model1_obj2'
in
data
)
# Test different filter types
view
=
CustomModelView
(
Model2
,
db
.
session
,
...
...
@@ -336,10 +341,11 @@ def test_column_filters():
rv
=
client
.
get
(
'/admin/_model2/?flt1_0=1'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'model2_obj1'
in
rv
.
data
)
ok_
(
'model2_obj2'
in
rv
.
data
)
ok_
(
'model2_obj3'
not
in
rv
.
data
)
ok_
(
'model2_obj4'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'model2_obj1'
in
data
)
ok_
(
'model2_obj2'
in
data
)
ok_
(
'model2_obj3'
not
in
data
)
ok_
(
'model2_obj4'
not
in
data
)
def
test_url_args
():
...
...
@@ -362,35 +368,42 @@ def test_url_args():
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/'
)
ok_
(
'data1'
in
rv
.
data
)
ok_
(
'data3'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'data1'
in
data
)
ok_
(
'data3'
not
in
data
)
# page
rv
=
client
.
get
(
'/admin/model1view/?page=1'
)
ok_
(
'data1'
not
in
rv
.
data
)
ok_
(
'data3'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'data1'
not
in
data
)
ok_
(
'data3'
in
data
)
# sort
rv
=
client
.
get
(
'/admin/model1view/?sort=0&desc=1'
)
ok_
(
'data1'
not
in
rv
.
data
)
ok_
(
'data3'
in
rv
.
data
)
ok_
(
'data4'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'data1'
not
in
data
)
ok_
(
'data3'
in
data
)
ok_
(
'data4'
in
data
)
# search
rv
=
client
.
get
(
'/admin/model1view/?search=data1'
)
ok_
(
'data1'
in
rv
.
data
)
ok_
(
'data2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'data1'
in
data
)
ok_
(
'data2'
not
in
data
)
rv
=
client
.
get
(
'/admin/model1view/?search=^data1'
)
ok_
(
'data2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'data2'
not
in
data
)
# like
rv
=
client
.
get
(
'/admin/model1view/?flt0=0&flt0v=data1'
)
ok_
(
'data1'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'data1'
in
data
)
# not like
rv
=
client
.
get
(
'/admin/model1view/?flt0=1&flt0v=data1'
)
ok_
(
'data2'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'data2'
in
data
)
def
test_non_int_pk
():
...
...
@@ -416,11 +429,13 @@ def test_non_int_pk():
rv
=
client
.
get
(
'/admin/modelview/'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'test1'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'test1'
in
data
)
rv
=
client
.
get
(
'/admin/modelview/edit/?id=test1'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'test2'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'test2'
in
data
)
def
test_form
():
...
...
@@ -472,7 +487,7 @@ def test_on_model_change_delete():
client
=
app
.
test_client
()
client
.
post
(
'/admin/model1view/new/'
,
data
=
dict
(
test1
=
'test1large'
,
test2
=
'test2'
))
data
=
dict
(
test1
=
'test1large'
,
test2
=
'test2'
))
model
=
db
.
session
.
query
(
Model1
)
.
first
()
eq_
(
model
.
test1
,
'TEST1LARGE'
)
...
...
flask_admin/tests/sqlamodel/test_inlineform.py
View file @
527de698
...
...
@@ -8,6 +8,7 @@ from flask.ext.admin.contrib.sqlamodel.fields import InlineModelFormList
from
.
import
setup
def
test_inline_form
():
app
,
db
,
admin
=
setup
()
client
=
app
.
test_client
()
...
...
flask_admin/tests/test_model.py
View file @
527de698
...
...
@@ -77,7 +77,7 @@ class MockModelView(base.BaseModelView):
# Data
def
get_list
(
self
,
page
,
sort_field
,
sort_desc
,
search
,
filters
):
self
.
search_arguments
.
append
((
page
,
sort_field
,
sort_desc
,
search
,
filters
))
return
len
(
self
.
all_models
),
self
.
all_models
.
itervalues
(
)
return
len
(
self
.
all_models
),
_compat
.
itervalues
(
self
.
all_models
)
def
get_one
(
self
,
id
):
return
self
.
all_models
.
get
(
int
(
id
))
...
...
@@ -153,7 +153,8 @@ def test_mockview():
# Try model edit view
rv
=
client
.
get
(
'/admin/modelview/edit/?id=3'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'test1'
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'test1'
in
data
)
rv
=
client
.
post
(
'/admin/modelview/edit/?id=3'
,
data
=
dict
(
col1
=
'test!'
,
col2
=
'test@'
,
col3
=
'test#'
))
...
...
@@ -208,13 +209,13 @@ def test_templates():
view
.
edit_template
=
'mock.html'
rv
=
client
.
get
(
'/admin/modelview/'
)
eq_
(
rv
.
data
,
'Success!'
)
eq_
(
rv
.
data
,
b
'Success!'
)
rv
=
client
.
get
(
'/admin/modelview/new/'
)
eq_
(
rv
.
data
,
'Success!'
)
eq_
(
rv
.
data
,
b
'Success!'
)
rv
=
client
.
get
(
'/admin/modelview/edit/?id=1'
)
eq_
(
rv
.
data
,
'Success!'
)
eq_
(
rv
.
data
,
b
'Success!'
)
def
test_list_columns
():
...
...
@@ -231,8 +232,9 @@ def test_list_columns():
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/modelview/'
)
ok_
(
'Column1'
in
rv
.
data
)
ok_
(
'Col2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'Column1'
in
data
)
ok_
(
'Col2'
not
in
data
)
def
test_exclude_columns
():
...
...
@@ -246,8 +248,9 @@ def test_exclude_columns():
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/modelview/'
)
ok_
(
'Col1'
in
rv
.
data
)
ok_
(
'Col2'
not
in
rv
.
data
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
ok_
(
'Col1'
in
data
)
ok_
(
'Col2'
not
in
data
)
def
test_sortable_columns
():
...
...
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