Author: hammer
Date: Tue Jun 1 16:33:19 2010
New Revision: 950149
URL: http://svn.apache.org/viewvc?rev=950149&view=rev
Log:
AVRO-526. Fall back to pure Python StringIO if cStringIO is not available
(Esteve Fernandez via hammer)
Modified:
avro/branches/branch-1.3/CHANGES.txt
avro/branches/branch-1.3/lang/py/src/avro/ipc.py
avro/branches/branch-1.3/lang/py/test/test_io.py
Modified: avro/branches/branch-1.3/CHANGES.txt
URL:
http://svn.apache.org/viewvc/avro/branches/branch-1.3/CHANGES.txt?rev=950149&r1=950148&r2=950149&view=diff
==============================================================================
--- avro/branches/branch-1.3/CHANGES.txt (original)
+++ avro/branches/branch-1.3/CHANGES.txt Tue Jun 1 16:33:19 2010
@@ -6,6 +6,9 @@ Avro 1.3.3 (Unreleased)
AVRO-525. remove unused imports (Esteve Fernandez via hammer)
+ AVRO-526. Fall back to pure Python StringIO if cStringIO is not available
+ (Esteve Fernandez via hammer)
+
BUG FIXES
AVRO-496. python sample_http_client.py is broken (Jeff Hodges via hammer)
Modified: avro/branches/branch-1.3/lang/py/src/avro/ipc.py
URL:
http://svn.apache.org/viewvc/avro/branches/branch-1.3/lang/py/src/avro/ipc.py?rev=950149&r1=950148&r2=950149&view=diff
==============================================================================
--- avro/branches/branch-1.3/lang/py/src/avro/ipc.py (original)
+++ avro/branches/branch-1.3/lang/py/src/avro/ipc.py Tue Jun 1 16:33:19 2010
@@ -17,7 +17,10 @@
Support for inter-process calls.
"""
import httplib
-import cStringIO
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from StringIO import StringIO
import struct
from avro import io
from avro import protocol
@@ -128,7 +131,7 @@ class Requestor(object):
Writes a request message and reads a response or error message.
"""
# build handshake and call request
- buffer_writer = cStringIO.StringIO()
+ buffer_writer = StringIO()
buffer_encoder = io.BinaryEncoder(buffer_writer)
self.write_handshake_request(buffer_encoder)
self.write_call_request(message_name, request_datum, buffer_encoder)
@@ -138,7 +141,7 @@ class Requestor(object):
call_response = self.transceiver.transceive(call_request)
# process the handshake and call response
- buffer_decoder = io.BinaryDecoder(cStringIO.StringIO(call_response))
+ buffer_decoder = io.BinaryDecoder(StringIO(call_response))
call_response_exists = self.read_handshake_response(buffer_decoder)
if call_response_exists:
return self.read_call_response(message_name, buffer_decoder)
@@ -275,9 +278,9 @@ class Responder(object):
Called by a server to deserialize a request, compute and serialize
a response or error. Compare to 'handle()' in Thrift.
"""
- buffer_reader = cStringIO.StringIO(call_request)
+ buffer_reader = StringIO(call_request)
buffer_decoder = io.BinaryDecoder(buffer_reader)
- buffer_writer = cStringIO.StringIO()
+ buffer_writer = StringIO()
buffer_encoder = io.BinaryEncoder(buffer_writer)
error = None
response_metadata = {}
@@ -326,7 +329,7 @@ class Responder(object):
self.write_error(writers_schema, error, buffer_encoder)
except schema.AvroException, e:
error = AvroRemoteException(str(e))
- buffer_encoder = io.BinaryEncoder(cStringIO.StringIO())
+ buffer_encoder = io.BinaryEncoder(StringIO())
META_WRITER.write(response_metadata, buffer_encoder)
buffer_encoder.write_boolean(True)
self.write_error(SYSTEM_ERROR_SCHEMA, error, buffer_encoder)
@@ -397,7 +400,7 @@ class FramedReader(object):
def read_framed_message(self):
message = []
while True:
- buffer = cStringIO.StringIO()
+ buffer = StringIO()
buffer_length = self._read_buffer_length()
if buffer_length == 0:
return ''.join(message)
@@ -483,7 +486,7 @@ class HTTPTransceiver(object):
req_resource = '/'
req_headers = {'Content-Type': 'avro/binary'}
- req_body_buffer = FramedWriter(cStringIO.StringIO())
+ req_body_buffer = FramedWriter(StringIO())
req_body_buffer.write_framed_message(message)
req_body = req_body_buffer.writer.getvalue()
Modified: avro/branches/branch-1.3/lang/py/test/test_io.py
URL:
http://svn.apache.org/viewvc/avro/branches/branch-1.3/lang/py/test/test_io.py?rev=950149&r1=950148&r2=950149&view=diff
==============================================================================
--- avro/branches/branch-1.3/lang/py/test/test_io.py (original)
+++ avro/branches/branch-1.3/lang/py/test/test_io.py Tue Jun 1 16:33:19 2010
@@ -14,7 +14,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest
-import cStringIO
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from StringIO import StringIO
from binascii import hexlify
from avro import schema
from avro import io
@@ -110,14 +113,14 @@ def print_test_name(test_name):
print ''
def write_datum(datum, writers_schema):
- writer = cStringIO.StringIO()
+ writer = StringIO()
encoder = io.BinaryEncoder(writer)
datum_writer = io.DatumWriter(writers_schema)
datum_writer.write(datum, encoder)
return writer, encoder, datum_writer
def read_datum(buffer, writers_schema, readers_schema=None):
- reader = cStringIO.StringIO(buffer.getvalue())
+ reader = StringIO(buffer.getvalue())
decoder = io.BinaryDecoder(reader)
datum_reader = io.DatumReader(writers_schema, readers_schema)
return datum_reader.read(decoder)
@@ -152,7 +155,7 @@ def check_skip_number(number_type):
datum_writer.write(VALUE_TO_READ, encoder)
# skip the value
- reader = cStringIO.StringIO(writer.getvalue())
+ reader = StringIO(writer.getvalue())
decoder = io.BinaryDecoder(reader)
decoder.skip_long()
@@ -250,7 +253,7 @@ class TestIO(unittest.TestCase):
"symbols": ["BAR", "BAZ"]}""")
writer, encoder, datum_writer = write_datum(datum_to_write, writers_schema)
- reader = cStringIO.StringIO(writer.getvalue())
+ reader = StringIO(writer.getvalue())
decoder = io.BinaryDecoder(reader)
datum_reader = io.DatumReader(writers_schema, readers_schema)
self.assertRaises(io.SchemaResolutionException, datum_reader.read, decoder)
@@ -284,7 +287,7 @@ class TestIO(unittest.TestCase):
"fields": [{"name": "H", "type": "int"}]}""")
writer, encoder, datum_writer = write_datum(datum_to_write, writers_schema)
- reader = cStringIO.StringIO(writer.getvalue())
+ reader = StringIO(writer.getvalue())
decoder = io.BinaryDecoder(reader)
datum_reader = io.DatumReader(writers_schema, readers_schema)
self.assertRaises(io.SchemaResolutionException, datum_reader.read, decoder)