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

Code cleanup

parent 33b47153
...@@ -4,14 +4,13 @@ ...@@ -4,14 +4,13 @@
import operator import operator
from wtforms import widgets from wtforms import widgets
from wtforms.fields import SelectFieldBase, FormField, FieldList from wtforms.fields import SelectFieldBase, FieldList
from wtforms.validators import ValidationError from wtforms.validators import ValidationError
from .tools import get_primary_key from .tools import get_primary_key
from flask.ext.admin.model.fields import InlineModelFormField
from flask.ext.admin.model.widgets import InlineFormListWidget from flask.ext.admin.model.widgets import InlineFormListWidget
from flask import request
try: try:
from sqlalchemy.orm.util import identity_key from sqlalchemy.orm.util import identity_key
has_identity_key = True has_identity_key = True
...@@ -181,46 +180,18 @@ class QuerySelectMultipleField(QuerySelectField): ...@@ -181,46 +180,18 @@ class QuerySelectMultipleField(QuerySelectField):
raise ValidationError(self.gettext('Not a valid choice')) raise ValidationError(self.gettext('Not a valid choice'))
class InlineModelFormField(FormField):
def __init__(self, form, model, **kwargs):
super(InlineModelFormField, self).__init__(form, **kwargs)
self.model = model
self._pk = get_primary_key(model)
self._should_delete = False
def process(self, formdata, data=None):
super(InlineModelFormField, self).process(formdata, data)
# Grab delete key
key = 'del-%s' % self.id
if key in request.form:
self._should_delete = True
def should_delete(self):
return self._should_delete
def get_pk(self):
return getattr(self.form, self._pk).data
def populate_obj(self, obj, name):
for name, field in self.form._fields.iteritems():
if name != self._pk:
field.populate_obj(obj, name)
class InlineModelFormList(FieldList): class InlineModelFormList(FieldList):
widget = InlineFormListWidget() widget = InlineFormListWidget()
def __init__(self, form, session, model, **kwargs): def __init__(self, form, session, model, prop, **kwargs):
self.form = form self.form = form
self.session = session self.session = session
self.model = model self.model = model
self.prop = prop
self._pk = get_primary_key(model) self._pk = get_primary_key(model)
super(InlineModelFormList, self).__init__(InlineModelFormField(form, model), **kwargs) super(InlineModelFormList, self).__init__(InlineModelFormField(form, self._pk), **kwargs)
def __call__(self, **kwargs): def __call__(self, **kwargs):
return self.widget(self, template=self.form(), **kwargs) return self.widget(self, template=self.form(), **kwargs)
...@@ -251,9 +222,10 @@ class InlineModelFormList(FieldList): ...@@ -251,9 +222,10 @@ class InlineModelFormList(FieldList):
field.populate_obj(model, None) field.populate_obj(model, None)
# Force relation # Force relation
model.user = obj setattr(self.model, self.prop, obj)
def get_pk_from_identity(obj): def get_pk_from_identity(obj):
# TODO: Remove me
cls, key = identity_key(instance=obj) cls, key = identity_key(instance=obj)
return u':'.join(unicode(x) for x in key) return u':'.join(unicode(x) for x in key)
...@@ -311,6 +311,7 @@ def contribute_inline(session, model, form_class, inline_models): ...@@ -311,6 +311,7 @@ def contribute_inline(session, model, form_class, inline_models):
exclude=exclude, exclude=exclude,
hidden_pk=True) hidden_pk=True)
setattr(form_class, p, InlineModelFormList(child_form, session, remote_model)) setattr(form_class, p,
InlineModelFormList(child_form, session, remote_model, p))
return form_class return form_class
import time import time
import datetime import datetime
from flask.globals import _request_ctx_stack
from flask.ext import wtf from flask.ext import wtf
from wtforms import fields, widgets from wtforms import fields, widgets
...@@ -125,3 +127,17 @@ class DateTimePickerWidget(widgets.TextInput): ...@@ -125,3 +127,17 @@ class DateTimePickerWidget(widgets.TextInput):
def __call__(self, field, **kwargs): def __call__(self, field, **kwargs):
kwargs['data-role'] = u'datetimepicker' kwargs['data-role'] = u'datetimepicker'
return super(DateTimePickerWidget, self).__call__(field, **kwargs) return super(DateTimePickerWidget, self).__call__(field, **kwargs)
class RenderTemplateWidget(object):
def __init__(self, template):
self.template = template
def __call__(self, field, **kwargs):
ctx = _request_ctx_stack.top
jinja_env = ctx.app.jinja_env
kwargs['field'] = field
template = jinja_env.get_template(self.template)
return template.render(kwargs)
from flask.globals import _request_ctx_stack from flask.ext.admin.form import RenderTemplateWidget
class RenderTemplateWidget(object):
def __init__(self, template):
self.template = template
def __call__(self, field, **kwargs):
ctx = _request_ctx_stack.top
jinja_env = ctx.app.jinja_env
print kwargs
kwargs['field'] = field
template = jinja_env.get_template(self.template)
return template.render(kwargs)
class InlineFormListWidget(RenderTemplateWidget): class InlineFormListWidget(RenderTemplateWidget):
......
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