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 web2py@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