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 » >>> > > -- 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 at http://groups.google.com/group/web2py?hl=en.