web2py/web2py — pull request #316 by anssih (2013-12-02 21:30:49+00:00)
Title: Fix list types in GAE NDB after entity write

As per
http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=208
("List items from repeated StringProperty get mutated to _BaseValue on
put") it seems to be expected behavior that lists in NDB models get
mutated to _BaseValue lists after .put() is called.

In web2py this corresponds to:
------------
db.define_table('listintegertest',
Field('dummy', 'boolean'),
Field('integerlist', 'list:integer'),
Field('stringlist', 'list:string'),
)

iidee = db.listintegertest.insert(
integerlist=[1,2,3,4],
stringlist=["1","2","3","4"]
)
row = db.listintegertest(iidee)
db.listintegertest[row.id] = dict(dummy=True)

print "type is %s" % (type(row.integerlist[0]))
print "type is %s" % (type(row.stringlist[0]))
------------

The output of the above is currently:
type is
type is
while this is expected:
type is
type is

The workaround is to copy the list from the NDB model instead of
relying on it not being changed afterwards.

list:reference is not affected since parse_list_references() already
recreates the list in NoSQLAdapter case.