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 » >>>>> >>> >>> > > -- 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.