Here is the value that printed:
2012-07-05 02:36:50
This field is declared in the model as: Field('timestamp','datetime'),
The old parse_datetime function seems to skip over the date part before it
does the split on the -
Here's the old one:
def parse_datetime(self, value, field_type):
if not isinstance(value, datetime.datetime):
(y, m, d) = map(int,str(value)[:10].strip().split('-'))
time_items = map(int,str(value)[11:19].strip().split(':')[:3])
if len(time_items) == 3:
(h, mi, s) = time_items
else:
(h, mi, s) = time_items + [0]
value = datetime.datetime(y, m, d, h, mi, s)
return value
Brad
On Friday, August 31, 2012 3:33:22 PM UTC-5, Massimo Di Pierro wrote:
>
> This is the code that causes the problem to you:
>
> def parse_datetime(self, value, field_type):
> if not isinstance(value, datetime.datetime):
> ....
> elif '-' in value:
> value,tz = value.split('-')
>
> This function is called when parsing data retrieved from database. The
> reason it is failing is that data is corrupted (contains more than one dash
> and that is not allowed by ISO standard). What database (my guess is
> sqlite, which allows you to change a string field into a datetime while
> leaving data in there). Can you add a print statement and see what the data
> looks like:
>
> def parse_datetime(self, value, field_type):
> if not isinstance(value, datetime.datetime):
> print value
> ....
>
> Let me know it may help understand how the data got in there.
>
> On Friday, 31 August 2012 14:53:16 UTC-5, Brad Miller wrote:
>>
>> I just upgraded my app to the latest 2.0.3 (stable) and while checking
>> some of my pages got the following error:
>>
>> Traceback (most recent call last):
>> File "/Users/bmiller/Beta/web2py/gluon/restricted.py", line 209, in
>> restricted
>> exec ccode in environment
>> File
>> "/Users/bmiller/Beta/web2py/applications/runestone/controllers/admin.py",
>> line 160, in <module>
>> File "/Users/bmiller/Beta/web2py/gluon/globals.py", line 185, in
>> <lambda>
>> self._caller = lambda f: f()
>> File "/Users/bmiller/Beta/web2py/gluon/tools.py", line 2780, in f
>> return action(*a, **b)
>> File
>> "/Users/bmiller/Beta/web2py/applications/runestone/controllers/admin.py",
>> line 116, in studentactivity
>> db.useinfo.sid, count, last, groupby=db.useinfo.sid, orderby=count)
>> File "/Users/bmiller/Beta/web2py/gluon/dal.py", line 8692, in select
>> return adapter.select(self.query,fields,attributes)
>> File "/Users/bmiller/Beta/web2py/gluon/dal.py", line 2029, in select
>> return super(SQLiteAdapter, self).select(query, fields, attributes)
>> File "/Users/bmiller/Beta/web2py/gluon/dal.py", line 1529, in select
>> return self._select_aux(sql,fields,attributes)
>> File "/Users/bmiller/Beta/web2py/gluon/dal.py", line 1510, in
>> _select_aux
>> return processor(rows,fields,self._colnames,cacheable=cacheable)
>> File "/Users/bmiller/Beta/web2py/gluon/dal.py", line 1886, in parse
>> fields[j].type,blob_decode)
>> File "/Users/bmiller/Beta/web2py/gluon/dal.py", line 1718, in
>> parse_value
>> return self.parsemap[key](value,field_type)
>> File "/Users/bmiller/Beta/web2py/gluon/dal.py", line 1753, in
>> parse_datetime
>> value,tz = value.split('-')
>> ValueError: too many values to unpack
>>
>> This is the result of this this query code, which continues to work under
>> 1.99.7
>>
>> count = db.useinfo.id.count()
>> last = db.useinfo.timestamp.max()
>> res = db(db.useinfo.course_id==course.course_id).select(
>> db.useinfo.sid, count, last, groupby=db.useinfo.sid,
>> orderby=count)
>>
>> I'm assuming this is some kind of regression since the same code is
>> working in 1.99.7, but maybe I'm doing something that I could do but no
>> longer should??
>>
>> Brad
>>
>>
--