mirror of
https://github.com/wassname/pyramid_formalchemy.git
synced 2026-06-27 16:10:40 +08:00
add custom view registration
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from pyramid.exceptions import NotFound
|
||||
from sqlalchemy import exceptions as sqlalchemy_exceptions
|
||||
import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -74,7 +75,12 @@ class Models(Base):
|
||||
if item in ('json', 'xhr'):
|
||||
self.request.format = item
|
||||
return self
|
||||
model = ModelListing(self.request, item)
|
||||
|
||||
self.request.model_name = item
|
||||
model_class = self.get_model()
|
||||
factory = type('%s_CustomFactory' % (model_class.__name__,), (ModelListing, model_class), {})
|
||||
model = factory(self.request, item)
|
||||
|
||||
model.__parent__ = self
|
||||
if hasattr(model, '__acl__'):
|
||||
# propagate permissions to parent
|
||||
@@ -102,9 +108,11 @@ class ModelListing(Base):
|
||||
if item in ('json', 'xhr'):
|
||||
self.request.format = item
|
||||
return self
|
||||
if item in ('new',):
|
||||
factory = type('%s_CustomFactory' % (self.request.model_class.__name__,), (Model, self.request.model_class), {})
|
||||
try:
|
||||
model = factory(self.request, item)
|
||||
except NotFound:
|
||||
raise KeyError()
|
||||
model = Model(self.request, item)
|
||||
model.__parent__ = self
|
||||
return model
|
||||
|
||||
@@ -116,7 +124,13 @@ class Model(Base):
|
||||
def __init__(self, request, name):
|
||||
Base.__init__(self, request, name)
|
||||
query = request.session_factory.query(request.model_class)
|
||||
request.model_instance = request.query_factory(request, query, id=name)
|
||||
try:
|
||||
request.model_instance = request.query_factory(request, query, id=name)
|
||||
except sqlalchemy_exceptions.SQLAlchemyError, exc:
|
||||
log.exception(exc)
|
||||
request.session_factory().rollback()
|
||||
raise NotFound(request.path)
|
||||
|
||||
if request.model_instance is None:
|
||||
raise NotFound(request.path)
|
||||
request.model_id = name
|
||||
|
||||
Reference in New Issue
Block a user