Add

form = None

after line 22, ->  session.flash = T('wizard complete')

When you're done, that variable is not being initialized.

-Jim

On Tuesday, January 26, 2016 at 7:48:10 AM UTC-6, Scott Benninghoff wrote:
>
> I've been working loosely with web2py for a couple of years.  Love it, 
> love python.
>
> I recently bought the book Web2py Application Development Cookbook and 
> started working with the wizard recipe.  It seems fairly simple and easy to 
> understand.
>
> I ran the project and getting an error that I can't figure out and looking 
> for someone with outside eyes to help me figure this one out.  I checked 
> the book errata and nothing.
>
> Seems like the wizard page runs the way it's supposed to but the last page 
> fails out (when it's supposed to be 'done'.
>
> My controller code:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> *# -*- coding: utf-8 -*-# try something likedef wizard():    # 
> Field('ruleNumber','integer'),    #           
> Field('ruleStatement','string'),    #           
> Field('ruleParms','string'),    STEPS = {0: 
> ('srcFile','ruleParms2'),             1: ('ruleStatement', 
> 'ruleParms'),             2: URL('done')}    step = int(request.args(0) or 
> 0)    if not step in STEPS: redirect(URL(args=0))    fields = 
> STEPS[step]    if step == 0:        session.wizard = {}    if 
> isinstance(fields, tuple):        form = SQLFORM.factory(*[f for f in 
> db.columnSourceToDestMapDetail if f.name <http://f.name> in fields])    if 
> form.accepts(request, session):        
> session.wizard.update(form.vars)        redirect(URL(args=step+1))    
> else:        db.columnSourceToDestMapDetail.insert(**session.wizard)        
> session.flash = T('wizard completed')        #redirect(fields)    return 
> dict(form=form, step=step)*
>
> my view (wizard.html): 
>
> {{extend 'layout.html'}}
> <h1>Wizard Step {{=step}}</h1>
> {{=form}}
>
> my view (done.html):
>
> {{extend 'layout.html'}}
> <h1>This is the done.html template</h1>
> {{=BEAUTIFY(response._vars)}}
>
> my model: 
>
> tableName = 'columnSourceToDestMapDetail'
> db.define_table(tableName,
>                Field('srcFile','string'),
>                Field('ruleNumber','integer'),
>                Field('ruleStatement','string'),
>                Field('ruleParms','string'),
>                Field('ruleParms2','string')
>                )
>
> Finally, my error:  (sorry so long):
>
> Error ticket for "NG_MappingConversion" Ticket ID 
>
> 127.0.0.1.2016-01-26.08-43-19.f513d99f-1f18-4317-9c38-7fd9dd2b709d
> <type 'exceptions.UnboundLocalError'> local variable 'form' referenced 
> before assignment Version 
> web2py™ Version 2.12.3-stable+timestamp.2015.08.19.00.18.03 
> Python Python 2.7.8: C:\Python27\python.exe (prefix: C:\Python27) 
> Traceback 
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
>
> Traceback (most recent call last):
>   File "C:\Users\benninsc\Documents\web2py\gluon\restricted.py", line 227, in 
> restricted
>     exec ccode in environment
>   File 
> "C:/Users/benninsc/Documents/web2py/applications/NG_MappingConversion/controllers/wizard.py"
>  
> <http://127.0.0.1:8000/admin/default/edit/NG_MappingConversion/controllers/wizard.py>,
>  line 26, in <module>
>   File "C:\Users\benninsc\Documents\web2py\gluon\globals.py", line 412, in 
> <lambda>
>     self._caller = lambda f: f()
>   File 
> "C:/Users/benninsc/Documents/web2py/applications/NG_MappingConversion/controllers/wizard.py"
>  
> <http://127.0.0.1:8000/admin/default/edit/NG_MappingConversion/controllers/wizard.py>,
>  line 17, in wizard
>     if form.accepts(request, session):
> UnboundLocalError: local variable 'form' referenced before assignment
>
> Error snapshot [image: help] 
> <http://127.0.0.1:8000/admin/default/ticket/NG_MappingConversion/127.0.0.1.2016-01-26.08-43-19.f513d99f-1f18-4317-9c38-7fd9dd2b709d#>
>  
>
> <type 'exceptions.UnboundLocalError'>(local variable 'form' referenced 
> before assignment) 
>
> inspect attributes 
> Frames 
>    
>    - 
>    
>    *File C:\Users\benninsc\Documents\web2py\gluon\restricted.py in 
>    restricted at line 227* code arguments variables 
>    - 
>    
>    *File 
>    
> C:\Users\benninsc\Documents\web2py\applications\NG_MappingConversion\controllers\wizard.py
>  
>    in <module> at line 26* code arguments variables 
>    - 
>    
>    *File C:\Users\benninsc\Documents\web2py\gluon\globals.py in <lambda> 
>    at line 412* code arguments variables 
>    - 
>    
>    *File 
>    
> C:\Users\benninsc\Documents\web2py\applications\NG_MappingConversion\controllers\wizard.py
>  
>    in wizard at line 17* code arguments variables 
>    Function argument list 
>    
>    ()
>    Code listing 
>    
>    12.
>    13.
>    14.
>    15.
>    16.
>    17.
>    
>    18.
>    19.
>    20.
>    21.
>    
>        fields = STEPS[step]
>        if step == 0:
>            session.wizard = {}
>        if isinstance(fields, tuple):
>            form = SQLFORM.factory(*[f for f in db.columnSourceToDestMapDetail 
> if f.name in fields])
>        if form.accepts(request, session):
>    
>            session.wizard.update(form.vars)
>            redirect(URL(args=step+1))
>        else:
>            db.columnSourceToDestMapDetail.insert(**session.wizard)
>    
>    Variables 
>    global request <Storage {'_vars': None, 'function': 'wizard', 
>    '...\\web2py\\applications\\NG_MappingConversion\\'}> 
>    global session <Storage {'flash': None, 'wizard': 
>    {'ruleStateme...357ec', 'ee50f7e5-3ac4-4bd3-946a-68e743cb8fde']}> 
>    form undefined 
>    
> Context 
>
> locals request session response 
> In file: 
> C:\Users\benninsc\Documents\web2py\applications\NG_MappingConversion\controllers/wizard.py
>  
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
> 11.
> 12.
> 13.
> 14.
> 15.
> 16.
> 17.
> 18.
> 19.
> 20.
> 21.
> 22.
> 23.
> 24.
> 25.
> 26.
> 27.
>
> # -*- coding: utf-8 -*-
> # try something like
> def wizard():
>     # Field('ruleNumber','integer'),
>     #           Field('ruleStatement','string'),
>     #           Field('ruleParms','string'),
>     STEPS = {0: ('srcFile','ruleParms2'),
>              1: ('ruleStatement', 'ruleParms'),
>              2: URL <http://127.0.0.1:8000/examples/global/vars/URL>('done')}
>     step = int(request 
> <http://127.0.0.1:8000/examples/global/vars/request>.args(0) or 0)
>     if not step in STEPS: redirect 
> <http://127.0.0.1:8000/examples/global/vars/redirect>(URL 
> <http://127.0.0.1:8000/examples/global/vars/URL>(args=0))
>     fields = STEPS[step]
>     if step == 0:
>         session <http://127.0.0.1:8000/examples/global/vars/session>.wizard = 
> {}
>     if isinstance(fields, tuple):
>         form = SQLFORM 
> <http://127.0.0.1:8000/examples/global/vars/SQLFORM>.factory(*[f for f in 
> db.columnSourceToDestMapDetail if f.name in fields])
>     if form.accepts(request 
> <http://127.0.0.1:8000/examples/global/vars/request>, session 
> <http://127.0.0.1:8000/examples/global/vars/session>):
>         session 
> <http://127.0.0.1:8000/examples/global/vars/session>.wizard.update(form.vars)
>         redirect <http://127.0.0.1:8000/examples/global/vars/redirect>(URL 
> <http://127.0.0.1:8000/examples/global/vars/URL>(args=step+1))
>     else:
>         db.columnSourceToDestMapDetail.insert(**session 
> <http://127.0.0.1:8000/examples/global/vars/session>.wizard)
>         session <http://127.0.0.1:8000/examples/global/vars/session>.flash = 
> T <http://127.0.0.1:8000/examples/global/vars/T>('wizard completed')
>         #redirect(fields)
>     return dict(form=form, step=step)
>
> response <http://127.0.0.1:8000/examples/global/vars/response>._vars=response 
> <http://127.0.0.1:8000/examples/global/vars/response>._caller(wizard)
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to