/appengine_django/serializer/json.py
http://google-app-engine-django.googlecode.com/ · Python · 48 lines · 21 code · 6 blank · 21 comment · 5 complexity · 250fbe6b2d3cc623a163fa4a008d1fbe MD5 · raw file
- #!/usr/bin/python2.4
- #
- # Copyright 2009 Google Inc.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- """
- Replacement for the Django JSON encoder that handles microseconds.
- """
- import datetime
- from django.utils import datetime_safe
- from django.utils import simplejson
- class DjangoJSONEncoder(simplejson.JSONEncoder):
- """
- JSONEncoder subclass that knows how to encode date/time with microseconds.
- """
- DATE_FORMAT = "%Y-%m-%d"
- TIME_FORMAT = "%H:%M:%S"
- def default(self, o):
- if isinstance(o, datetime.datetime):
- d = datetime_safe.new_datetime(o)
- output = d.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT))
- return "%s.%s" % (output, d.microsecond)
- elif isinstance(o, datetime.date):
- d = datetime_safe.new_date(o)
- return d.strftime(self.DATE_FORMAT)
- elif isinstance(o, datetime.time):
- output = o.strftime(self.TIME_FORMAT)
- return "%s.%s" % (output, o.microsecond)
- elif isinstance(o, decimal.Decimal):
- return str(o)
- else:
- return super(DjangoJSONEncoder, self).default(o)