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