It took a bit of binary upgrading to pin down this issue but I#ve
found that it's between 1.84.4 and 1.85.1
However since 1.85.1 (thru to 1.85.3) selects and inserts to the
datastore fail when I use a SQLCustom definition (see details below).
On dev_appserver all continues to work fine.
But locally on sqlite... operations on the datastore fail at gluon/
sql.py (in v1.85.1 it's line 3323) class Set, parse() after line "elif
field_type == 'datetime'\"
(y, m, d) = [int(x) for x in str(value)[:10].strip().split('-')]
ValueError: need more than 1 value to unpack
Background:
Locally Web2py drops the microseconds from datetime. On GAE it does
not.
I need the accuracy so I added the following db.py to define a
Fieldtype 'timestamp':
if request.env.web2py_runtime_gae:
from gluon.contrib.gql import *
db = DAL('gae')
session.connect(request, response, db=db)
timestamp = 'datetime'
else: # else use a normal relational database
db = DAL('sqlite://storage.sqlite')
from gluon.sql import SQLCustomType
import datetime
from time import mktime, localtime
timestamp = SQLCustomType(type='datetime',
native='NUMERIC(16,6)',
encoder=(lambda x:
str(mktime(x.timetuple()) + x.microsecond/1000000.0)),
decoder=(lambda x: datetime.datetime(*
(list(localtime(int(x))[:6])+[int(round(x%1,6)*1000000)]) )))
Is this definition of timestamp using SQLCustomType no longer
appropriate/workable?
Tables that don't include a timestamp field work correct in 1.84.x and
1.85.x