Lets hope Massimo fix that today in trunk
On Wednesday, May 9, 2012 12:28:50 PM UTC+1, kokoyo wrote:
>
> Hi Costa , first im sorry for my wrong post above,It should be a new
> post with new question. Actually i have same problem like you,
> i did a quick test and have not solved this issue yet, here is what i did:
>
> set driver to use mongodb in: DB.py :
>
> if not request.env.web2py_runtime_gae:
> ## if NOT running on Google App Engine use SQLite or other DB
> #db = DAL('sqlite://storage.sqlite')
> db = DAL('mongodb://localhost:27017/foo')
>
>
> Click Register on menu to put a new User into mongo, submit:
> <type 'exceptions.ValueError'> invalid literal for int() with base
> 10: 'koko'
>
> Go to web2py appadmin admindatabase, open
> auth_user<http://127.0.0.1:8000/test/appadmin/insert/db/auth_user>
> table:
> Invalid Query
> invalid literal for int() with base 10: 'koko'
>
>
> Use mongo console to run query :
> db.auth_user.find({})
>
> new user is alread inserted into db,--> "insert" is done.
> but the error happens when mapping value and key or key type in DAL, im not
> sure, the type of value is not match. looks like DAL understands ID field
> is FirstName field.
>
>
> -
>
> *File C:\w2py3\gluon\dal.py in parse_id at line 1641* code arguments
> variables
> Function argument list
>
> (self=<gluon.dal.MongoDBAdapter object>, value='koko', field_type='id')
> Code listing
>
> 1636.
> 1637.
> 1638.
> 1639.
> 1640.
> 1641.
>
> 1642.
> 1643.
> 1644.
> 1645.
>
> if not self.dbengine=='google:datastore':
> value = bar_decode_string(value)
> return value
>
> def parse_id(self, value, field_type):
> return int(value)
>
>
> def parse_integer(self, value, field_type):
> return int(value)
>
> Variablesbuiltinint<type 'int'>value'koko'
>
>
>
>
>
>
>
>
> On Wednesday, May 9, 2012 7:42:56 PM UTC+9, Francisco Costa wrote:
>>
>> I've enumerated fields and colnames and they are like this:
>>
>> fields:
>> id
>> text
>> integer
>> string
>>
>>
>> colnames:
>> city
>> age
>> _id
>> name
>>
>>
>> I believe they don't match and thats why there's this error:
>>
>> File "/opt/web2py/gluon/dal.py", line 8134, in select
>> return adapter.select(self.query,fields,attributes)
>> File "/opt/web2py/gluon/dal.py", line 4711, in select
>> return processor(rows,fields,colnames,False)
>> File "/opt/web2py/gluon/dal.py", line 1681, in parse
>> self.parse_value(value, fields[j].type,blob_decode)
>> File "/opt/web2py/gluon/dal.py", line 1575, in parse_value
>> return self.parsemap[key](value,field
>>
>> _type)
>> File "/opt/web2py/gluon/dal.py", line 1641, in parse_id
>>
>> return int(value)
>> ValueError: invalid literal for int() with base 10: 'Toronto'
>>
>>
>>
>>
>>
>> On Monday, May 7, 2012 11:40:36 PM UTC+1, Massimo Di Pierro wrote:
>>>
>>> Please try again.
>>>
>>> On Monday, 7 May 2012 15:48:04 UTC-5, Francisco Costa wrote:
>>>>
>>>> missing a colon at the end of the line 4677
>>>>
>>>> if key == 'id'
>>>>
>>>>
>>>> and now I get this error
>>>>
>>>> File "/opt/web2py/gluon/dal.py", line 8134, in select
>>>> return adapter.select(self.query,fields,attributes)
>>>> File "/opt/web2py/gluon/dal.py", line 4711, in select
>>>> return processor(rows,columns,False)
>>>> File "/opt/web2py/gluon/dal.py", line 1675, in parse
>>>> for j,colname in enumerate(colnames):
>>>> TypeError: 'bool' object is not iterable
>>>>
>>>>
>>>> maybe because of the False on line 4711
>>>>
>>>>
>>>>
>>>>
>>>> On Monday, May 7, 2012 9:27:35 PM UTC+1, Massimo Di Pierro wrote:
>>>>>
>>>>> Thanks for your help and check on this. I just committed a fix in
>>>>> trunk that should address it. Please let me know.
>>>>>
>>>>> On Monday, 7 May 2012 15:19:40 UTC-5, Francisco Costa wrote:
>>>>>>
>>>>>> I think that the mongofields_dict.keys() don't match to the data in
>>>>>> the rows
>>>>>>
>>>>>> mongofields_dict:
>>>>>> id
>>>>>> name
>>>>>> age
>>>>>> city
>>>>>> rows:
>>>>>> Toronto
>>>>>> 66L
>>>>>> 24652490551171733682233802752L
>>>>>> John
>>>>>>
>>>>>>
>>>>>> On Monday, May 7, 2012 8:42:33 PM UTC+1, Massimo Di Pierro wrote:
>>>>>>>
>>>>>>> Your linennumbers do not much the code in trunk. Please try the code
>>>>>>> in trunk. Anyway, something goes wrong in the parse(self, rows, fields,
>>>>>>> colnames, blob_decode=True) function. I suspect mongo does not return
>>>>>>> the
>>>>>>> columns in the order web2py think it does. Can you print the input of
>>>>>>> the
>>>>>>> parse function?
>>>>>>>
>>>>>>> On Monday, 7 May 2012 13:20:39 UTC-5, Francisco Costa wrote:
>>>>>>>>
>>>>>>>> So I have this:
>>>>>>>>
>>>>>>>> import sys
>>>>>>>> import time
>>>>>>>> from gluon.dal import DAL, Field
>>>>>>>> mongo = DAL('mongodb://localhost:27017/tymr')
>>>>>>>> mongo.define_table('user',
>>>>>>>> Field('name', 'text'),
>>>>>>>> Field('age', 'integer'),
>>>>>>>> Field('city', 'string')
>>>>>>>> )
>>>>>>>>
>>>>>>>> def insert_users():
>>>>>>>> mongo.user.insert(name='John', age=66, city='Toronto')
>>>>>>>> mongo.user.insert(name='Mark', age=43, city='Boston')
>>>>>>>> mongo.user.insert(name='Tom', age=43, city='Detroit')
>>>>>>>> mongo.user.insert(name='Jim', age=18, city='Detroit')
>>>>>>>> mongo.user.insert(name='Jack', age=18)
>>>>>>>> mongo.user.insert(name='Eric', city='Boston')
>>>>>>>> return 'users in database'
>>>>>>>>
>>>>>>>> def find_users():
>>>>>>>> users = mongo(mongo.user.age==66).select()
>>>>>>>> return dict(users=users)
>>>>>>>>
>>>>>>>>
>>>>>>>> after I run *insert_users* I check in MongoDb via terminal and
>>>>>>>> everything is correct:
>>>>>>>> > db.user.find()
>>>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000000"), "city" : "Toronto",
>>>>>>>> "age" : NumberLong(66), "name" : "John" }
>>>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000001"), "city" : "Boston",
>>>>>>>> "age" : NumberLong(43), "name" : "Mark" }
>>>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000002"), "city" : "Detroit",
>>>>>>>> "age" : NumberLong(43), "name" : "Tom" }
>>>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000003"), "city" : "Detroit",
>>>>>>>> "age" : NumberLong(18), "name" : "Jim" }
>>>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000004"), "age" :
>>>>>>>> NumberLong(18), "name" : "Jack" }
>>>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000005"), "city" : "Boston",
>>>>>>>> "name" : "Eric" }
>>>>>>>>
>>>>>>>> but when I run *find_users* I get this error:
>>>>>>>>
>>>>>>>> File "/opt/web2py/gluon/dal.py", line 7578, in select
>>>>>>>> return adapter.select(self.query,fields,attributes)
>>>>>>>> File "/opt/web2py/gluon/dal.py", line 4290, in select
>>>>>>>> return self.parse(rows,fields,mongofields_dict.keys(),False)
>>>>>>>> File "/opt/web2py/gluon/dal.py", line 1600, in parse
>>>>>>>> self.parse_value(value, fields[j].type,blob_decode)
>>>>>>>> File "/opt/web2py/gluon/dal.py", line 1496, in parse_value
>>>>>>>> return self.parsemap[key](value,field_type)
>>>>>>>> File "/opt/web2py/gluon/dal.py", line 1562, in parse_id
>>>>>>>> return int(value)
>>>>>>>> ValueError: invalid literal for int() with base 10: 'Toronto'
>>>>>>>>
>>>>>>>>
>>>>>>>>