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
d72d381a
Commit
d72d381a
authored
Jun 15, 2013
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated tests and removed as_unicode() compat helper
parent
d7fb51f2
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
86 additions
and
86 deletions
+86
-86
_compat.py
flask_admin/_compat.py
+9
-7
actions.py
flask_admin/actions.py
+4
-4
view.py
flask_admin/contrib/mongoengine/view.py
+5
-5
fields.py
flask_admin/contrib/sqlamodel/fields.py
+4
-4
filters.py
flask_admin/model/filters.py
+4
-4
typefmt.py
flask_admin/model/typefmt.py
+2
-2
test_fileadmin.py
flask_admin/tests/fileadmin/test_fileadmin.py
+1
-2
test_basic.py
flask_admin/tests/sqlamodel/test_basic.py
+50
-52
test_model.py
flask_admin/tests/test_model.py
+7
-6
No files found.
flask_admin/_compat.py
View file @
d72d381a
...
@@ -24,17 +24,16 @@ if not PY2:
...
@@ -24,17 +24,16 @@ if not PY2:
itervalues
=
lambda
d
:
iter
(
d
.
values
())
itervalues
=
lambda
d
:
iter
(
d
.
values
())
iteritems
=
lambda
d
:
iter
(
d
.
items
())
iteritems
=
lambda
d
:
iter
(
d
.
items
())
def
as_unicode
(
text
):
def
as_unicode
(
s
):
if
isinstance
(
text
,
bytes
):
if
isinstance
(
s
,
bytes
):
return
text
.
decode
(
'utf-8'
)
return
s
.
decode
(
'utf-8'
)
return
str
(
text
)
return
str
(
s
)
# Various tools
# Various tools
from
functools
import
reduce
from
functools
import
reduce
from
urllib.parse
import
urljoin
from
urllib.parse
import
urljoin
else
:
else
:
unicode_type
=
unicode
text_type
=
unicode
text_type
=
unicode
string_types
=
(
str
,
unicode
)
string_types
=
(
str
,
unicode
)
integer_types
=
(
int
,
long
)
integer_types
=
(
int
,
long
)
...
@@ -43,8 +42,11 @@ else:
...
@@ -43,8 +42,11 @@ else:
itervalues
=
lambda
d
:
d
.
itervalues
()
itervalues
=
lambda
d
:
d
.
itervalues
()
iteritems
=
lambda
d
:
d
.
iteritems
()
iteritems
=
lambda
d
:
d
.
iteritems
()
def
as_unicode
(
text
):
def
as_unicode
(
s
):
return
unicode
(
text
)
if
isinstance
(
s
,
str
):
return
s
.
decode
(
'utf-8'
)
return
unicode
(
s
)
# Helpers
# Helpers
reduce
=
__builtins__
[
'reduce'
]
reduce
=
__builtins__
[
'reduce'
]
...
...
flask_admin/actions.py
View file @
d72d381a
from
flask
import
request
,
url_for
,
redirect
from
flask
import
request
,
url_for
,
redirect
from
flask.ext.admin
import
tools
,
_compat
from
flask.ext.admin
import
tools
from
flask.ext.admin._compat
import
text_type
def
action
(
name
,
text
,
confirmation
=
None
):
def
action
(
name
,
text
,
confirmation
=
None
):
...
@@ -85,12 +86,11 @@ class ActionsMixin(object):
...
@@ -85,12 +86,11 @@ class ActionsMixin(object):
name
,
text
=
act
name
,
text
=
act
if
self
.
is_action_allowed
(
name
):
if
self
.
is_action_allowed
(
name
):
text
=
_compat
.
as_unicode
(
text
)
actions
.
append
((
name
,
text_type
(
text
))
)
actions
.
append
((
name
,
text
))
confirmation
=
self
.
_actions_data
[
name
][
2
]
confirmation
=
self
.
_actions_data
[
name
][
2
]
if
confirmation
:
if
confirmation
:
actions_confirmation
[
name
]
=
_compat
.
text_type
(
confirmation
)
actions_confirmation
[
name
]
=
text_type
(
confirmation
)
return
actions
,
actions_confirmation
return
actions
,
actions_confirmation
...
...
flask_admin/contrib/mongoengine/view.py
View file @
d72d381a
...
@@ -233,11 +233,11 @@ class ModelView(BaseModelView):
...
@@ -233,11 +233,11 @@ class ModelView(BaseModelView):
def
scaffold_form
(
self
):
def
scaffold_form
(
self
):
# TODO: Fix base_class
# TODO: Fix base_class
form_class
=
model_form
(
self
.
model
,
form_class
=
model_form
(
self
.
model
,
base_class
=
BaseForm
,
base_class
=
BaseForm
,
only
=
self
.
form_columns
,
only
=
self
.
form_columns
,
exclude
=
self
.
form_excluded_columns
,
exclude
=
self
.
form_excluded_columns
,
field_args
=
self
.
form_args
,
field_args
=
self
.
form_args
,
converter
=
self
.
model_form_converter
())
converter
=
self
.
model_form_converter
())
return
form_class
return
form_class
...
...
flask_admin/contrib/sqlamodel/fields.py
View file @
d72d381a
...
@@ -8,7 +8,7 @@ from wtforms.fields import SelectFieldBase
...
@@ -8,7 +8,7 @@ from wtforms.fields import SelectFieldBase
from
wtforms.validators
import
ValidationError
from
wtforms.validators
import
ValidationError
from
.tools
import
get_primary_key
from
.tools
import
get_primary_key
from
flask.ext.admin
import
_compat
from
flask.ext.admin
._compat
import
text_type
,
string_types
from
flask.ext.admin.model.fields
import
InlineFieldList
,
InlineModelFormField
from
flask.ext.admin.model.fields
import
InlineFieldList
,
InlineModelFormField
...
@@ -71,7 +71,7 @@ class QuerySelectField(SelectFieldBase):
...
@@ -71,7 +71,7 @@ class QuerySelectField(SelectFieldBase):
if
get_label
is
None
:
if
get_label
is
None
:
self
.
get_label
=
lambda
x
:
x
self
.
get_label
=
lambda
x
:
x
elif
isinstance
(
get_label
,
_compat
.
string_types
):
elif
isinstance
(
get_label
,
string_types
):
self
.
get_label
=
operator
.
attrgetter
(
get_label
)
self
.
get_label
=
operator
.
attrgetter
(
get_label
)
else
:
else
:
self
.
get_label
=
get_label
self
.
get_label
=
get_label
...
@@ -99,7 +99,7 @@ class QuerySelectField(SelectFieldBase):
...
@@ -99,7 +99,7 @@ class QuerySelectField(SelectFieldBase):
if
self
.
_object_list
is
None
:
if
self
.
_object_list
is
None
:
query
=
self
.
query
or
self
.
query_factory
()
query
=
self
.
query
or
self
.
query_factory
()
get_pk
=
self
.
get_pk
get_pk
=
self
.
get_pk
self
.
_object_list
=
[(
_compat
.
as_unicod
e
(
get_pk
(
obj
)),
obj
)
for
obj
in
query
]
self
.
_object_list
=
[(
text_typ
e
(
get_pk
(
obj
)),
obj
)
for
obj
in
query
]
return
self
.
_object_list
return
self
.
_object_list
def
iter_choices
(
self
):
def
iter_choices
(
self
):
...
@@ -239,4 +239,4 @@ class InlineModelFormList(InlineFieldList):
...
@@ -239,4 +239,4 @@ class InlineModelFormList(InlineFieldList):
def
get_pk_from_identity
(
obj
):
def
get_pk_from_identity
(
obj
):
# TODO: Remove me
# TODO: Remove me
cls
,
key
=
identity_key
(
instance
=
obj
)
cls
,
key
=
identity_key
(
instance
=
obj
)
return
u':'
.
join
(
_compat
.
as_unicod
e
(
x
)
for
x
in
key
)
return
u':'
.
join
(
text_typ
e
(
x
)
for
x
in
key
)
flask_admin/model/filters.py
View file @
d72d381a
from
flask.ext.admin
import
_compat
from
flask.ext.admin
._compat
import
text_type
from
flask.ext.admin.babel
import
lazy_gettext
from
flask.ext.admin.babel
import
lazy_gettext
...
@@ -31,7 +31,7 @@ class BaseFilter(object):
...
@@ -31,7 +31,7 @@ class BaseFilter(object):
Associated administrative view class.
Associated administrative view class.
"""
"""
if
self
.
options
:
if
self
.
options
:
return
[(
v
,
_compat
.
as_unicod
e
(
n
))
for
v
,
n
in
self
.
options
]
return
[(
v
,
text_typ
e
(
n
))
for
v
,
n
in
self
.
options
]
return
None
return
None
...
@@ -83,8 +83,8 @@ class BaseBooleanFilter(BaseFilter):
...
@@ -83,8 +83,8 @@ class BaseBooleanFilter(BaseFilter):
"""
"""
def
__init__
(
self
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
name
,
options
=
None
,
data_type
=
None
):
super
(
BaseBooleanFilter
,
self
)
.
__init__
(
name
,
super
(
BaseBooleanFilter
,
self
)
.
__init__
(
name
,
((
'1'
,
lazy_gettext
(
'Yes'
)),
((
'1'
,
lazy_gettext
(
u
'Yes'
)),
(
'0'
,
lazy_gettext
(
'No'
))),
(
'0'
,
lazy_gettext
(
u
'No'
))),
data_type
)
data_type
)
def
validate
(
self
,
value
):
def
validate
(
self
,
value
):
...
...
flask_admin/model/typefmt.py
View file @
d72d381a
from
jinja2
import
Markup
from
jinja2
import
Markup
from
flask.ext.admin
import
_compat
from
flask.ext.admin
._compat
import
text_type
def
null_formatter
(
view
,
value
):
def
null_formatter
(
view
,
value
):
...
@@ -39,7 +39,7 @@ def list_formatter(view, values):
...
@@ -39,7 +39,7 @@ def list_formatter(view, values):
:param values:
:param values:
Value to check
Value to check
"""
"""
return
u', '
.
join
(
_compat
.
as_unicod
e
(
v
)
for
v
in
values
)
return
u', '
.
join
(
text_typ
e
(
v
)
for
v
in
values
)
BASE_FORMATTERS
=
{
BASE_FORMATTERS
=
{
...
...
flask_admin/tests/fileadmin/test_fileadmin.py
View file @
d72d381a
from
nose.tools
import
eq_
,
ok_
from
nose.tools
import
eq_
,
ok_
import
os.path
as
op
import
os.path
as
op
from
flask.ext.admin
import
_compat
from
flask.ext.admin.contrib
import
fileadmin
from
flask.ext.admin.contrib
import
fileadmin
from
.
import
setup
from
.
import
setup
...
@@ -24,6 +23,6 @@ def test_file_admin():
...
@@ -24,6 +23,6 @@ def test_file_admin():
rv
=
client
.
get
(
'/admin/fileadmin/'
)
rv
=
client
.
get
(
'/admin/fileadmin/'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'dummy.txt'
in
_compat
.
as_unicode
(
rv
.
data
))
ok_
(
'dummy.txt'
in
rv
.
data
.
decode
(
'utf-8'
))
# TODO: Check actions, etc
# TODO: Check actions, etc
flask_admin/tests/sqlamodel/test_basic.py
View file @
d72d381a
...
@@ -2,7 +2,7 @@ from nose.tools import eq_, ok_, raises
...
@@ -2,7 +2,7 @@ from nose.tools import eq_, ok_, raises
from
wtforms
import
fields
from
wtforms
import
fields
from
flask.ext.admin
import
_compat
from
flask.ext.admin
._compat
import
iteritems
from
flask.ext.admin.contrib.sqlamodel
import
ModelView
from
flask.ext.admin.contrib.sqlamodel
import
ModelView
from
.
import
setup
from
.
import
setup
...
@@ -12,7 +12,7 @@ class CustomModelView(ModelView):
...
@@ -12,7 +12,7 @@ class CustomModelView(ModelView):
def
__init__
(
self
,
model
,
session
,
def
__init__
(
self
,
model
,
session
,
name
=
None
,
category
=
None
,
endpoint
=
None
,
url
=
None
,
name
=
None
,
category
=
None
,
endpoint
=
None
,
url
=
None
,
**
kwargs
):
**
kwargs
):
for
k
,
v
in
_compat
.
iteritems
(
kwargs
):
for
k
,
v
in
iteritems
(
kwargs
):
setattr
(
self
,
k
,
v
)
setattr
(
self
,
k
,
v
)
super
(
CustomModelView
,
self
)
.
__init__
(
model
,
session
,
super
(
CustomModelView
,
self
)
.
__init__
(
model
,
session
,
...
@@ -103,14 +103,14 @@ def test_model():
...
@@ -103,14 +103,14 @@ def test_model():
eq_
(
rv
.
status_code
,
302
)
eq_
(
rv
.
status_code
,
302
)
model
=
db
.
session
.
query
(
Model1
)
.
first
()
model
=
db
.
session
.
query
(
Model1
)
.
first
()
eq_
(
model
.
test1
,
'test1large'
)
eq_
(
model
.
test1
,
u
'test1large'
)
eq_
(
model
.
test2
,
'test2'
)
eq_
(
model
.
test2
,
u
'test2'
)
eq_
(
model
.
test3
,
''
)
eq_
(
model
.
test3
,
u
''
)
eq_
(
model
.
test4
,
''
)
eq_
(
model
.
test4
,
u
''
)
rv
=
client
.
get
(
'/admin/model1view/'
)
rv
=
client
.
get
(
'/admin/model1view/'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
'test1large'
in
_compat
.
as_unicode
(
rv
.
data
))
ok_
(
u'test1large'
in
rv
.
data
.
decode
(
'utf-8'
))
url
=
'/admin/model1view/edit/?id=
%
s'
%
model
.
id
url
=
'/admin/model1view/edit/?id=
%
s'
%
model
.
id
rv
=
client
.
get
(
url
)
rv
=
client
.
get
(
url
)
...
@@ -159,7 +159,7 @@ def test_list_columns():
...
@@ -159,7 +159,7 @@ def test_list_columns():
client
=
app
.
test_client
()
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/'
)
rv
=
client
.
get
(
'/admin/model1view/'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'Column1'
in
data
)
ok_
(
'Column1'
in
data
)
ok_
(
'Test2'
not
in
data
)
ok_
(
'Test2'
not
in
data
)
...
@@ -183,7 +183,7 @@ def test_exclude_columns():
...
@@ -183,7 +183,7 @@ def test_exclude_columns():
client
=
app
.
test_client
()
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/'
)
rv
=
client
.
get
(
'/admin/model1view/'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'Test1'
in
data
)
ok_
(
'Test1'
in
data
)
ok_
(
'Test2'
not
in
data
)
ok_
(
'Test2'
not
in
data
)
...
@@ -211,7 +211,7 @@ def test_column_searchable_list():
...
@@ -211,7 +211,7 @@ def test_column_searchable_list():
client
=
app
.
test_client
()
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/?search=model1'
)
rv
=
client
.
get
(
'/admin/model1view/?search=model1'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'model1'
in
data
)
ok_
(
'model1'
in
data
)
ok_
(
'model2'
not
in
data
)
ok_
(
'model2'
not
in
data
)
...
@@ -230,24 +230,23 @@ def test_column_filters():
...
@@ -230,24 +230,23 @@ def test_column_filters():
eq_
(
len
(
view
.
_filters
),
4
)
eq_
(
len
(
view
.
_filters
),
4
)
eq_
(
view
.
_filter_dict
,
{
eq_
(
view
.
_filter_dict
,
{
'Test1'
:
[
u'Test1'
:
[
(
0
,
'equals'
),
(
0
,
u'equals'
),
(
1
,
'not equal'
),
(
1
,
u'not equal'
),
(
2
,
'contains'
),
(
2
,
u'contains'
),
(
3
,
'not contains'
)
(
3
,
u'not contains'
)
],
]})
})
# Test filter that references property
# Test filter that references property
view
=
CustomModelView
(
Model2
,
db
.
session
,
view
=
CustomModelView
(
Model2
,
db
.
session
,
column_filters
=
[
'model1'
])
column_filters
=
[
'model1'
])
eq_
(
view
.
_filter_dict
,
{
eq_
(
view
.
_filter_dict
,
{
'Model1 / Test1'
:
[
u
'Model1 / Test1'
:
[
(
0
,
'equals'
),
(
0
,
u
'equals'
),
(
1
,
'not equal'
),
(
1
,
u
'not equal'
),
(
2
,
'contains'
),
(
2
,
u
'contains'
),
(
3
,
'not contains'
)
(
3
,
u
'not contains'
)
],
],
'Model1 / Test2'
:
[
'Model1 / Test2'
:
[
(
4
,
'equals'
),
(
4
,
'equals'
),
...
@@ -255,27 +254,26 @@ def test_column_filters():
...
@@ -255,27 +254,26 @@ def test_column_filters():
(
6
,
'contains'
),
(
6
,
'contains'
),
(
7
,
'not contains'
)
(
7
,
'not contains'
)
],
],
'Model1 / Test3'
:
[
u
'Model1 / Test3'
:
[
(
8
,
'equals'
),
(
8
,
u
'equals'
),
(
9
,
'not equal'
),
(
9
,
u
'not equal'
),
(
10
,
'contains'
),
(
10
,
u
'contains'
),
(
11
,
'not contains'
)
(
11
,
u
'not contains'
)
],
],
'Model1 / Test4'
:
[
u
'Model1 / Test4'
:
[
(
12
,
'equals'
),
(
12
,
u
'equals'
),
(
13
,
'not equal'
),
(
13
,
u
'not equal'
),
(
14
,
'contains'
),
(
14
,
u
'contains'
),
(
15
,
'not contains'
)
(
15
,
u
'not contains'
)
],
],
'Model1 / Bool Field'
:
[
u
'Model1 / Bool Field'
:
[
(
16
,
'equals'
),
(
16
,
u
'equals'
),
(
17
,
'not equal'
),
(
17
,
u
'not equal'
),
],
],
'Model1 / Enum Field'
:
[
u
'Model1 / Enum Field'
:
[
(
18
,
u'equals'
),
(
18
,
u'equals'
),
(
19
,
u'not equal'
),
(
19
,
u'not equal'
),
]
]})
})
# Test filter with a dot
# Test filter with a dot
view
=
CustomModelView
(
Model2
,
db
.
session
,
view
=
CustomModelView
(
Model2
,
db
.
session
,
...
@@ -285,8 +283,8 @@ def test_column_filters():
...
@@ -285,8 +283,8 @@ def test_column_filters():
'Model1 / Bool Field'
:
[
'Model1 / Bool Field'
:
[
(
0
,
'equals'
),
(
0
,
'equals'
),
(
1
,
'not equal'
),
(
1
,
'not equal'
),
]
,
]
})
})
# Fill DB
# Fill DB
model1_obj1
=
Model1
(
'model1_obj1'
,
bool_field
=
True
)
model1_obj1
=
Model1
(
'model1_obj1'
,
bool_field
=
True
)
model1_obj2
=
Model1
(
'model1_obj2'
)
model1_obj2
=
Model1
(
'model1_obj2'
)
...
@@ -307,13 +305,13 @@ def test_column_filters():
...
@@ -307,13 +305,13 @@ def test_column_filters():
rv
=
client
.
get
(
'/admin/model1view/?flt0_0=model1_obj1'
)
rv
=
client
.
get
(
'/admin/model1view/?flt0_0=model1_obj1'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'model1_obj1'
in
data
)
ok_
(
'model1_obj1'
in
data
)
ok_
(
'model1_obj2'
not
in
data
)
ok_
(
'model1_obj2'
not
in
data
)
rv
=
client
.
get
(
'/admin/model1view/?flt0_5=model1_obj1'
)
rv
=
client
.
get
(
'/admin/model1view/?flt0_5=model1_obj1'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'model1_obj1'
in
data
)
ok_
(
'model1_obj1'
in
data
)
ok_
(
'model1_obj2'
in
data
)
ok_
(
'model1_obj2'
in
data
)
...
@@ -341,7 +339,7 @@ def test_column_filters():
...
@@ -341,7 +339,7 @@ def test_column_filters():
rv
=
client
.
get
(
'/admin/_model2/?flt1_0=1'
)
rv
=
client
.
get
(
'/admin/_model2/?flt1_0=1'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'model2_obj1'
in
data
)
ok_
(
'model2_obj1'
in
data
)
ok_
(
'model2_obj2'
in
data
)
ok_
(
'model2_obj2'
in
data
)
ok_
(
'model2_obj3'
not
in
data
)
ok_
(
'model2_obj3'
not
in
data
)
...
@@ -368,41 +366,41 @@ def test_url_args():
...
@@ -368,41 +366,41 @@ def test_url_args():
client
=
app
.
test_client
()
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/model1view/'
)
rv
=
client
.
get
(
'/admin/model1view/'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'data1'
in
data
)
ok_
(
'data1'
in
data
)
ok_
(
'data3'
not
in
data
)
ok_
(
'data3'
not
in
data
)
# page
# page
rv
=
client
.
get
(
'/admin/model1view/?page=1'
)
rv
=
client
.
get
(
'/admin/model1view/?page=1'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'data1'
not
in
data
)
ok_
(
'data1'
not
in
data
)
ok_
(
'data3'
in
data
)
ok_
(
'data3'
in
data
)
# sort
# sort
rv
=
client
.
get
(
'/admin/model1view/?sort=0&desc=1'
)
rv
=
client
.
get
(
'/admin/model1view/?sort=0&desc=1'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'data1'
not
in
data
)
ok_
(
'data1'
not
in
data
)
ok_
(
'data3'
in
data
)
ok_
(
'data3'
in
data
)
ok_
(
'data4'
in
data
)
ok_
(
'data4'
in
data
)
# search
# search
rv
=
client
.
get
(
'/admin/model1view/?search=data1'
)
rv
=
client
.
get
(
'/admin/model1view/?search=data1'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'data1'
in
data
)
ok_
(
'data1'
in
data
)
ok_
(
'data2'
not
in
data
)
ok_
(
'data2'
not
in
data
)
rv
=
client
.
get
(
'/admin/model1view/?search=^data1'
)
rv
=
client
.
get
(
'/admin/model1view/?search=^data1'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'data2'
not
in
data
)
ok_
(
'data2'
not
in
data
)
# like
# like
rv
=
client
.
get
(
'/admin/model1view/?flt0=0&flt0v=data1'
)
rv
=
client
.
get
(
'/admin/model1view/?flt0=0&flt0v=data1'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'data1'
in
data
)
ok_
(
'data1'
in
data
)
# not like
# not like
rv
=
client
.
get
(
'/admin/model1view/?flt0=1&flt0v=data1'
)
rv
=
client
.
get
(
'/admin/model1view/?flt0=1&flt0v=data1'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'data2'
in
data
)
ok_
(
'data2'
in
data
)
...
@@ -429,12 +427,12 @@ def test_non_int_pk():
...
@@ -429,12 +427,12 @@ def test_non_int_pk():
rv
=
client
.
get
(
'/admin/modelview/'
)
rv
=
client
.
get
(
'/admin/modelview/'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test1'
in
data
)
ok_
(
'test1'
in
data
)
rv
=
client
.
get
(
'/admin/modelview/edit/?id=test1'
)
rv
=
client
.
get
(
'/admin/modelview/edit/?id=test1'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test2'
in
data
)
ok_
(
'test2'
in
data
)
...
...
flask_admin/tests/test_model.py
View file @
d72d381a
...
@@ -4,7 +4,8 @@ from flask import Flask
...
@@ -4,7 +4,8 @@ from flask import Flask
from
wtforms
import
fields
from
wtforms
import
fields
from
flask.ext.admin
import
Admin
,
form
,
_compat
from
flask.ext.admin
import
Admin
,
form
from
flask.ext.admin._compat
import
iteritems
,
itervalues
from
flask.ext.admin.model
import
base
,
filters
from
flask.ext.admin.model
import
base
,
filters
...
@@ -35,7 +36,7 @@ class MockModelView(base.BaseModelView):
...
@@ -35,7 +36,7 @@ class MockModelView(base.BaseModelView):
def
__init__
(
self
,
model
,
name
=
None
,
category
=
None
,
endpoint
=
None
,
url
=
None
,
def
__init__
(
self
,
model
,
name
=
None
,
category
=
None
,
endpoint
=
None
,
url
=
None
,
**
kwargs
):
**
kwargs
):
# Allow to set any attributes from parameters
# Allow to set any attributes from parameters
for
k
,
v
in
_compat
.
iteritems
(
kwargs
):
for
k
,
v
in
iteritems
(
kwargs
):
setattr
(
self
,
k
,
v
)
setattr
(
self
,
k
,
v
)
super
(
MockModelView
,
self
)
.
__init__
(
model
,
name
,
category
,
endpoint
,
url
)
super
(
MockModelView
,
self
)
.
__init__
(
model
,
name
,
category
,
endpoint
,
url
)
...
@@ -77,7 +78,7 @@ class MockModelView(base.BaseModelView):
...
@@ -77,7 +78,7 @@ class MockModelView(base.BaseModelView):
# Data
# Data
def
get_list
(
self
,
page
,
sort_field
,
sort_desc
,
search
,
filters
):
def
get_list
(
self
,
page
,
sort_field
,
sort_desc
,
search
,
filters
):
self
.
search_arguments
.
append
((
page
,
sort_field
,
sort_desc
,
search
,
filters
))
self
.
search_arguments
.
append
((
page
,
sort_field
,
sort_desc
,
search
,
filters
))
return
len
(
self
.
all_models
),
_compat
.
itervalues
(
self
.
all_models
)
return
len
(
self
.
all_models
),
itervalues
(
self
.
all_models
)
def
get_one
(
self
,
id
):
def
get_one
(
self
,
id
):
return
self
.
all_models
.
get
(
int
(
id
))
return
self
.
all_models
.
get
(
int
(
id
))
...
@@ -153,7 +154,7 @@ def test_mockview():
...
@@ -153,7 +154,7 @@ def test_mockview():
# Try model edit view
# Try model edit view
rv
=
client
.
get
(
'/admin/modelview/edit/?id=3'
)
rv
=
client
.
get
(
'/admin/modelview/edit/?id=3'
)
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'test1'
in
data
)
ok_
(
'test1'
in
data
)
rv
=
client
.
post
(
'/admin/modelview/edit/?id=3'
,
rv
=
client
.
post
(
'/admin/modelview/edit/?id=3'
,
...
@@ -232,7 +233,7 @@ def test_list_columns():
...
@@ -232,7 +233,7 @@ def test_list_columns():
client
=
app
.
test_client
()
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/modelview/'
)
rv
=
client
.
get
(
'/admin/modelview/'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'Column1'
in
data
)
ok_
(
'Column1'
in
data
)
ok_
(
'Col2'
not
in
data
)
ok_
(
'Col2'
not
in
data
)
...
@@ -248,7 +249,7 @@ def test_exclude_columns():
...
@@ -248,7 +249,7 @@ def test_exclude_columns():
client
=
app
.
test_client
()
client
=
app
.
test_client
()
rv
=
client
.
get
(
'/admin/modelview/'
)
rv
=
client
.
get
(
'/admin/modelview/'
)
data
=
_compat
.
as_unicode
(
rv
.
data
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
ok_
(
'Col1'
in
data
)
ok_
(
'Col1'
in
data
)
ok_
(
'Col2'
not
in
data
)
ok_
(
'Col2'
not
in
data
)
...
...
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