On Sat, May 28, 2016 at 11:08 PM, Lele Gaifax <[email protected]> wrote:
> Ashesh Vashi <[email protected]> writes: > > > On Sat, May 28, 2016 at 7:59 PM, Lele Gaifax <[email protected]> > wrote: > >> I'd like to know if there is already a plan to properly handle > >> date/timestamp > >> fields, that currently fail with an error because simplejson by default > >> does > >> not know how the serialize (or deserialize) those data types. > > > > Can you please share some more detailed information about it, where/in > > which condition it does fail? > > Consider the following simple table: > > testdb=# \d users > Table "public.users" > Column | Type | Modifiers > -----------+--------------------+------------------------ > id | integer | not null > name | character varying | > fullname | character varying | > birthdate | date | not null > > testdb=# select * from users; > id | name | fullname | birthdate > ----+-------+----------------+------------ > 1 | jack | Jack Jones | 1987-01-02 > 2 | wendy | Wendy Williams | 1978-01-02 > (2 rows) > > Then, executing the "View first 100 rows" action, I get > > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <title>500 > Internal Server Error</title> <h1>Internal Server Error</h1> <p>The > server > encountered an internal error and was unable to complete your > request. Either the server is overloaded or there is an error in the > application.</p> > > with the following traceback (slightly edited for brevity) > > 2016-05-28 19:15:52,824: ERROR pgadmin: Exception on > /sqleditor/poll/7927153 [GET] > Traceback (most recent call last): > ... > File ".../pgadmin4/web/pgadmin/utils/ajax.py", line 41, in > make_json_response > response=json.dumps(doc, cls=DataTypeJSONEncoder), > File ".../python3.6/site-packages/simplejson/__init__.py", line 386, > in dumps > **kw).encode(obj) > File ".../python3.6/site-packages/simplejson/encoder.py", line 269, > in encode > chunks = self.iterencode(o, _one_shot=True) > File ".../python3.6/site-packages/simplejson/encoder.py", line 348, > in iterencode > return _iterencode(o, 0) > File ".../pgadmin4/web/pgadmin/utils/ajax.py", line 26, in default > return json.JSONEncoder.default(self, obj) > File ".../python3.6/site-packages/simplejson/encoder.py", line 246, > in default > raise TypeError(repr(o) + " is not JSON serializable") > TypeError: datetime.date(1987, 1, 2) is not JSON serializable > > As said, the DataTypeJSONEncoder could be extended to handle dates and > times > as well as datetimes and Decimals. BTW, the latter are already supported by > simplejson: > > >>> import simplejson > >>> import decimal > >>> d = decimal.Decimal('3.14159') > >>> simplejson.dumps([d]) > '[3.14159]' > > OTOH, the following is with nssjson: > > Python 2.7.11+ (default, May 9 2016, 15:54:33) > [GCC 5.3.1 20160429] on linux2 > Type "help", "copyright", "credits" or "license" for more information. > >>> import datetime, uuid > >>> import nssjson > >>> now = datetime.datetime.now() > >>> today = datetime.date.today() > >>> time = now.time() > >>> uid = uuid.uuid1() > >>> nssjson.dumps([uid, now, today, time], iso_datetime=True, > handle_uuid=True) > '["2d628922-24f9-11e6-b746-3085a99ccac7", > "2016-05-28T19:25:26.109827", "2016-05-28", "19:25:26.109827"]' > >>> nssjson.loads(_, iso_datetime=True, handle_uuid=True) > [UUID('2d628922-24f9-11e6-b746-3085a99ccac7'), datetime.datetime(2016, > 5, 28, 19, 25, 26, 109827), datetime.date(2016, 5, 28), datetime.time(19, > 25, 26, 109827)] > > possibly using its C accelerator to serialize/deserialize those types. > Thanks for the information. Akshay, Please take a look at it, and see what we can do about it. -- Thanks & Regards, Ashesh Vashi EnterpriseDB INDIA: Enterprise PostgreSQL Company <http://www.enterprisedb.com/> *http://www.linkedin.com/in/asheshvashi* <http://www.linkedin.com/in/asheshvashi> > > ciao, lele. > -- > nickname: Lele Gaifax | Quando vivrò di quello che ho pensato ieri > real: Emanuele Gaifas | comincerò ad aver paura di chi mi copia. > [email protected] | -- Fortunato Depero, 1929. > > > > -- > Sent via pgadmin-hackers mailing list ([email protected]) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgadmin-hackers >
