-
Notifications
You must be signed in to change notification settings - Fork 937
Open
Labels
component:schema-registryAny schema registry related isues rather than kafka isolated onesAny schema registry related isues rather than kafka isolated ones
Description
Hi,
We're using AvroSerializer with record_subject_name_strategy, and never needed a SerializationContext. Starting from 2.13, we get TypeError: SerializationContext cannot be None.
Looks like the change was introduced in 3886a30.
Maybe I'm missing some context on this, but I don't understand how raising here would make sense. I'm supplying the serializer function bound to self._to_dict.
if self._to_dict is not None:
if ctx is None:
raise TypeError("SerializationContext cannot be None")
value = self._to_dict(obj, ctx)Here's a minimal reproducer that hopefully gives an idea how we're using it (works on 2.12.2):
import json
from confluent_kafka.schema_registry import (
SchemaRegistryClient,
record_subject_name_strategy,
)
from confluent_kafka.schema_registry.avro import AvroSerializer
schema = {
"type": "record",
"name": "MockSchema",
"namespace": "test",
"fields": [
{"name": "id", "type": "string"},
{"name": "size", "type": ["null", "string"], "default": None},
],
}
c = SchemaRegistryClient({"url": "http://schema-registry.kafka"})
c.get_subjects()
s = AvroSerializer(
schema_registry_client=c,
schema_str=json.dumps(schema),
to_dict=lambda msg, ctx: msg,
conf={
"auto.register.schemas": True,
"subject.name.strategy": record_subject_name_strategy,
},
)
print(s({"id": "hello"}))$ python -m minimal_ctx
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "<project_dir>/minimal_ctx.py", line 32, in <module>
print(s({"id": "hello"}))
^^^^^^^^^^^^^^^^^^
File "<venv>/lib/python3.11/site-packages/confluent_kafka/schema_registry/_sync/avro.py", line 347, in __call__
return self.__serialize(obj, ctx)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<venv>/lib/python3.11/site-packages/confluent_kafka/schema_registry/_sync/avro.py", line 398, in __serialize
raise TypeError("SerializationContext cannot be None")
TypeError: SerializationContext cannot be None
# on 2.12.2:
$ python -m minimal_ctx
b'\x00\x00\x00\x00\x15\nhello\x00'
Thanks for looking into this!
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
component:schema-registryAny schema registry related isues rather than kafka isolated onesAny schema registry related isues rather than kafka isolated ones