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.

Reply via email to