Having understood Traversal and the whole resource and context concepts from my question, I tried some tutorial examples that played with the Hybrid routing as stated in the documentation. I kind of understand it if not for some minor problems:
If I were to traverse the following URL: http://example.com/product/123/edit with the following add_route configuration:
config = Configurator(settings=**settings, root_factory=RootFactory)
config.add_route('product_edit', '/product/{pid}/edit', factory=ProductFactory, traverse='/{pid}/edit')
config.add_view(route_name='product_edit', name='edit', renderer='edit.mako')
Does it mean that when I supply a product factory to the add_route function, the root resource factory is changed to the product factory (hence product factory is now the new Root resource)?
If the root resource is indeed changed to the ProductFactory for traversal, what would I set the
__parent__&__name__attributes of the ProductFactory to? Because it looks like the__parent__will beNone, am I correct?
Here's my ProductFactory code:
class ProductFactory(object):
__name__ = 'product'
__parent__ = None
def __getitem__(self, key):
if key.isnumber():
try:
p = sess_.query(model.Product).filter(pid=key).one()
except:
raise DBException()
if p:
return p
else:
return KeyError