Uploaded image for project: 'Apache Avro'
  1. Apache Avro
  2. AVRO-1518

Python client support decimal.Decimal types -> double encoding / decoding

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Patch Available
    • Major
    • Resolution: Unresolved
    • None
    • 1.9.0
    • python
    • None
    • python

    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':
      

      Attachments

        Activity

          People

            ScottReynolds Scott Reynolds
            ScottReynolds Scott Reynolds
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: