Thanks.  I can't tell you how happy I am that it works!

For clarity's sake, the solution that seems easiest is...

def _test():
    from gluon.sqlhtml import form_factory
    from gluon.sql import SQLField
    form=form_factory(SQLField('email'))
    return dict(form=form)

The line " from gluon.sql import SQLField" should be added to any
form_factory import to ensure it works on GAE as well as the web2py
server.  In other words, the additional import is required to make
form_factory fully portable.

Thanks again.

On Dec 17, 7:40 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> Yes. There are two SQLField, one defined by gluon/sql.py (the standard
> one) and one defined by gluon/contrib/gql.py (used on GAE). The latter
> is overriding the former and breaking form_factory. There are two
> solutions:
>
> 1)
>      from gluon.sql import SQLField and Field
>
> and use Field instead of SQLField in form_factory.
>
> 2) in db.py you have something like
>
>     from gluon.contrib.gql import *
>     ...
>     db.define_field(...,SQLField(....),...)
>
> replace this with
>
>     from gluon.contrib.gql import SQLField
>     ...
>     db.define_field(...,db.Field(....),...)
>
> so that you never import and use SQLField from gql.py
>
> On Dec 16, 9:22 pm, Russell <russell.mcmur...@gmail.com> wrote:
>
> > Hi there,
>
> > This function works on the web2py server, but throws a syntax error on
> > GAE.
>
> > def _test():
> >     from gluon.sqlhtml import form_factory
> >     form=form_factory(SQLField('email'))
> >     return dict(form=form)
>
> > Here's the traceback...
>
> > ERROR    2008-12-17 02:49:20,437 main.py] Traceback (most recent call
> > last):
> >   File "C:\GAE\google_appengine\web2py\gluon\restricted.py", line
> >  62, in restricted
> >     exec ccode in environment
> >   File "C:\GAE\google_appengine\web2py\applications\appy/c
> > ontrollers/default.py:_test", line 542, in <module>
> >   File "C:\GAE\google_appengine\web2py\gluon\globals.py", line 55
> > , in <lambda>
> >     self._caller=lambda f: f()
> >   File "C:\GAE\google_appengine\web2py\applications\appy/c
> > ontrollers/default.py:_test", line 10, in _test
> >   File "C:\GAE\google_appengine\web2py\gluon\sqlhtml.py", line 298, in
> > form_factory
> >     return SQLFORM(SQLDB(None).define_table
> > ('no_table',*fields),**attributes)
> >   File "C:\GAE\google_appengine\web2py\gluon\sql.py", line 566, i
> > n define_table
> >     t=self[tablename]=SQLTable(self,tablename,*fields)
> >   File "C:\GAE\google_appengine\web2py\gluon\sql.py", line 651, i
> > n __init__
> >     raise SyntaxError, "define_table argument is not a SQLField"
> > SyntaxError: define_table argument is not a SQLField
>
> > Any suggestions?
>
> > Thanks
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to