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
4ceb004c
Commit
4ceb004c
authored
Oct 22, 2012
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #92 from plaes/inlineform-tests
Add basic tests for SQLAlchemy inlineform implementation
parents
0a1dcfbb
42146456
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
128 additions
and
22 deletions
+128
-22
__init__.py
flask_admin/contrib/peeweemodel/__init__.py
+1
-1
view.py
flask_admin/contrib/sqlamodel/view.py
+4
-2
__init__.py
flask_admin/tests/sqlamodel/__init__.py
+14
-0
test_basic.py
flask_admin/tests/sqlamodel/test_basic.py
+17
-18
test_inlineform.py
flask_admin/tests/sqlamodel/test_inlineform.py
+92
-0
setup.cfg
setup.cfg
+0
-1
No files found.
flask_admin/contrib/peeweemodel/__init__.py
View file @
4ceb004c
...
@@ -2,6 +2,6 @@ try:
...
@@ -2,6 +2,6 @@ try:
import
peewee
import
peewee
import
wtfpeewee
import
wtfpeewee
except
ImportError
:
except
ImportError
:
raise
Exception
(
'Please install peewee and wtfpeewee packages in order to use peewee integration'
)
raise
Exception
(
'Please install peewee and wtf
-
peewee packages in order to use peewee integration'
)
from
.view
import
ModelView
from
.view
import
ModelView
flask_admin/contrib/sqlamodel/view.py
View file @
4ceb004c
...
@@ -340,8 +340,7 @@ class ModelView(BaseModelView):
...
@@ -340,8 +340,7 @@ class ModelView(BaseModelView):
:returns:
:returns:
``True`` for ``String``, ``Unicode``, ``Text``, ``UnicodeText``
``True`` for ``String``, ``Unicode``, ``Text``, ``UnicodeText``
"""
"""
return
(
name
==
'String'
or
name
==
'Unicode'
or
return
name
in
(
'String'
,
'Unicode'
,
'Text'
,
'UnicodeText'
)
name
==
'Text'
or
name
==
'UnicodeText'
)
def
scaffold_filters
(
self
,
name
):
def
scaffold_filters
(
self
,
name
):
"""
"""
...
@@ -590,6 +589,7 @@ class ModelView(BaseModelView):
...
@@ -590,6 +589,7 @@ class ModelView(BaseModelView):
return
True
return
True
except
Exception
,
ex
:
except
Exception
,
ex
:
flash
(
gettext
(
'Failed to create model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
flash
(
gettext
(
'Failed to create model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
self
.
session
.
rollback
()
return
False
return
False
def
update_model
(
self
,
form
,
model
):
def
update_model
(
self
,
form
,
model
):
...
@@ -609,6 +609,7 @@ class ModelView(BaseModelView):
...
@@ -609,6 +609,7 @@ class ModelView(BaseModelView):
return
True
return
True
except
Exception
,
ex
:
except
Exception
,
ex
:
flash
(
gettext
(
'Failed to update model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
flash
(
gettext
(
'Failed to update model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
self
.
session
.
rollback
()
return
False
return
False
def
delete_model
(
self
,
model
):
def
delete_model
(
self
,
model
):
...
@@ -626,6 +627,7 @@ class ModelView(BaseModelView):
...
@@ -626,6 +627,7 @@ class ModelView(BaseModelView):
return
True
return
True
except
Exception
,
ex
:
except
Exception
,
ex
:
flash
(
gettext
(
'Failed to delete model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
flash
(
gettext
(
'Failed to delete model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
self
.
session
.
rollback
()
return
False
return
False
# Default model actions
# Default model actions
...
...
flask_admin/tests/sqlamodel/__init__.py
0 → 100644
View file @
4ceb004c
from
flask
import
Flask
from
flask.ext.admin
import
Admin
from
flask.ext.sqlalchemy
import
SQLAlchemy
def
setup
():
app
=
Flask
(
__name__
)
app
.
config
[
'SECRET_KEY'
]
=
'1'
app
.
config
[
'CSRF_ENABLED'
]
=
False
app
.
config
[
'SQLALCHEMY_DATABASE_URI'
]
=
'sqlite:///'
db
=
SQLAlchemy
(
app
)
admin
=
Admin
(
app
)
return
app
,
db
,
admin
flask_admin/tests/
test_sqlamodel
.py
→
flask_admin/tests/
sqlamodel/test_basic
.py
View file @
4ceb004c
from
nose.tools
import
eq_
,
ok_
,
raises
from
nose.tools
import
eq_
,
ok_
,
raises
from
flask
import
Flask
from
flask.ext
import
wtf
from
flask.ext
import
wtf
from
flask.ext.sqlalchemy
import
SQLAlchemy
from
flask.ext.admin
import
Admin
from
flask.ext.admin.contrib.sqlamodel
import
ModelView
from
flask.ext.admin.contrib.sqlamodel
import
ModelView
from
.
import
setup
class
CustomModelView
(
ModelView
):
class
CustomModelView
(
ModelView
):
def
__init__
(
self
,
model
,
session
,
def
__init__
(
self
,
model
,
session
,
...
@@ -20,7 +16,6 @@ class CustomModelView(ModelView):
...
@@ -20,7 +16,6 @@ class CustomModelView(ModelView):
name
,
category
,
name
,
category
,
endpoint
,
url
)
endpoint
,
url
)
def
create_models
(
db
):
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
):
...
@@ -45,18 +40,6 @@ def create_models(db):
...
@@ -45,18 +40,6 @@ def create_models(db):
return
Model1
,
Model2
return
Model1
,
Model2
def
setup
():
app
=
Flask
(
__name__
)
app
.
config
[
'SECRET_KEY'
]
=
'1'
app
.
config
[
'CSRF_ENABLED'
]
=
False
app
.
config
[
'SQLALCHEMY_DATABASE_URI'
]
=
'sqlite:///'
db
=
SQLAlchemy
(
app
)
admin
=
Admin
(
app
)
return
app
,
db
,
admin
def
test_model
():
def
test_model
():
app
,
db
,
admin
=
setup
()
app
,
db
,
admin
=
setup
()
Model1
,
Model2
=
create_models
(
db
)
Model1
,
Model2
=
create_models
(
db
)
...
@@ -392,3 +375,19 @@ def test_on_model_change_delete():
...
@@ -392,3 +375,19 @@ def test_on_model_change_delete():
client
.
post
(
url
)
client
.
post
(
url
)
ok_
(
view
.
deleted
)
ok_
(
view
.
deleted
)
def
test_multiple_delete
():
app
,
db
,
admin
=
setup
()
M1
,
_
=
create_models
(
db
)
db
.
session
.
add_all
([
M1
(
'a'
),
M1
(
'b'
),
M1
(
'c'
)])
db
.
session
.
commit
()
eq_
(
M1
.
query
.
count
(),
3
)
view
=
ModelView
(
M1
,
db
.
session
)
admin
.
add_view
(
view
)
client
=
app
.
test_client
()
rv
=
client
.
post
(
'/admin/model1view/action/'
,
data
=
dict
(
action
=
'delete'
,
rowid
=
[
1
,
2
,
3
]))
eq_
(
rv
.
status_code
,
302
)
eq_
(
M1
.
query
.
count
(),
0
)
flask_admin/tests/sqlamodel/test_inlineform.py
0 → 100644
View file @
4ceb004c
# -*- coding: utf-8 -*-
from
nose.tools
import
eq_
,
ok_
,
raises
from
flask.ext
import
wtf
from
flask.ext.admin.contrib.sqlamodel
import
ModelView
,
fields
from
.
import
setup
def
test_inline_form
():
app
,
db
,
admin
=
setup
()
client
=
app
.
test_client
()
# Set up models and database
class
User
(
db
.
Model
):
__tablename__
=
'users'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
name
=
db
.
Column
(
db
.
String
,
unique
=
True
)
def
__init__
(
self
,
name
=
None
):
self
.
name
=
name
class
UserInfo
(
db
.
Model
):
__tablename__
=
'user_info'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
key
=
db
.
Column
(
db
.
String
,
nullable
=
False
)
val
=
db
.
Column
(
db
.
String
)
user_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
User
.
id
))
user
=
db
.
relationship
(
User
,
backref
=
db
.
backref
(
'info'
,
cascade
=
"all, delete-orphan"
,
single_parent
=
True
))
db
.
create_all
()
# Set up Admin
class
UserModelView
(
ModelView
):
inline_models
=
(
UserInfo
,)
view
=
UserModelView
(
User
,
db
.
session
)
admin
.
add_view
(
view
)
# Basic tests
ok_
(
view
.
_create_form_class
is
not
None
)
ok_
(
view
.
_edit_form_class
is
not
None
)
eq_
(
view
.
endpoint
,
'userview'
)
# Verify form
eq_
(
view
.
_create_form_class
.
name
.
field_class
,
wtf
.
TextField
)
eq_
(
view
.
_create_form_class
.
info
.
field_class
,
fields
.
InlineModelFormList
)
rv
=
client
.
get
(
'/admin/userview/'
)
eq_
(
rv
.
status_code
,
200
)
rv
=
client
.
get
(
'/admin/userview/new/'
)
eq_
(
rv
.
status_code
,
200
)
# Create
rv
=
client
.
post
(
'/admin/userview/new/'
,
data
=
dict
(
name
=
u'äõüxyz'
))
eq_
(
rv
.
status_code
,
302
)
eq_
(
User
.
query
.
count
(),
1
)
eq_
(
UserInfo
.
query
.
count
(),
0
)
rv
=
client
.
post
(
'/admin/userview/new/'
,
data
=
{
'name'
:
u'fbar'
,
\
'info-0-key'
:
'foo'
,
'info-0-val'
:
'bar'
})
eq_
(
rv
.
status_code
,
302
)
eq_
(
User
.
query
.
count
(),
2
)
eq_
(
UserInfo
.
query
.
count
(),
1
)
# Edit
rv
=
client
.
get
(
'/admin/userview/edit/?id=2'
)
eq_
(
rv
.
status_code
,
200
)
# Edit - update
rv
=
client
.
post
(
'/admin/userview/edit/?id=2'
,
data
=
{
'name'
:
u'barfoo'
,
\
'info-0-id'
:
1
,
'info-0-key'
:
u'xxx'
,
'info-0-val'
:
u'yyy'
})
eq_
(
UserInfo
.
query
.
count
(),
1
)
eq_
(
UserInfo
.
query
.
one
()
.
key
,
u'xxx'
)
# Edit - add & delete
rv
=
client
.
post
(
'/admin/userview/edit/?id=2'
,
data
=
{
'name'
:
u'barf'
,
\
'del-info-0'
:
'on'
,
'info-0-id'
:
'1'
,
'info-0-key'
:
'yyy'
,
'info-0-val'
:
'xxx'
,
'info-1-id'
:
None
,
'info-1-key'
:
u'bar'
,
'info-1-val'
:
u'foo'
})
eq_
(
rv
.
status_code
,
302
)
eq_
(
User
.
query
.
count
(),
2
)
eq_
(
User
.
query
.
get
(
2
)
.
name
,
u'barf'
)
eq_
(
UserInfo
.
query
.
count
(),
1
)
eq_
(
UserInfo
.
query
.
one
()
.
key
,
u'bar'
)
# Delete
rv
=
client
.
post
(
'/admin/userview/delete/?id=2'
)
eq_
(
rv
.
status_code
,
302
)
eq_
(
User
.
query
.
count
(),
1
)
rv
=
client
.
post
(
'/admin/userview/delete/?id=1'
)
eq_
(
rv
.
status_code
,
302
)
eq_
(
User
.
query
.
count
(),
0
)
eq_
(
UserInfo
.
query
.
count
(),
0
)
setup.cfg
View file @
4ceb004c
...
@@ -2,4 +2,3 @@
...
@@ -2,4 +2,3 @@
detailed-errors=1
detailed-errors=1
with-coverage=0
with-coverage=0
debug=nose.loader
debug=nose.loader
tests=flask_admin/tests/test_base.py
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