This is a DecimalProperty class, which will allow you to add Python decimals as properties to your App Engine models. If you want to create your own property types then I strongly suggest reading Rafe's article on Extending Model Properties, which is what I followed when creating DecimalProperty. Just a bit of code I needed for a project. Posted here if others need it:
from google.appengine.ext import db
from decimal import Decimal
class DecimalProperty(db.Property):
# Tell what the user type is.
data_type = Decimal
# For writing to datastore.
def get_value_for_datastore(self, model_instance):
value = super(DecimalProperty,
self).get_value_for_datastore(model_instance)
return unicode(value)
# For reading from datastore.
def make_value_from_datastore(self, value):
if value is None:
return None
return Decimal(value)
def validate(self, value):
if value is not None and not isinstance(value, Decimal):
raise BadValueError('Property %s must be convertible '
'to a Decimal instance (%s)' %
(self.name, value))
return super(DecimalProperty, self).validate(value)
def empty(self, value):
return not value
Joe Gregorio