[
https://issues.apache.org/jira/browse/AVRO-1518?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thiruvalluvan M. G. updated AVRO-1518:
--------------------------------------
Component/s: python
> Python client support decimal.Decimal types -> double encoding / decoding
> -------------------------------------------------------------------------
>
> Key: AVRO-1518
> URL: https://issues.apache.org/jira/browse/AVRO-1518
> Project: Apache Avro
> Issue Type: Improvement
> Components: python
> Reporter: Scott Reynolds
> Assignee: Scott Reynolds
> Priority: Major
> Fix For: 1.7.9
>
>
> 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
> {code}
> --- 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':
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)