How can we use json.dumps
directly in the constructor, instead of calling it via a separate function?
def json_serialize(obj, *args):
return json.dumps(obj)
class KafkaProducer(object):
def __init__(self, config):
config = {
"key.serializer": json_serialize,
"value.serializer": json_serialize,
}
self.producer = SerializingProducer(config)
def produce(self, *args, **kwargs):
self.producer.produce(*args, **kwargs)
self.producer.flush()
When I use produce method of KafkaProducer class it works with the above implementation. As json_serialize function is used to do only json.dumps(obj)
.
If I tried this using json.dumps
direct in KafkaProducer
as given below and then call produce a method of class it won't work. gives error as:
KafkaError{code=_KEY_SERIALIZATION,val=-162,str="dumps() takes 1 positional argument but 2 were given"}
class KafkaProducer(object):
def __init__(self, config):
config = {
"key.serializer": json.dumps,
"value.serializer": json.dumps,
}
self.producer = SerializingProducer(config)
def produce(self, *args, **kwargs):
self.producer.produce(*args, **kwargs)
self.producer.flush()