Jeff Hinrichs - DM&T
jeffh at dundeemt.com
Fri May 4 01:18:56 EDT 2007
On 5/3/07, Graham Dumpleton <graham.dumpleton at gmail.com> wrote: > On 04/05/07, Jeff Hinrichs - DM&T <jeffh at dundeemt.com> wrote: > > On 5/3/07, Jeff Hinrichs - DM&T <jeffh at dundeemt.com> wrote: > > > On 5/3/07, Graham Dumpleton <graham.dumpleton at gmail.com> wrote: > > > > On 04/05/07, Jeff Hinrichs - DM&T <jeffh at dundeemt.com> wrote: > > > > > with mod_python + vampire what is the proper way to dispatch something like: > > > > > /jobs/view/7 > > > > > > > > > > I'm thinking of this idiom since it is common in some other frameworks, > > > > > > > > > > def _jobs_view(req,path): > > > > > return 'using _jobs_view' > > > > > > > > > > def _jobs(req, path): > > > > > d = path.split('/') > > > > > if d[1] = 'view': > > > > > return _jobs_view(req, path) > > > > > else: > > > > > return 'unknown action' > > > > > > > > > > job = vampire.PathInfo(_jobs) > > > > > > > > > > > > > > > I'm trying to make a RESTful api, i.e. /jobs/view/N, /jobs/edit/N, etc > > > > > > > > From memory and thus untested, but best to use an object instance to > > > > create the URL hierarchy for the 'job/view' component of path, then > > > > use PathInfo wrapper. > > > > > > > > def _view(req, path): > > > > return path > > > > > > > > def Node: pass > > > > > > > > job = Node() > > > > job.view = vampire.PathInfo(_view) > > > > > > > > or being more explicit by creating a class for the actual concept. > > > > > > > > class Job: > > > > def _view(self, req, path): > > > > return path > > > > view = vampire.PathInfo(_view) > > > > > > > > job = Job() > > > > > > > > If using version of Python with decorators, sure you could come up > > > > with a decorator which allowed you to say: > > > > > > > > class Job: > > > > @pass_path_as_argument > > > > def view(self, req, path): > > > > return path > > > > > > > > Graham > > > > > > > > > > Graham, > > > That was exactly the nudge I was looking to get. A little trial and > > > error + some googling resulted in: > > > > > > class Foo: > > > > > > def __init__(self): > > > > > > self.bar = vampire.PathInfo(self._bar) > > > > > > self.baz = vampire.PathInfo(self._baz) > > > > > > def _bar(self,req,path): > > > > > > return "foo/bar:%s" % path > > > > > > def _baz(self,req,path): > > > > > > return "foo/baz:%s" % path > > > > > > > > > > > > foo = Foo() > > quick question, If I use the class style to handle /foo/bar how do I > > handle a request /foo ? > > I tried creating an def index(self, req) method but that isn't > > working, it also tried def foo(self, req) and Foo. Or is it not > > possible to create a default method to use when using a class? > > Provide a __call__() method. > > class Node: pass > > def _index(req): ... > > foo = Node() > foo.__call__ = _index > Outstanding. Thank you. -- Jeff Hinrichs http://www.OmahaPython.org
|