Dictonary persistance weirdness

Gonzalo Sainz-Trápaga (GomoX) gomoSINSPAM at datafull.com
Sun Apr 10 18:07:23 EDT 2005


Hi, I've posted this to mod_python at modpython.org and got no answers, so
i'm reposting it here, I really hope someone can help me out.

------

Hi,
I'm building my first application with mod_python. I am using Ian
Bicking's SQLObject, validators and HTMLfill among other tools.
I built a custom handler that parses the url and loads an external
module, passing it a request object and eventually, an ID integer that
is extracted from the URI.

Example:
http://site.com/race.py/4/signup will trigger "import race;
race.signup(4,req)" and that function will provide a form in order for
people to sign themselves up for race 4.

Form handling and data parsing (for POST or GET data) is done in
separate modules that are imported when needed, so race.py actually
imports formgen.py and formgen.py imports VarsWrapper (from wrappers.py)
in order to parse data for his form and tell whether he needs to print
an error message, or the input is valid.

The process works fine up to races.py: it gets the POSTed data fine, but
then if I try to pass the variables received to the form handler, the
handler will only receive them correctly on the first call to it after a
server restart. For later calls, the form handler sticks to the values
received on his first request.

Code snippets:

-- race.py -------------------------
def signup(id,req):
    from formgen import FormInscripcion

    v = VarsWrapper(req)
    c = v.get_vars()

    f = FormInscripcion(id)
    
    tpl.locals.contenido = f.handle(c)
    return tpl.get_html()


-- formgen.py -------------------------

class FormInscripcion:
(...)
    def handle(self,vars):
        # check for sent data
        if ('id_regata',str(self.id_regata)) in vars.items():
            return self._post(vars) # triggers a data handler
        else: 
            return self._form() # shows the clean form
(...)


-- wrappers.py -------------------------
class VarsWrapper:
    def __init__(self,req):
        self.fs = util.FieldStorage(req)

    def get_vars():
        d = {}
        for each in self.fs.list:
            self.d[x.name] = x.value
        return d


So again, the problem arises when calling FormInscripcion.handle() for
the 2nd time or more: it will stick to the data received on the 1st
request passed to it. If i print the variable dictionary (c in race.py,
vars in formgen.py) after the form, c will change with new POST data, as
vars will stay constant after the 1st request.
The weird thing is that i'm passing data from pyhandler.py to race.py in
the same way that i'm passing it from race.py to formgen.py, and it
refuses to work correctly in the latter.
I have already tried pretty much every single possible cause for this
oddity with no consistent results, so i'm pretty confident that there's
something i'm missing that's not inherent to my app's logic, but to my
app's login combined with some mod_python specific complication.
In short: i'm going nuts!
Sorry for all the writing, but I really hope somebody can help me.
Thanks in advance,

Gonzalo Sainz-Trápaga (GomoX)



More information about the Python-list mailing list