Details
Description
Python standard library > 2.4 provides a Decimal type that has much better semantics then standard binary float. Avro library should be able to accept Decimal's and encode them as doubles.
(https://docs.python.org/2/library/decimal.html)
I also believe it should, by default, turn Avro double's into Decimal object instead of a float.
Simple patch allows for encoding a Decimal into an Avro double
--- io.py 2014-05-23 13:41:14.000000000 -0700 +++ /Users/sreynolds/Projects/avro-1.7.6 2/src/avro/io.py 2014-05-23 13:44:03.000000000 -0700 @@ -46,6 +46,11 @@ try: except ImportError: import simplejson as json +try: + from decimal import Decimal +except ImportError: + Decimal = float + # # Constants # @@ -117,7 +122,7 @@ def validate(expected_schema, datum): and LONG_MIN_VALUE <= datum <= LONG_MAX_VALUE) elif schema_type in ['float', 'double']: return (isinstance(datum, int) or isinstance(datum, long) - or isinstance(datum, float)) + or isinstance(datum, float) or instance(datum, Decimal)) elif schema_type == 'fixed': return isinstance(datum, str) and len(datum) == expected_schema.size elif schema_type == 'enum':