Commit aa7b70df authored by Serge S. Koval's avatar Serge S. Koval

Python 3 fixes and pymongo test

parent f6132626
......@@ -2,6 +2,7 @@ language: python
python:
- "2.6"
- "2.7"
- "3.3"
install: "pip install -r requirements.txt --use-mirrors"
......
......@@ -10,6 +10,7 @@ from flask.ext.admin._compat import string_types
from flask.ext.admin.babel import gettext, ngettext, lazy_gettext
from flask.ext.admin.model import BaseModelView
from flask.ext.admin.actions import action
from flask.ext.admin.helpers import get_form_data
from .filters import BasePyMongoFilter
from .tools import parse_like_term
......@@ -237,13 +238,14 @@ class ModelView(BaseModelView):
:param id:
Model ID
"""
print('get', id)
return self.coll.find_one({'_id': self._get_valid_id(id)})
def edit_form(self, obj):
"""
Create edit form from the MongoDB document
"""
return self._edit_form_class(**obj)
return self._edit_form_class(get_form_data(), **obj)
def create_model(self, form):
"""
......@@ -338,5 +340,4 @@ class ModelView(BaseModelView):
count,
count=count))
except Exception as ex:
flash(gettext('Failed to delete models. %(error)s', error=str(ex)),
'error')
flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
from nose.tools import eq_, ok_
from nose.plugins.skip import SkipTest
# Skip test on PY3
from flask.ext.admin._compat import PY2
if not PY2:
raise SkipTest('MongoEngine is not Python 3 compatible')
from wtforms import fields
......
from nose.tools import eq_, ok_
from nose.plugins.skip import SkipTest
# Skip test on PY3
from flask.ext.admin._compat import PY2
if not PY2:
raise SkipTest('Peewee is not Python 3 compatible')
import peewee
......
import pymongo
from flask import Flask
from flask.ext.admin import Admin
def setup():
app = Flask(__name__)
app.config['SECRET_KEY'] = '1'
app.config['CSRF_ENABLED'] = False
conn = pymongo.Connection()
db = conn.tests
admin = Admin(app)
return app, db, admin
from nose.tools import eq_, ok_
from wtforms import form, fields
from flask.ext.admin.contrib.pymongo import ModelView
from . import setup
class TestForm(form.Form):
test1 = fields.TextField('Test1')
test2 = fields.TextField('Test2')
class TestView(ModelView):
column_list = ('test1', 'test2', 'test3', 'test4')
column_sortable_list = ('test1', 'test2')
form = TestForm
def test_model():
app, db, admin = setup()
view = TestView(db.test, 'Test')
admin.add_view(view)
# Drop existing data (if any)
db.test.remove()
eq_(view.name, 'Test')
eq_(view.endpoint, 'testview')
ok_('test1' in view._sortable_columns)
ok_('test2' in view._sortable_columns)
ok_(view._create_form_class is not None)
ok_(view._edit_form_class is not None)
eq_(view._search_supported, False)
eq_(view._filters, None)
# Make some test clients
client = app.test_client()
rv = client.get('/admin/testview/')
eq_(rv.status_code, 200)
rv = client.get('/admin/testview/new/')
eq_(rv.status_code, 200)
rv = client.post('/admin/testview/new/',
data=dict(test1='test1large', test2='test2'))
eq_(rv.status_code, 302)
model = db.test.find()[0]
print(model)
eq_(model['test1'], 'test1large')
eq_(model['test2'], 'test2')
rv = client.get('/admin/testview/')
eq_(rv.status_code, 200)
ok_('test1large' in rv.data.decode('utf-8'))
url = '/admin/testview/edit/?id=%s' % model['_id']
rv = client.get(url)
eq_(rv.status_code, 200)
rv = client.post(url,
data=dict(test1='test1small', test2='test2large'))
eq_(rv.status_code, 302)
print(db.test.find()[0])
model = db.test.find()[0]
eq_(model['test1'], 'test1small')
eq_(model['test2'], 'test2large')
url = '/admin/testview/delete/?id=%s' % model['_id']
rv = client.post(url)
eq_(rv.status_code, 302)
eq_(db.test.count(), 0)
......@@ -352,5 +352,5 @@ def test_menu_links():
rv = client.get('/admin/')
data = rv.data.decode('utf-8')
ok_('TestMenuLink1' in data.decode('utf-8'))
ok_('TestMenuLink2' in data.decode('utf-8'))
ok_('TestMenuLink1' in data)
ok_('TestMenuLink2' in data)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment