summaryrefslogtreecommitdiff
path: root/kafka/protocol/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'kafka/protocol/api.py')
-rw-r--r--kafka/protocol/api.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/kafka/protocol/api.py b/kafka/protocol/api.py
index 7779aac..ec24a39 100644
--- a/kafka/protocol/api.py
+++ b/kafka/protocol/api.py
@@ -1,5 +1,7 @@
from __future__ import absolute_import
+import abc
+
from .struct import Struct
from .types import Int16, Int32, String, Schema
@@ -16,3 +18,50 @@ class RequestHeader(Struct):
super(RequestHeader, self).__init__(
request.API_KEY, request.API_VERSION, correlation_id, client_id
)
+
+
+class Request(Struct):
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractproperty
+ def API_KEY(self):
+ """Integer identifier for api request"""
+ pass
+
+ @abc.abstractproperty
+ def API_VERSION(self):
+ """Integer of api request version"""
+ pass
+
+ @abc.abstractproperty
+ def SCHEMA(self):
+ """An instance of Schema() representing the request structure"""
+ pass
+
+ @abc.abstractproperty
+ def RESPONSE_TYPE(self):
+ """The Response class associated with the api request"""
+ pass
+
+ def expect_response(self):
+ """Override this method if an api request does not always generate a response"""
+ return True
+
+
+class Response(Struct):
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractproperty
+ def API_KEY(self):
+ """Integer identifier for api request/response"""
+ pass
+
+ @abc.abstractproperty
+ def API_VERSION(self):
+ """Integer of api request/response version"""
+ pass
+
+ @abc.abstractproperty
+ def SCHEMA(self):
+ """An instance of Schema() representing the response structure"""
+ pass