From 41c099553de56f985727a93c7c5422dc4f376739 Mon Sep 17 00:00:00 2001 From: sebastianneubauer Date: Fri, 25 May 2018 02:49:47 +0200 Subject: [PATCH] bugfix: wrong invocation of SchemaParseException (#376) --- confluent_kafka/avro/load.py | 2 +- setup.py | 14 +++++++++++++- test-requirements.txt | 2 ++ tests/avro/invalid_scema.avsc | 10 ++++++++++ tests/avro/test_util.py | 7 ++++++- 5 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 test-requirements.txt create mode 100644 tests/avro/invalid_scema.avsc diff --git a/confluent_kafka/avro/load.py b/confluent_kafka/avro/load.py index 805804949..e7709a115 100644 --- a/confluent_kafka/avro/load.py +++ b/confluent_kafka/avro/load.py @@ -27,7 +27,7 @@ def loads(schema_str): return schema.parse(schema_str) else: return schema.Parse(schema_str) - except schema.AvroException.SchemaParseException as e: + except schema.SchemaParseException as e: raise ClientError("Schema parse failed: %s" % (str(e))) diff --git a/setup.py b/setup.py index 8407377b2..95c764fd0 100755 --- a/setup.py +++ b/setup.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +import os from setuptools import setup, find_packages from distutils.core import Extension import sys @@ -14,6 +15,16 @@ 'confluent_kafka/src/Producer.c', 'confluent_kafka/src/Consumer.c']) + +def get_install_requirements(path): + content = open(os.path.join(os.path.dirname(__file__), path)).read() + return [ + req + for req in content.split("\n") + if req != '' and not req.startswith('#') + ] + + setup(name='confluent-kafka', version='0.11.4', description='Confluent\'s Apache Kafka client for Python', @@ -24,5 +35,6 @@ packages=find_packages(exclude=("tests", "tests.*")), data_files=[('', ['LICENSE.txt'])], extras_require={ - 'avro': ['fastavro', 'requests', avro] + 'avro': ['fastavro', 'requests', avro], + 'dev': get_install_requirements("test-requirements.txt") }) diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..036d8c550 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,2 @@ +pytest +flake8 \ No newline at end of file diff --git a/tests/avro/invalid_scema.avsc b/tests/avro/invalid_scema.avsc new file mode 100644 index 000000000..f2ffe70d1 --- /dev/null +++ b/tests/avro/invalid_scema.avsc @@ -0,0 +1,10 @@ +{ + "type" : "record", + "name" : "string_key", + "namespace" : "OrbitDbProducer", + "fields" : [ { + "name" : "key", + "type" : "array", + "items": "string" + } ] +} diff --git a/tests/avro/test_util.py b/tests/avro/test_util.py index b232bf763..1ea6d30c7 100644 --- a/tests/avro/test_util.py +++ b/tests/avro/test_util.py @@ -21,7 +21,7 @@ # import unittest - +import pytest from avro import schema from tests.avro import data_gen from confluent_kafka import avro @@ -35,3 +35,8 @@ def test_schema_from_string(self): def test_schema_from_file(self): parsed = avro.load(data_gen.get_schema_path('adv_schema.avsc')) self.assertTrue(isinstance(parsed, schema.Schema)) + + def test_schema_load_parse_error(self): + with pytest.raises(avro.ClientError) as excinfo: + avro.load(data_gen.get_schema_path("invalid_scema.avsc")) + assert 'Schema parse failed:' in str(excinfo.value)