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
57c595f5
Commit
57c595f5
authored
Sep 25, 2015
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1054 from pawl/improve_export
Change export_max_rows default to unlimited
parents
fb9dcb94
79eb7765
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
107 additions
and
24 deletions
+107
-24
base.py
flask_admin/model/base.py
+3
-1
test_basic.py
flask_admin/tests/mongoengine/test_basic.py
+34
-0
test_basic.py
flask_admin/tests/peeweemodel/test_basic.py
+35
-0
test_basic.py
flask_admin/tests/sqla/test_basic.py
+34
-0
test_model.py
flask_admin/tests/test_model.py
+1
-23
No files found.
flask_admin/model/base.py
View file @
57c595f5
...
@@ -620,9 +620,11 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -620,9 +620,11 @@ class BaseModelView(BaseView, ActionsMixin):
"""
"""
# Export settings
# Export settings
export_max_rows
=
None
export_max_rows
=
0
"""
"""
Maximum number of rows allowed for export.
Maximum number of rows allowed for export.
Unlimited by default. Uses `page_size` if set to `None`.
"""
"""
# Various settings
# Various settings
...
...
flask_admin/tests/mongoengine/test_basic.py
View file @
57c595f5
...
@@ -1080,3 +1080,37 @@ def test_simple_list_pager():
...
@@ -1080,3 +1080,37 @@ def test_simple_list_pager():
count
,
data
=
view
.
get_list
(
0
,
None
,
None
,
None
,
None
)
count
,
data
=
view
.
get_list
(
0
,
None
,
None
,
None
,
None
)
ok_
(
count
is
None
)
ok_
(
count
is
None
)
def
test_export_csv
():
app
,
db
,
admin
=
setup
()
Model1
,
Model2
=
create_models
(
db
)
view
=
CustomModelView
(
Model1
,
can_export
=
True
,
column_list
=
[
'test1'
,
'test2'
],
export_max_rows
=
2
,
endpoint
=
'row_limit_2'
)
admin
.
add_view
(
view
)
for
x
in
range
(
5
):
fill_db
(
Model1
,
Model2
)
client
=
app
.
test_client
()
# test export_max_rows
rv
=
client
.
get
(
'/admin/row_limit_2/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
"Test1,Test2
\r\n
"
"test1_val_1,test2_val_1
\r\n
"
"test1_val_2,test2_val_2
\r\n
"
==
data
)
view
=
CustomModelView
(
Model1
,
can_export
=
True
,
column_list
=
[
'test1'
,
'test2'
],
endpoint
=
'no_row_limit'
)
admin
.
add_view
(
view
)
# test row limit without export_max_rows
rv
=
client
.
get
(
'/admin/no_row_limit/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
len
(
data
.
splitlines
())
>
21
)
flask_admin/tests/peeweemodel/test_basic.py
View file @
57c595f5
...
@@ -987,3 +987,38 @@ def test_ajax_fk():
...
@@ -987,3 +987,38 @@ def test_ajax_fk():
ok_
(
mdl
.
model1
is
not
None
)
ok_
(
mdl
.
model1
is
not
None
)
eq_
(
mdl
.
model1
.
id
,
model
.
id
)
eq_
(
mdl
.
model1
.
id
,
model
.
id
)
eq_
(
mdl
.
model1
.
test1
,
u'first'
)
eq_
(
mdl
.
model1
.
test1
,
u'first'
)
def
test_export_csv
():
app
,
db
,
admin
=
setup
()
Model1
,
Model2
=
create_models
(
db
)
view
=
CustomModelView
(
Model1
,
can_export
=
True
,
column_list
=
[
'test1'
,
'test2'
],
export_max_rows
=
2
,
endpoint
=
'row_limit_2'
)
admin
.
add_view
(
view
)
for
x
in
range
(
5
):
fill_db
(
Model1
,
Model2
)
client
=
app
.
test_client
()
# test export_max_rows
rv
=
client
.
get
(
'/admin/row_limit_2/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
"Test1,Test2
\r\n
"
"test1_val_1,test2_val_1
\r\n
"
"test1_val_2,test2_val_2
\r\n
"
==
data
)
view
=
CustomModelView
(
Model1
,
can_export
=
True
,
column_list
=
[
'test1'
,
'test2'
],
endpoint
=
'no_row_limit'
)
admin
.
add_view
(
view
)
# test row limit without export_max_rows
rv
=
client
.
get
(
'/admin/no_row_limit/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
len
(
data
.
splitlines
())
>
21
)
flask_admin/tests/sqla/test_basic.py
View file @
57c595f5
...
@@ -2024,3 +2024,37 @@ def test_model_default():
...
@@ -2024,3 +2024,37 @@ def test_model_default():
client
=
app
.
test_client
()
client
=
app
.
test_client
()
rv
=
client
.
post
(
'/admin/model2/new/'
,
data
=
dict
())
rv
=
client
.
post
(
'/admin/model2/new/'
,
data
=
dict
())
assert_true
(
b
'This field is required'
not
in
rv
.
data
)
assert_true
(
b
'This field is required'
not
in
rv
.
data
)
def
test_export_csv
():
app
,
db
,
admin
=
setup
()
Model1
,
Model2
=
create_models
(
db
)
for
x
in
range
(
5
):
fill_db
(
db
,
Model1
,
Model2
)
view
=
CustomModelView
(
Model1
,
db
.
session
,
can_export
=
True
,
column_list
=
[
'test1'
,
'test2'
],
export_max_rows
=
2
,
endpoint
=
'row_limit_2'
)
admin
.
add_view
(
view
)
client
=
app
.
test_client
()
# test export_max_rows
rv
=
client
.
get
(
'/admin/row_limit_2/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
"Test1,Test2
\r\n
"
"test1_val_1,test2_val_1
\r\n
"
"test1_val_2,test2_val_2
\r\n
"
==
data
)
view
=
CustomModelView
(
Model1
,
db
.
session
,
can_export
=
True
,
column_list
=
[
'test1'
,
'test2'
],
endpoint
=
'no_row_limit'
)
admin
.
add_view
(
view
)
# test row limit without export_max_rows
rv
=
client
.
get
(
'/admin/no_row_limit/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
len
(
data
.
splitlines
())
>
21
)
flask_admin/tests/test_model.py
View file @
57c595f5
...
@@ -13,7 +13,6 @@ from flask_admin import Admin, form
...
@@ -13,7 +13,6 @@ from flask_admin import Admin, form
from
flask_admin._compat
import
iteritems
,
itervalues
from
flask_admin._compat
import
iteritems
,
itervalues
from
flask_admin.model
import
base
,
filters
from
flask_admin.model
import
base
,
filters
from
flask_admin.model.template
import
macro
from
flask_admin.model.template
import
macro
from
itertools
import
islice
def
wtforms2_and_up
(
func
):
def
wtforms2_and_up
(
func
):
...
@@ -97,9 +96,7 @@ class MockModelView(base.BaseModelView):
...
@@ -97,9 +96,7 @@ class MockModelView(base.BaseModelView):
def
get_list
(
self
,
page
,
sort_field
,
sort_desc
,
search
,
filters
,
def
get_list
(
self
,
page
,
sort_field
,
sort_desc
,
search
,
filters
,
page_size
=
None
):
page_size
=
None
):
self
.
search_arguments
.
append
((
page
,
sort_field
,
sort_desc
,
search
,
filters
))
self
.
search_arguments
.
append
((
page
,
sort_field
,
sort_desc
,
search
,
filters
))
count
=
len
(
self
.
all_models
)
return
len
(
self
.
all_models
),
itervalues
(
self
.
all_models
)
data
=
islice
(
itervalues
(
self
.
all_models
),
0
,
page_size
)
return
count
,
data
def
get_one
(
self
,
id
):
def
get_one
(
self
,
id
):
return
self
.
all_models
.
get
(
int
(
id
))
return
self
.
all_models
.
get
(
int
(
id
))
...
@@ -605,25 +602,6 @@ def test_export_csv():
...
@@ -605,25 +602,6 @@ def test_export_csv():
eq_
(
rv
.
status_code
,
200
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
u'
\u2013
ut8_1
\u2013
,
\u2013
utf8_2
\u2013\r\n
'
in
data
)
ok_
(
u'
\u2013
ut8_1
\u2013
,
\u2013
utf8_2
\u2013\r\n
'
in
data
)
# test row limit
view_data
=
{
1
:
Model
(
1
,
"col1_1"
,
"col2_1"
),
2
:
Model
(
2
,
"col1_2"
,
"col2_2"
),
3
:
Model
(
3
,
"col1_3"
,
"col2_3"
),
}
view
=
MockModelView
(
Model
,
view_data
,
can_export
=
True
,
column_list
=
[
'col1'
,
'col2'
],
export_max_rows
=
2
,
endpoint
=
'row_limit_2'
)
admin
.
add_view
(
view
)
rv
=
client
.
get
(
'/admin/row_limit_2/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
"Col1,Col2
\r\n
"
"col1_1,col2_1
\r\n
"
"col1_2,col2_2
\r\n
"
==
data
)
# test None type, integer type, column_labels, and column_formatters
# test None type, integer type, column_labels, and column_formatters
view_data
=
{
view_data
=
{
1
:
Model
(
1
,
"col1_1"
,
1
),
1
:
Model
(
1
,
"col1_1"
,
1
),
...
...
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