If you want to stick with Traversal, don't forget that you have request.subpath available to you. For the path "/blog/archive/ 2011/01/29/my-post-about-pyramid", you could have an Archive context whose default (unnamed) view would be called with a request that included request.subpath = ['2011', '01', '29', 'my-post-about- pyramid'].
The view would then call a method on the Archive context using arguments constructed from the request.subpath. The Archive would in turn make a single call to Mongo. A path like '/blog/archive/2011/01' would require some logic in the view, to choose a different Archive method and a different template to show a listing of posts for January, or perhaps redirect to /blog/month/2011/01 . So if you are using Traversal in this way, the logic for parsing the path lives in the view and/or the context. With URL Dispatch it's in the configuration. -- Wade On Jan 29, 9:14 pm, oO <oliv...@ozoux.com> wrote: > Sorry if this is a newbie question, but I'm finding that I'm a little > bit lost when it comes to the best way to implement an example > application using MongoDB (or any non-ZODB datastore) and traversal. > > Conceptually, I like the idea of traversal instead of URL Dispatch but > I find I'm a little bit lost as to what is the best implementation in > practice, specially when not relying on ZOBD to handle the object > relationship > > As part of the application, I'm implementing a blog section, which > uses only 2 basic document (in MongoDB terms), a "Blog" and a > "BlogEntry". however, from an application perspective, the URLs I need > to deal with are in the form > > <Blog>/archive/{year}/{month}/{day}/<BlogEntry> > > for example: > > /blog/archive/2011/01/29/my-post-about-pyramid > > Of course, I'd eventually want to have my <Blog> resource live > anywhere I want in the application, so using traversal makes a lot of > sense. But I almost feel that the parts between <Blog> and <BlogPost> > in my tree are better expressed as a URL Dispatch style patterns than > by creating resources, specially if resolving the resources means a > roundtrip to the database at every single step: > > /blog > DB do we have an object named "blog"? yes, it's a BlogResource > /blog/archive > BlogResource objects have an implicit child called "archive" > /blog/archive/2011 > DB Does this particular BlogResource "blog" have posts for the year > 2011? > /blog/archive/2011/01 > DB Does this particular BlogResource "blog" have posts for the month > 2011/01? > /blog/archive/2011/01/29 > DB Does this particular BlogResource "blog" have posts for the month > 2011/01/29? > /blog/archive/2011/01/29/my-post-about-pyramid > DB Does this particular BlogResource "blog" have a > BlogPostResource 2011/01/29/my-post-about-pyramid? > > Of course I could also stop anywhere in between , where I would want > to see a list of BlogPosts matching that particular date range. But It > seems crazy that I should have 5 different calls to the DB to resolve > that path, when I would probably want, once I know I have traversed to > a Blog object, to try to resolve the rest of the path with a single > call to the DB. > > but I would love to not have to worry about the view infrastructure, > because one of the things I liked about Zope is being able to declare > views after the fact, completely separate from the resource objects, > so I would imagine I could have "/blog/json" or "/blog/archive/atom" > or "/blog/archive/2011/01/29/my-post-about-pyramid/edit" all being > valid URL as well, which should match to explicit views and not just > resources. > > QUESTIONS: > > - Am I thinking too hard, and should I just use URL Traversal instead? > - Should I just do what ZODB does and implement the full resource > hierarchy explicitely in my DB? > - Is there a way to create hybrid URLDispatch + Traversal application > when the traversal happens first, and a resource can trigger a route > match on the remaining portion of the URL? > > oO -- You received this message because you are subscribed to the Google Groups "pylons-devel" group. To post to this group, send email to pylons-devel@googlegroups.com. To unsubscribe from this group, send email to pylons-devel+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/pylons-devel?hl=en.