Python avro.io.write未正确验证数据,而是截断了数据

时间:2018-08-01 16:15:55

标签: python validation schema avro

我正在使用Python avro.io软件包对记录(字典)进行编码,因此可以将其发送到Kafka。我使用以下代码对记录进行编码:

def encode(record, schema):
    bytes_writer = io.BytesIO()
    encoder = avro.io.BinaryEncoder(bytes_writer)
    record_schema = avro.schema.parse(schema)
    writer = avro.io.DatumWriter(record_schema)
    writer.write(record, encoder)
    return bytes_writer.getvalue()

我让writer.write方法为我做模式/记录验证。如果记录与架构不匹配,则会引发AvroTypeException。它适用于所有情况,但有多余数据的情况除外。

我的测试架构如下:

{
  "type": "record",
  "doc": "Test schema",
  "name": "test",
  "fields":
  [
    {
      "name": "event_id",
      "type": "string"
    },
    {
      "name": "source_ip",
      "type": "string"
    }
  ]
}

我正在尝试通过以下记录:

bad_event = {"event_id": "82be06d4-df37-414e-ae9d-03dcaecdf8d3",
             "source_ip": "123.446.789.001", 
             "extra-junk": "seems like extra junk is okay" }

我发现的是,编码器不会在此记录上引发错误,而是仅截断了多余的字段。我希望它无效并引发异常。

0 个答案:

没有答案