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
構文ツリー:
['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-Value を割り当てようとして迷ってしまうことです。たとえばObservation
namedtuple
、最初の に を挿入した後、上記の例Iteration
の の更新を確実に処理するのに問題があります。assign Observation results_bool = True
この状況を処理するための一般化された設計パターンはありますか? 私はこれをしばらくグーグルで検索しましたが、テキストの解析 (私ができること) とデータ階層の管理 (主な問題) の間のリンクを作成できないようです。ハイパーリンクや小さなデモ コードは問題ありません。適切な軌道に乗るためのポインタが必要なだけです。