Commit 4876f487 authored by Serge S. Koval's avatar Serge S. Koval

Renamed MongoEngine InlineFormAdmin to EmbeddedForm to preserve backwards compatibility

parent 1aec2a18
......@@ -4,3 +4,4 @@ except ImportError:
raise Exception('Please install flask-mongoengine in order to use mongoengine backend')
from .view import ModelView
from .form import EmbeddedForm
......@@ -7,7 +7,7 @@ from wtforms import fields, validators
from flask.ext.mongoengine.wtf import orm, fields as mongo_fields
from flask.ext.admin import form
from flask.ext.admin.model.form import FieldPlaceholder, InlineFormAdmin
from flask.ext.admin.model.form import FieldPlaceholder, InlineBaseFormAdmin
from flask.ext.admin.model.fields import InlineFieldList
from flask.ext.admin.model.widgets import InlineFormWidget
from flask.ext.admin._compat import iteritems
......@@ -15,6 +15,10 @@ from flask.ext.admin._compat import iteritems
from .fields import ModelFormField, MongoFileField, MongoImageField
class EmbeddedForm(InlineBaseFormAdmin):
pass
class CustomModelConverter(orm.ModelConverter):
"""
Customized MongoEngine form conversion class.
......@@ -39,18 +43,16 @@ class CustomModelConverter(orm.ModelConverter):
def _get_subdocument_config(self, name):
config = getattr(self.view, 'form_subdocuments', {})
print 'x', name, config
p = config.get(name)
if not p:
return InlineFormAdmin()
return EmbeddedForm()
if isinstance(p, dict):
return InlineFormAdmin(**p)
elif isinstance(p, InlineFormAdmin):
return EmbeddedForm(**p)
elif isinstance(p, EmbeddedForm):
return p
raise ValueError('Invalid subdocument type: expecting dict or instance of InlineFormAdmin, got %s' % type(p))
raise ValueError('Invalid subdocument type: expecting dict or instance of flask.ext.admin.contrib.mongoengine.EmbeddedForm, got %s' % type(p))
def clone_converter(self, view):
return self.__class__(view)
......
......@@ -103,7 +103,7 @@ class ModelView(BaseModelView):
Subdocument configuration options.
This field accepts dictionary, where key is field name and value is either dictionary or instance of the
`InlineFormAdmin`.
`flask.ext.admin.contrib.EmbeddedForm`.
Consider following example::
......@@ -130,7 +130,7 @@ class ModelView(BaseModelView):
It is also possible to use class-based embedded document configuration:
class CommentEmbed(InlineFormAdmin):
class CommentEmbed(EmbeddedForm):
form_columns = ('name',)
class MyAdmin(ModelView):
......@@ -140,10 +140,10 @@ class ModelView(BaseModelView):
Arbitrary depth nesting is supported::
class SomeEmbed(InlineFormAdmin):
class SomeEmbed(EmbeddedForm):
form_excluded_columns = ('test',)
class CommentEmbed(InlineFormAdmin):
class CommentEmbed(EmbeddedForm):
form_columns = ('name',)
form_subdocuments = {
'inner': SomeEmbed()
......
......@@ -4,7 +4,7 @@ from sqlalchemy import Boolean, Column
from flask.ext.admin import form
from flask.ext.admin.form import Select2Field
from flask.ext.admin.model.form import (converts, ModelConverterBase,
InlineModelFormAdmin, InlineModelConverterBase,
InlineFormAdmin, InlineModelConverterBase,
FieldPlaceholder)
from flask.ext.admin.model.helpers import prettify_name
from flask.ext.admin._backwards import get_property
......@@ -437,7 +437,7 @@ class InlineModelConverter(InlineModelConverterBase):
Flask-Admin view object
:param model_converter:
Model converter class. Will be automatically instantiated with
appropriate `InlineModelFormAdmin` instance.
appropriate `InlineFormAdmin` instance.
"""
super(InlineModelConverter, self).__init__(view)
self.session = session
......@@ -449,7 +449,7 @@ class InlineModelConverter(InlineModelConverterBase):
# Special case for model instances
if info is None:
if hasattr(p, '_sa_class_manager'):
return InlineModelFormAdmin(p)
return InlineFormAdmin(p)
else:
model = getattr(p, 'model', None)
......@@ -461,9 +461,9 @@ class InlineModelConverter(InlineModelConverterBase):
if not attr.startswith('_') and attr != 'model':
attrs[attr] = getattr(p, attr)
return InlineModelFormAdmin(model, **attrs)
return InlineFormAdmin(model, **attrs)
info = InlineModelFormAdmin(model, **attrs)
info = InlineFormAdmin(model, **attrs)
return info
......
......@@ -11,14 +11,14 @@ def converts(*args):
return _inner
class InlineFormAdmin(object):
class InlineBaseFormAdmin(object):
"""
Settings for inline form administration.
You can use this class to customize displayed form.
For example::
class MyUserInfoForm(InlineFormAdmin):
class MyUserInfoForm(InlineBaseFormAdmin):
form_columns = ('name', 'email')
"""
_defaults = ['form_base_class', 'form_columns', 'form_excluded_columns', 'form_args', 'form_extra_fields']
......@@ -72,7 +72,7 @@ class InlineFormAdmin(object):
pass
class InlineModelFormAdmin(InlineFormAdmin):
class InlineFormAdmin(InlineBaseFormAdmin):
"""
Settings for inline form administration. Used by relational backends (SQLAlchemy, Peewee), where model
class can not be inherited from the parent model definition.
......@@ -86,7 +86,7 @@ class InlineModelFormAdmin(InlineFormAdmin):
"""
self.model = model
super(InlineModelFormAdmin, self).__init__(**kwargs)
super(InlineFormAdmin, self).__init__(**kwargs)
class ModelConverterBase(object):
......@@ -173,8 +173,8 @@ class InlineModelConverterBase(object):
- Model class
"""
if isinstance(p, tuple):
return InlineModelFormAdmin(p[0], **p[1])
elif isinstance(p, InlineModelFormAdmin):
return InlineFormAdmin(p[0], **p[1])
elif isinstance(p, InlineFormAdmin):
return p
return None
......
......@@ -259,7 +259,7 @@ def test_subdocument_config():
def test_subdocument_class_config():
app, db, admin = setup()
from flask.ext.admin.model.form import InlineFormAdmin
from flask.ext.admin.contrib.mongoengine import EmbeddedForm
class Comment(db.EmbeddedDocument):
name = db.StringField(max_length=20, required=True)
......@@ -269,7 +269,7 @@ def test_subdocument_class_config():
test1 = db.StringField(max_length=20)
subdoc = db.EmbeddedDocumentField(Comment)
class EmbeddedConfig(InlineFormAdmin):
class EmbeddedConfig(EmbeddedForm):
form_columns = ('name',)
# Check only
......
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