fix xhr field renderer

This commit is contained in:
Gael Pasgrimaud
2011-04-21 21:10:44 +02:00
parent f9bddff98c
commit db220a4e48
4 changed files with 71 additions and 20 deletions
+1
View File
@@ -8,6 +8,7 @@ develop = . pyramidapp ../fa.jquery ../formalchemy
recipe = zc.recipe.egg
eggs =
pyramid_formalchemy
pyramid_handlers
pyramidapp
fa.jquery
WebTest
+21 -10
View File
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from pyramid.exceptions import NotFound
import logging
log = logging.getLogger(__name__)
@@ -18,22 +19,32 @@ class Base(object):
request.model_class = None
request.model_name = None
request.model_id = None
request.relation = None
request.format = 'html'
def get_model(self):
request = self.request
if request.model_class:
return request.model_class
if request.model_name:
if isinstance(request.model, list):
for model in request.model:
if model.__name__ == request.model_name:
request.model_class = model
return request.model_class
elif hasattr(request.model, request.model_name):
request.model_class = getattr(request.model, request.model_name)
return request.model_class
raise NotFound()
model_name = request.model_name
model_class = None
if isinstance(request.model, list):
for model in request.model:
if model.__name__ == model_name:
model_class = model
break
elif hasattr(request.model, model_name):
model_class = getattr(request.model, model_name)
if model_class is None:
raise NotFound()
request.model_class = model_class
return model_class
def get_instance(self):
model = self.get_model()
session = self.request.session_factory()
return session.query(model).get(self.request.model_id)
class Models(Base):
+10 -9
View File
@@ -112,13 +112,13 @@ class ModelView(object):
request = self.request
model_name = request.model_name
id = request.model_id
items.append((request.fa_url(), 'root'))
items.append((request.fa_url(), 'root', 'root_url'))
if self.model_name:
items.append((request.fa_url(model_name), model_name))
items.append((request.fa_url(model_name), model_name, 'model_url'))
if id and hasattr(fs.model, '__unicode__'):
items.append((request.fa_url(model_name, id), u'%s' % fs.model))
items.append((request.fa_url(model_name, id), u'%s' % self.context.get_instance(), 'instance_url'))
elif id:
items.append((request.fa_url(model_name, id), id))
items.append((request.fa_url(model_name, id), id, 'instance_url'))
return items
def render(self, **kwargs):
@@ -166,7 +166,7 @@ class ModelView(object):
fields = fs.render_fields
if field_name in fields:
field = fields[field_name]
return field.render()
return Response(field.render())
else:
raise NotFound()
return Response(fs.render())
@@ -238,7 +238,7 @@ class ModelView(object):
del fs[field.name]
return fs
def get_grid(self):
def get_grid(self, model_name=None):
"""return a Grid object
Default is::
@@ -249,14 +249,15 @@ class ModelView(object):
return grid
"""
request = self.request
model_name = self.model_name
model_name = model_name or self.model_name
if request.forms and hasattr(request.forms, '%sGrid' % model_name):
g = getattr(request.forms, '%sGrid' % model_name)
g.engine = g.engine or self.engine
g.readonly = True
self.update_grid(g)
return g
grid = self.Grid(self.context.get_model())
model = self.context.get_model()
grid = self.Grid(model)
grid.engine = self.engine
self.update_grid(grid)
return grid
@@ -287,7 +288,7 @@ class ModelView(object):
def listing(self, **kwargs):
"""listing page"""
page = self.get_page()
page = self.get_page(**kwargs)
fs = self.get_grid()
fs = fs.bind(instances=page)
fs.readonly = True
+39 -1
View File
@@ -1,10 +1,13 @@
import transaction
from sqlalchemy import Table
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import Unicode
from sqlalchemy import ForeignKey
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import relation
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session
@@ -37,6 +40,38 @@ class Bar(Base):
id = Column(Integer, primary_key=True)
foo = Column(Unicode(255))
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(Unicode)
group_id = Column(Integer, ForeignKey('groups.id'))
group = relation("Group", backref='users')
def __unicode__(self):
return self.name
group_permissions = Table('group_permissions', Base.metadata,
Column('permission_id', Integer, ForeignKey('permissions.id')),
Column('group_id', Integer, ForeignKey('groups.id')),
)
class Group(Base):
__tablename__ = 'groups'
id = Column(Integer, primary_key=True)
name = Column(Unicode)
permissions = relation("Permission", secondary=group_permissions, backref="groups")
def __unicode__(self):
return self.name
class Permission(Base):
__tablename__ = 'permissions'
id = Column(Integer, primary_key=True)
name = Column(Unicode)
def __unicode__(self):
return self.name
def populate():
session = DBSession()
model = MyModel(name=u'root',value=55)
@@ -46,8 +81,11 @@ def populate():
model = MyModel(name=u'root%i' % i,value=i)
session.add(model)
session.flush()
g = Group()
g.id = 1
g.name = 'group1'
transaction.commit()
def initialize_sql(engine):
DBSession.configure(bind=engine)
Base.metadata.bind = engine