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
|