db.table.field.sum().with_alias() Traceback (most recent call last): File "/home/tburgess/Applications/web2py/gluon/restricted.py", line 173, in restricted exec ccode in environment File "/home/tburgess/Applications/web2py/applications/pms/controllers/default.py", line 305, in <module> File "/home/tburgess/Applications/web2py/gluon/globals.py", line 96, in <lambda> self._caller = lambda f: f() File "/home/tburgess/Applications/web2py/applications/pms/models/db.py", line 277, in current_R return db(db.R.id == RID).select(db.R.sum().with_alias('current_R')).first().current_R File "/home/tburgess/Applications/web2py/gluon/sql.py", line 3276, in select return self._db._adapter.select(self._query,*fields,**attributes) File "/home/tburgess/Applications/web2py/gluon/sql.py", line 514, in select rows = response(query) File "/home/tburgess/Applications/web2py/gluon/sql.py", line 505, in response self.execute(query) File "/home/tburgess/Applications/web2py/gluon/sql.py", line 589, in execute return self.log_execute(*a, **b) File "/home/tburgess/Applications/web2py/gluon/sql.py", line 583, in log_execute ret = self.cursor.execute(*a,**b) OperationalError: near "AS": syntax error
-Thadeus On Thu, Apr 8, 2010 at 2:57 PM, Thadeus Burgess <thade...@thadeusb.com> wrote: > Massimo, I am attaching a application that can replicate this issue. > > Works fine on sql.py > > Breaks on dal.py > > This application is designed after my big application, the represent > functions HAVE to stay the same, there cannot be ANY code edits to > them! > > Make sure to run with sql.py first to confirm that it IS working > correctly. THEN copy dal.py to sql.py, restart web2py, and then > confirm that it no longer works. > > -Thadeus > > > > > > On Thu, Apr 8, 2010 at 10:12 AM, Thadeus Burgess <thade...@thadeusb.com> > wrote: >> Agreed. Lets narrow this down, I will see if I can replicate the issue >> on a smaller scale. >> >> -Thadeus >> >> >> >> >> >> On Wed, Apr 7, 2010 at 11:08 PM, Massimo Di Pierro >> <mdipie...@cs.depaul.edu> wrote: >>> I guess my question is " why does it not throw an exception in sql.py?" It >>> should since >>> >>>>> db.dog.owner.represent = lambda value: "%s" % db.person[value].name >>> >>> when called with value==None should always result in the error you see in >>> dal.py. >>> >>> Can you help me debug this? My problem is not why it does not work with >>> dal.py (that is the part I understand). My problem is how is it that it >>> works with sql.py? >>> >>> On Apr 7, 2010, at 10:58 PM, Thadeus Burgess wrote: >>> >>>> I am not using different datasets, or using different queries. >>>> >>>> So here we go, let me explain in every minuet detail this process. >>>> >>>>>>> cd ~ >>>>>>> hg clone https://web2py.googlecode.com/hg web2py >>>>>>> cd web2py >>>>>>> ln -s ~/path/to/my/application applications/pms >>>>>>> python web2py.py -a <recycle> >>>> >>>> *go to 127.0.0.1:8000/pms/default/index >>>> *everything works perfectly, I see the page as it should be with >>>> records in place, providing the proper "names" (this is only three >>>> records, I KNOW they have values) >>>>>>> >>>>>>> kill -SIGTERM <web2py process id> >>>>>>> cd gluon/ >>>>>>> mv sql.py sql.bak.py >>>>>>> ln -s dal.py sql.py >>>>>>> cd .. >>>>>>> python web2py.py -a <recycle> >>>> >>>> *go to 127.0.0.1:8000/pms/default/index >>>> *receive stacktrace. >>>>>>> >>>>>>> kill -SIGTERM <web2py process id> >>>>>>> cd gluon/ >>>>>>> rm sql.py >>>>>>> mv sql.bak.py sql.py >>>>>>> cd .. >>>>>>> python web2py.py -a <recycle> >>>> >>>> *go to 127.0.0.1:8000/pms/default/index >>>> *behold, everything works perfectly. >>>> >>>> Even IF, and I say IF my dataset has a bad reference to a None record, >>>> and it executes just fine with sql.py, it should execute with dal.py >>>> exactly the same, it should not be throwing the exception. >>>> >>>> -Thadeus >>>> >>>> >>>> >>>> >>>> >>>> On Wed, Apr 7, 2010 at 10:10 PM, Massimo Di Pierro >>>> <mdipie...@cs.depaul.edu> wrote: >>>>> >>>>> I assume it is >>>>> >>>>>> db.dog.owner.represent = lambda value: "%s" % db.person[value].name >>>>> >>>>> The stacktrace you get is because one of your records has owner==None >>>>> hence >>>>> db.person[value] is also None and None has no .name. It is not a bug. You >>>>> are doing different queries or using different datasets. >>>>> >>>>> Anyway if you do >>>>> >>>>>> db.define_table('person', Field('name'), format='%(name)s') >>>>>> db.define_table('dog', Field('nickname'), Field('owner', db.person)) >>>>> >>>>> the requires is set automatically and should take care of this exception. >>>>> >>>>> On Apr 7, 2010, at 10:01 PM, Thadeus Burgess wrote: >>>>> >>>>>> I am defining this function. >>>>>> >>>>>> db.define_table('person', Field('name')) >>>>>> db.define_table('dog', Field('nickname'), Field('owner', db.person)) >>>>>> >>>>>> db.dog.owner.represent = lambda value: "%s" % db.owner[value].name >>>>>> >>>>>> This works in sql.py >>>>>> >>>>>> This does not work in dal.py >>>>>> >>>>>> You said you made changes, I tested, works just fine on sql.py, and >>>>>> has been for quite a while, however I get that stacktrace when I use >>>>>> dal.py. >>>>>> >>>>>> -Thadeus >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Wed, Apr 7, 2010 at 8:34 PM, mdipierro <mdipie...@cs.depaul.edu> >>>>>> wrote: >>>>>>> >>>>>>> I guess I do not understand. Who defined this represent function? is >>>>>>> it not in your code? Are you saying this is a bug in sql.py? >>>>>>> >>>>>>> On Apr 7, 7:48 pm, Thadeus Burgess <thade...@thadeusb.com> wrote: >>>>>>>> >>>>>>>> No. >>>>>>>> >>>>>>>> For dal.py to be accepted it has to work exactly like sql.py >>>>>>>> >>>>>>>> Therefore I cannot make ANY code changes if we want a new DAL. >>>>>>>> >>>>>>>> -Thadeus >>>>>>>> >>>>>>>> On Wed, Apr 7, 2010 at 5:31 PM, mdipierro <mdipie...@cs.depaul.edu> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> This >>>>>>>> >>>>>>>>> db.TableA.id_TableB.represent = lambda value: "%s" % >>>>>>>>> db.TableB[value].name >>>>>>>> >>>>>>>>> should be >>>>>>>> >>>>>>>>> db.TableA.id_TableB.represent = lambda value: (db.TableB[value] or >>>>>>>>> {}).get('name','anonymous') >>>>>>>> >>>>>>>>> On Apr 7, 1:36 pm, Thadeus Burgess <thade...@thadeusb.com> wrote: >>>>>>>>>> >>>>>>>>>> Traceback (most recent call last): >>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/restricted.py", line >>>>>>>>>> 173, in restricted >>>>>>>>>> exec ccode in environment >>>>>>>>>> File >>>>>>>>>> >>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/views/default/index.html", >>>>>>>>>> line 62, in <module> >>>>>>>>>> <thead> >>>>>>>>>> File >>>>>>>>>> >>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/models/common.py", >>>>>>>>>> line 197, in <lambda> >>>>>>>>>> db.TableA.id_TableB.represent = lambda value: "%s" % >>>>>>>>>> db.TableB[value].name >>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 2402, >>>>>>>>>> in __getitem__ >>>>>>>>>> return self._db(self.id == key).select().first() >>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 3276, >>>>>>>>>> in >>>>>>>>>> select >>>>>>>>>> return self._db._adapter.select(self._query,*fields,**attributes) >>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 507, in >>>>>>>>>> select >>>>>>>>>> query = self.SELECT(query,*fields, **attributes) >>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 433, in >>>>>>>>>> SELECT >>>>>>>>>> for field in self.db[table]: >>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 2102, >>>>>>>>>> in __getitem__ >>>>>>>>>> return dict.__getitem__(self, str(key)) >>>>>>>>>> KeyError: 'None' >>>>>>>> >>>>>>>>>> -Thadeus >>>>>>>> >>>>>>>>>> On Mon, Apr 5, 2010 at 6:00 PM, mdipierro <mdipie...@cs.depaul.edu> >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> uploading fix. please check it. Thanks for testing this. >>>>>>>> >>>>>>>>>>> On Apr 5, 3:59 pm, Thadeus Burgess <thade...@thadeusb.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Traceback (most recent call last): >>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/restricted.py", >>>>>>>>>>>> line >>>>>>>>>>>> 173, in restricted >>>>>>>>>>>> exec ccode in environment >>>>>>>>>>>> File >>>>>>>>>>>> >>>>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/controllers/default.py", >>>>>>>>>>>> line 278, in <module> >>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/globals.py", line >>>>>>>>>>>> 96, >>>>>>>>>>>> in <lambda> >>>>>>>>>>>> self._caller = lambda f: f() >>>>>>>>>>>> File >>>>>>>>>>>> >>>>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/controllers/default.py", >>>>>>>>>>>> line 76, in duplicates >>>>>>>>>>>> orderby=db.potentials.A >>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 3258, >>>>>>>>>>>> in select >>>>>>>>>>>> return self._db._adapter.select(self._query,*fields,**attributes) >>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 512, >>>>>>>>>>>> in select >>>>>>>>>>>> return self.parse(rows,self._colnames) >>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line 706, >>>>>>>>>>>> in parse >>>>>>>>>>>> (rid._table, rid._record) = (db[referee], None) >>>>>>>>>>>> NameError: global name 'db' is not defined >>>>>>>> >>>>>>>>>>>> -Thadeus >>>>>>>> >>>>>>>>>>>> On Mon, Apr 5, 2010 at 3:01 PM, mdipierro >>>>>>>>>>>> <mdipie...@cs.depaul.edu> >>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> try now >>>>>>>> >>>>>>>>>>>>> On Apr 5, 2:30 pm, Thadeus Burgess <thade...@thadeusb.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Now I get this for reference field >>>>>>>> >>>>>>>>>>>>>> Traceback (most recent call last): >>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/restricted.py", >>>>>>>>>>>>>> line >>>>>>>>>>>>>> 173, in restricted >>>>>>>>>>>>>> exec ccode in environment >>>>>>>>>>>>>> File >>>>>>>>>>>>>> >>>>>>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/views/default/index.html", >>>>>>>>>>>>>> line 84, in <module> >>>>>>>>>>>>>> {{=db.table[column].represent(d.B[column])}} >>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>> 2210, >>>>>>>>>>>>>> in __getattr__ >>>>>>>>>>>>>> self.__allocate() >>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>> 2203, >>>>>>>>>>>>>> in __allocate >>>>>>>>>>>>>> self._record = self._table[int(self)] >>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>> 2384, >>>>>>>>>>>>>> in __getitem__ >>>>>>>>>>>>>> return self._db(self.id == key).select().first() >>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>> 3258, in select >>>>>>>>>>>>>> return >>>>>>>>>>>>>> self._db._adapter.select(self._query,*fields,**attributes) >>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>> 512, >>>>>>>>>>>>>> in select >>>>>>>>>>>>>> return self.parse(rows,self._colnames) >>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>> 707, >>>>>>>>>>>>>> in parse >>>>>>>>>>>>>> colset[fieldname] = rid = Reference(value) >>>>>>>>>>>>>> TypeError: int() argument must be a string or a number, not >>>>>>>>>>>>>> 'NoneType' >>>>>>>> >>>>>>>>>>>>>> -Thadeus >>>>>>>> >>>>>>>>>>>>>> On Mon, Apr 5, 2010 at 2:20 PM, mdipierro >>>>>>>>>>>>>> <mdipie...@cs.depaul.edu> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I fixed the former. I did not fix the latter. It is a known >>>>>>>>>>>>>>> problem >>>>>>>>>>>>>>> with the new dal and one of the few things that needs to be >>>>>>>>>>>>>>> ironed >>>>>>>>>>>>>>> out: it does not like select('fieldname') only >>>>>>>>>>>>>>> select(db.table['fieldname']). Not difficult to fix anyway. >>>>>>>> >>>>>>>>>>>>>>> On Apr 5, 2:13 pm, Thadeus Burgess <thade...@thadeusb.com> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I get this traceback when attempting to access a reference >>>>>>>>>>>>>>>> field. >>>>>>>> >>>>>>>>>>>>>>>> rows = db().select(db.table.ALL) >>>>>>>>>>>>>>>> for r in rows: >>>>>>>>>>>>>>>> r.id >>>>>>>>>>>>>>>> r.title >>>>>>>>>>>>>>>> r.reference_field.name >>>>>>>>>>>>>>>> r.reference_field.description >>>>>>>> >>>>>>>>>>>>>>>> Traceback (most recent call last): >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/restricted.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 173, in restricted >>>>>>>>>>>>>>>> exec ccode in environment >>>>>>>>>>>>>>>> File >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/views/default/index.html", >>>>>>>>>>>>>>>> line 84, in <module> >>>>>>>>>>>>>>>> {{=db.field[column].represent(d.B[column])}} >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>>>> 2210, >>>>>>>>>>>>>>>> in __getattr__ >>>>>>>>>>>>>>>> self.__allocate() >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>>>> 2203, >>>>>>>>>>>>>>>> in __allocate >>>>>>>>>>>>>>>> self._record = self._table[int(self)] >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>>>> 2384, >>>>>>>>>>>>>>>> in __getitem__ >>>>>>>>>>>>>>>> return self._db(self.id == key).select()._first() >>>>>>>>>>>>>>>> AttributeError: 'Rows' object has no attribute '_first' >>>>>>>> >>>>>>>>>>>>>>>> I get this traceback from form = SQLFORM(db.mytable) >>>>>>>> >>>>>>>>>>>>>>>> Traceback (most recent call last): >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/restricted.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 173, in restricted >>>>>>>>>>>>>>>> exec ccode in environment >>>>>>>>>>>>>>>> File >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/controllers/default.py", >>>>>>>>>>>>>>>> line 278, in <module> >>>>>>>>>>>>>>>> File >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/models/plugin_compression.py", >>>>>>>>>>>>>>>> line 28, in compress_response >>>>>>>>>>>>>>>> d = d() >>>>>>>>>>>>>>>> File >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> "/home/tburgess/Applications/web2py/applications/pms/controllers/default.py", >>>>>>>>>>>>>>>> line 15, in index >>>>>>>>>>>>>>>> return dict(hi='hi', form=SQLFORM(db.mytable)) >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sqlhtml.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 688, in __init__ >>>>>>>>>>>>>>>> inp = self.widgets.multiple.widget(field, default) >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sqlhtml.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 211, in widget >>>>>>>>>>>>>>>> return OptionsWidget.widget(field, value, **attributes) >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sqlhtml.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 187, in widget >>>>>>>>>>>>>>>> options = requires[0].options() >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/validators.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 2227, in _options >>>>>>>>>>>>>>>> options = self.other.options() >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/validators.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 385, in options >>>>>>>>>>>>>>>> self.build_set() >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/validators.py", >>>>>>>>>>>>>>>> line >>>>>>>>>>>>>>>> 369, in build_set >>>>>>>>>>>>>>>> records = self.dbset.select(*self.fields, **dd) >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>>>> 3258, in select >>>>>>>>>>>>>>>> return >>>>>>>>>>>>>>>> self._db._adapter.select(self._query,*fields,**attributes) >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>>>> 501, in select >>>>>>>>>>>>>>>> query = self.SELECT(query,*fields, **attributes) >>>>>>>>>>>>>>>> File "/home/tburgess/Applications/web2py/gluon/sql.py", line >>>>>>>>>>>>>>>> 432, in SELECT >>>>>>>>>>>>>>>> tablenames.append(f._tablename) >>>>>>>>>>>>>>>> AttributeError: 'str' object has no attribute '_tablename' >>>>>>>> >>>>>>>>>>>>>>>> -Thadeus >>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>>>>> Google Groups "web2py-users" group. >>>>>>>>>>>>>>> To post to this group, send email to web...@googlegroups.com. >>>>>>>>>>>>>>> To unsubscribe from this group, send email to >>>>>>>>>>>>>>> web2py+unsubscr...@googlegroups.com. >>>>>>>>>>>>>>> For more options, visit this group >>>>>>>>>>>>>>> athttp://groups.google.com/group/web2py?hl=en. >>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>>> Google >>>>>>>>>>>>> Groups "web2py-users" group. >>>>>>>>>>>>> To post to this group, send email to web...@googlegroups.com. >>>>>>>>>>>>> To unsubscribe from this group, send email to >>>>>>>>>>>>> web2py+unsubscr...@googlegroups.com. >>>>>>>>>>>>> For more options, visit this group >>>>>>>>>>>>> athttp://groups.google.com/group/web2py?hl=en. >>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>>>> Groups "web2py-users" group. >>>>>>>>>>> To post to this group, send email to web...@googlegroups.com. >>>>>>>>>>> To unsubscribe from this group, send email to >>>>>>>>>>> web2py+unsubscr...@googlegroups.com. >>>>>>>>>>> For more options, visit this group >>>>>>>>>>> athttp://groups.google.com/group/web2py?hl=en. >>>>>>>> >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "web2py-users" group. >>>>>>>>> To post to this group, send email to web...@googlegroups.com. >>>>>>>> >>>>>>>> ... >>>>>>>> >>>>>>>> read more » >>>>>>> >>>>> >>>>> >>> >>> >> > -- To unsubscribe, reply using "remove me" as the subject.