Я определил pyparsing
правило для разбора этого текста в синтаксическое дерево ...
ТЕКСТОВЫЕ КОМАНДЫ:
add Iteration name = "Cisco 10M/half"
append Observation name = "packet loss 1"
assign Observation results_text = 0.0
assign Observation results_bool = True
append DataPoint
assign DataPoint metric = txpackets
assign DataPoint units = packets
append DataPoint
assign DataPoint metric = txpackets
assign DataPoint units = packets
append Observation name = "packet loss 2"
append DataPoint
assign DataPoint metric = txpackets
assign DataPoint units = packets
append DataPoint
assign DataPoint metric = txpackets
assign DataPoint units = packets
SYNTAX TREE:
['add', 'Iteration', ['name', 'Cisco 10M/half']]
['append', 'Observation', ['name', 'packet loss 1']]
['assign', 'Observation', ['results_text', '0.0']]
['assign', 'Observation', ['results_bool', 'True']]
['append', 'DataPoint']
['assign', 'DataPoint', ['metric', 'txpackets']]
['assign', 'DataPoint', ['units', 'packets']]
...
Я пытаюсь связать все вложенные пары ключ-значение в приведенном выше дереве синтаксиса в связанный список объектов ... иерархия выглядит примерно так(каждое слово - namedtuple
... дети в иерархии включены в список родителей родителей):
Log: [
Iteration: [
Observation:
[DataPoint, DataPoint],
Observation:
[DataPoint, DataPoint]
]
]
Цель всего этого - создать общую тестовую платформу сбора данных дляпроведите поток испытаний с сетевым оборудованием и запишите результаты.После того, как данные в этом формате, та же структура данных будет использоваться для создания отчета о тестировании.Чтобы ответить на вопрос в комментариях ниже, я выбрал связанный список, потому что он казался самым простым способом последовательного удаления информации при написании отчета.Однако я бы предпочел не присваивать порядковые номера Iteration
или Observation
до завершения тестов ... в случае, если мы обнаружим проблемы и добавим больше наблюдений в ходе проведения теста.Моя теория состоит в том, что положение каждого элемента в списке достаточно, но я готов изменить это, если это часть проблемы.
Проблема в том, что я заблудился, пытаясь назначить Key-Значения для объектов в связанном списке после его построения.Например, после того, как я вставил Observation
namedtuple
в первый Iteration
, у меня возникли проблемы с надежной обработкой обновления assign Observation results_bool = True
в приведенном выше примере.
Существует ли обобщенный шаблон проектирования для обработкиэта ситуация?Я уже некоторое время гуглял, но, похоже, не могу установить связь между разбором текста (что я могу сделать) и управлением иерархией данных (основная проблема).Гиперссылки или небольшой демонстрационный код - это хорошо ... Мне просто нужны указатели, чтобы встать на правильный путь.