1) is in trunk...

db =
DAL(...,driver_options=dict(detect_types=sqlite3.PARSE_DECLTYPES))

you can pass named options to all divers now, not just sqlite3.


On Feb 25, 4:52 pm, nick name <[email protected]> wrote:
> Hello good people.
>
> I've recently started a project using web2py, and I find it extremely well
> designed. However, within a 2 days of starting, I have already needed to
> patch it in 3 places, so either I'm doing something wrong, something
> non-standard, or I should find out what is the preferred way of submitting
> patches :)
>
> *1st: date/datetime fields on sqlite3*
>
> My project will run on PostgreSQL in production, but for the purpose of
> communicating with other developers, it is very beneficial to use the
> sqlite3 backend for now, which is what I do. By default, storing date or
> datetime fields in sqlite3 gets them retrieved again as strings, which kills
> my application logic (the dates need to be processed as dates).
>
> Fortunately, sqlite3 has a provision for solving that - it is called
> "detect_types". Unfortunately, web2py does not expose this setting through
> the DAL in any user settable way. My patch is as follows (against the tar of
> Version 1.91.6 (2011-01-03 17:55:14))
>
> ~/web2py/gluon$ diff origdal.py dal.py
> 1316c1316
> <         self.pool_connection(lambda dbpath=dbpath:
> sqlite3.Connection(dbpath, check_same_thread=False))
> --->         self.pool_connection(lambda dbpath=dbpath:
>
> sqlite3.Connection(dbpath, check_same_thread=False,
> detect_types=sqlite3.PARSE_DECLTYPES))
>
> This serves my purposes perfectly, and I suspect would be useful for anyone
> using sqlite3 - it instructs the dbapi module to convert fields of type DATE
> or TIMESTAMP (which are stored as strings) into a datetime.datetime object.
> So it might be useful for inclusion in general. However, there are other
> options (see e.g. PARSE_COLNAMES, isolation_level - 
> <http://docs.python.org/library/sqlite3.html#module-functions-and-cons...>
> for more) that might be useful for other users.
>
> Additionally, it might be useful to expose the sqlite3 module or the
> connection objects so that the user may register_converter() or
> create_aggregation() on them. I'm not yet familiar enough with web2py to
> propose a web2py-ish way to pass these options to dal - but if someone else
> does, I'll try to implement and provide a patch.
>
> *2nd: Talking json to a WCF / .NET client
> *
> web2py has an excellent json interface built in. It's perfect for all my
> uses except for one thing: Microsoft, in their usual
> embrace-extend-extinguish mentality, have perverted their json so that dates
> are encoded in json with the following format: \/Date(unixepoch-hhmm)\/where
> unixepoch is the time in seconds since 1/1/1970, and "-hhmm" is a timezone,
> e.g. -0500 for Eastern Standard Time and +0100 for London Daylight Saving
> Time; the --hhmm component is optional and defaults to 0000=UTC.
>
> The '\' in \/Date is an escape sequence, which is legal but ignored by every
> json parser out there. Microsoft code serializes dates like that (which is
> fine, I can parse it in Python well - the backslash escape just gets eaten
> away) - but it also expects that to be there when deserializing; I haven't
> figured out a way to do that with simplejson, because if I try to put the
> backslash there, simplejson will escape it and the result would be 
> \\/Datewhich is rejected by the MS parser.
>
> My solution here was to modify simplejson so that it also escapes the '/'
> character, and just return '/Date(...)/' as my date value. This works, and
> (based on the same reasoning used by MS) is safe for anything. But I don't
> like it; Is there any simpler solution for that, that would escape 
> *only*datetime values?
>
> Note: replacing jsonencoder's default() function is not enough - I had to
> patch ESCAPE, ESCAPE_ASCII and ESCAPE_DCT as well.
>
> Also, I am planning to modify the decoder to notice this and parse this is a
> datetime object directly, but haven't done so yet - if there's a
> particularly simple way to do that, please point me in the right direction.
>
> See <http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx>
> for more details
>
> *3rd: Generating xml output*
>
> This one is really small; when I serialize my output as xml, I need the root
> object to be called "root", rather than the default "document". I have fixed
> that by adding the "key='root'" to generic.xml's serialization call, and if
> I needed more flexibility I would have made that read from an application
> global setting.
>
> However, I think this is better served as something programmatically
> conifgurable - makes no sense to me that the top element's name gets decided
> by a view and every other element's name comes from a dict() I return.

Reply via email to