Adjust the total_popularity after ranging
This way 'off the scale' orgs (many applicants, with only few mentors
available) will not pull the total amount of allocated slots down as
much as before.
Patch by: Sverre Rabbelier
"""Serialize data to/from JSON"""import datetimefrom StringIO import StringIOfrom django.core.serializers.python import Serializer as PythonSerializerfrom django.core.serializers.python import Deserializer as PythonDeserializerfrom django.utils import datetime_safefrom django.utils import simplejsontry: import decimalexcept ImportError: from django.utils import _decimal as decimal # Python 2.3 fallbackclass Serializer(PythonSerializer): """ Convert a queryset to JSON. """ internal_use_only = False def end_serialization(self): self.options.pop('stream', None) self.options.pop('fields', None) simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options) def getvalue(self): if callable(getattr(self.stream, 'getvalue', None)): return self.stream.getvalue()def Deserializer(stream_or_string, **options): """ Deserialize a stream or string of JSON data. """ if isinstance(stream_or_string, basestring): stream = StringIO(stream_or_string) else: stream = stream_or_string for obj in PythonDeserializer(simplejson.load(stream)): yield objclass DjangoJSONEncoder(simplejson.JSONEncoder): """ JSONEncoder subclass that knows how to encode date/time and decimal types. """ 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) return d.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT)) elif isinstance(o, datetime.date): d = datetime_safe.new_date(o) return d.strftime(self.DATE_FORMAT) elif isinstance(o, datetime.time): return o.strftime(self.TIME_FORMAT) elif isinstance(o, decimal.Decimal): return str(o) else: return super(DjangoJSONEncoder, self).default(o)# Older, deprecated class name (for backwards compatibility purposes).DateTimeAwareJSONEncoder = DjangoJSONEncoder