summaryrefslogtreecommitdiff
path: root/kafka
diff options
context:
space:
mode:
authorDana Powers <dana.powers@gmail.com>2015-01-12 23:50:07 -0800
committerDana Powers <dana.powers@gmail.com>2015-01-12 23:50:07 -0800
commit28a838516b3feb81c3c7f7fbd6aad2391a4139c5 (patch)
treed9bd48c454f2fd89cf80df4e6ab097b938dfa10d /kafka
parent4c9ffa1265c44d4fb8760b83263726a35222943c (diff)
parent01c1481248a00367b9395acb364821026bf6848c (diff)
downloadkafka-python-28a838516b3feb81c3c7f7fbd6aad2391a4139c5.tar.gz
Merge pull request #289 from alexcb/broker-error-class-refactoring
Use reflection to avoid multiple errno definitions
Diffstat (limited to 'kafka')
-rw-r--r--kafka/common.py36
1 files changed, 12 insertions, 24 deletions
diff --git a/kafka/common.py b/kafka/common.py
index e4b3b1b..b7bb06c 100644
--- a/kafka/common.py
+++ b/kafka/common.py
@@ -1,3 +1,5 @@
+import inspect
+import sys
from collections import namedtuple
###############
@@ -79,9 +81,6 @@ class KafkaError(RuntimeError):
class BrokerResponseError(KafkaError):
pass
-class NoError(BrokerResponseError):
- errno = 0
- message = 'SUCCESS'
class UnknownError(BrokerResponseError):
errno = -1
@@ -201,27 +200,16 @@ class KafkaConfigurationError(KafkaError):
pass
-kafka_errors = {
- -1 : UnknownError,
- 0 : NoError,
- 1 : OffsetOutOfRangeError,
- 2 : InvalidMessageError,
- 3 : UnknownTopicOrPartitionError,
- 4 : InvalidFetchRequestError,
- 5 : LeaderNotAvailableError,
- 6 : NotLeaderForPartitionError,
- 7 : RequestTimedOutError,
- 8 : BrokerNotAvailableError,
- 9 : ReplicaNotAvailableError,
- 10 : MessageSizeTooLargeError,
- 11 : StaleControllerEpochError,
- 12 : OffsetMetadataTooLargeError,
- 13 : StaleLeaderEpochCodeError,
-}
+def _iter_broker_errors():
+ for name, obj in inspect.getmembers(sys.modules[__name__]):
+ if inspect.isclass(obj) and issubclass(obj, BrokerResponseError) and obj != BrokerResponseError:
+ yield obj
-def check_error(response):
- error = kafka_errors.get(response.error, UnknownError)
- if error is not NoError:
- raise error(response)
+kafka_errors = dict([(x.errno, x) for x in _iter_broker_errors()])
+
+def check_error(response):
+ if response.error:
+ error_class = kafka_errors.get(response.error, UnknownError)
+ raise error_class(response)