|
Graham Dumpleton
grahamd at dscpl.com.au
Tue Apr 26 20:14:37 EDT 2005
Take two. I should go back to bed, managed to past a whole lot of code
in the cc mail address. In case it didn't get out, reposting.
Ignore this mail, I wrote total garbage. Too early in the morning to be
thinking. Fix by dharana was correct, the string is the key and the code
is the value. I'll shutup now. :-)
Graham Dumpleton wrote ..
> dharana wrote ..
> > -- site-packages/mod_python/psp.py snippet ---------------------
> > if filename:
> >
> > # if filename is not absolute, default to our guess
> > # of current directory
> > if not os.path.isabs(filename):
> > base = os.path.split(req.filename)[0]
> > self.filename = os.path.join(base, filename)
> >
> > self.load_from_file()
> > else:
> >
> > cached = mem_scache.get(string)
> > if cached:
> > self.code = cached
> > else:
> > (line 118) self.code = _psp.parsestring(string)
> > mem_scache.store(string)
> > -----------------------------------------------------------------
> >
> > Commenting out line 118 and trying to run the script in the previous
> > email (the one that is causing the segfault) gives me this error:
> >
> > --- traceback -------------------------------------------------------
> >
> > ...
> > TypeError: store() takes exactly 3 arguments (2 given)
> > -------------------------------------------------------------------
> >
> > I don't know why this is failling, maybe it has something to do with
> the
> > problem. _psp.parsestring(string) shouldn't modify "string" in any way
> > nor should it be able to pass hidden args to the mem_scache.store()
> > function, right?
>
> The store() method is expecting a key and value argument. The string
> would be the value argument, but what could the key be set to. Can't
> see any way you could automagically produce a value for the key. You
> can't use req.filename by itself as the file could create multiple PSP
> objects with different strings.
>
> My thinking is that you almost need to have the user of the PSP class
> supply an argument to optionally tag the string based PSP object.
> The default key could be req.filename and if that optional tag is set,
> it could be appended to the req.filename separated by a "?" or other
> magic character.
>
> Thus:
>
> class PSP:
>
> def __init__(self, req, filename=None, string=None, vars={}, tag=""):
>
> ...
>
> key = "%s?%s" % (req.filename,tag)
> cached = mem_scache.get(key,string)
> if cached:
> self.code = cached
> else:
> self.code = _psp.parsestring(string)
> mem_scache.store(key,string)
>
> Graham
|