Компиляция авро-схем (python), когда сообщение содержит более одного сообщения - PullRequest
2 голосов
/ 31 января 2012

Я использую import avro и т. Д. Для компиляции схем avro в python.Иногда моя схема avro будет выглядеть так:

{ name: "Message1" ..... }

{ name: "Message2", "fields": [ { "type": "Message1", "name": "previous_avro_schema" } ] } ...

Пожалуйста, игнорируйте опечатки.Я просто хочу донести сообщение.Суть в том, что у меня есть две схемы avro.Одна из схем avro использует в качестве одного из полей вторую схему avro.Как мне вызвать avro.schema.parse(....) для таких сообщений avro, чтобы их можно было правильно скомпилировать?

1 Ответ

0 голосов
/ 31 января 2012

Поддержка Avro Python довольно пафосна, но вы можете заставить некоторые вещи работать, включая несколько схем одновременно.Вам просто нужно объединить файлы схемы в один файл, и вам нужно убедиться, что они объединены в правильном порядке, чтобы сначала появились зависимости, и вам нужно заменить имена на фактическую схему. Это сценарий, который я используюобъединить их:

def resolve(path):
    "fully resolve a schema that includes other schemas"
    data = open(path).read()
    # fill in any while they remain
    while True:
        beg = data.find('`')
        end = data.find('`', beg + 1)
        if beg < 0:
            break
        path = os.path.join(os.path.dirname(path), data[beg+1:end] + '.avsc')
        data = data[:beg] + resolve(path) + data[end+1:]
    return data
...