Skip to content

kotiq/blk

Repository files navigation

Вспомогательный инcтрументарий для работы с файлами конфигурации.

Среда выполнения

Linux, Рython 3.7 для совместимости с PyPy3.

Установка

pip install .

Сборка документации

Диаграммы построены с использованием drawio

pip install -r requirements-docs.txt
python setup.py build_sphinx

Режим распаковки текстов

Демонстрационные скрипты находятся в проекте wt-tools. Они основаны на blk_unpacker.py проекта wt-tools и реализуют подобный интерфейс командной строки с форматами strict_blk, json, json_2, json_3.

blk_unpack_ng.py с одним процессом.
blk_unpack_ng_mp.py с числом процессов по количеству ядер.

Выходные форматы

strict_blk

Результат обхода секции в глубину с сохранением типов. Для форматов json* потребуется схема для полного восстановления секции.

Отображение Мультиотображение
// single_map-strict_blk.txt

a:i=1
b:i=2
c:i=3

sub{
  x:r=4.0
  y:r=5.0
}
// multi_map-strict_blk.txt

a:i=1
a:i=2
b:i=3

sub{
  x:r=4.0
  y:r=5.0
}

json

Подходит для секций, в которых мультизначение состоит из одного значения. Иначе контейнер из словаря превратится в список словарей на уровне мультизначения.

Отображение Мультиотображение
// single_map-json.json

{
  "a": 1,
  "b": 2,
  "c": 3,
  "sub": {
    "x": 4.0,
    "y": 5.0
  }
}
// multi_map-json.json

[
  {
    "a": 1
  },
  {
    "a": 2
  },
  {
    "b": 3
  },
  {
    "sub": {
      "x": 4.0,
      "y": 5.0
    }
  }
]

json_2

Каждое мультизначение представлено списком значений.

Отображение Мультиотображение
// single_map-json_2.json

{
  "a": [
    1
  ],
  "b": [
    2
  ],
  "c": [
    3
  ],
  "sub": [
    {
      "x": [
        4.0
      ],
      "y": [
        5.0
      ]
    }
  ]
}
// multi_map-json_2.json

{
  "a": [
    1,
    2
  ],
  "b": [
    3
  ],
  "sub": [
    {
      "x": [
        4.0
      ],
      "y": [
        5.0
      ]
    }
  ]
}

json_3

Мультизначение с одним значением представлено одним значением. Мультизначение с несколькими значениями представлено списком значений.

Отображение Мультиотображение
// single_map-json_3.json

{
  "a": 1,
  "b": 2,
  "c": 3,
  "sub": {
    "x": 4.0,
    "y": 5.0
  }
}
// multi_map-json_3.json

{
  "a": [
    1,
    2
  ],
  "b": 3,
  "sub": {
    "x": 4.0,
    "y": 5.0
  }
}

Особенности реализации

Инструмент основан на представлении секции как {name: [values]}.

[(a, x), (b, y), (a, z)] -> {a: [x, z], b: [y]}

Секция запоминает порядок только первого значения при добавлении (name, value) пары.

a -> x
a -> z
b -> y

Это может повлечь разрастание разности текстовых файлов, если вы прежде использовали в своих архивах распаковщик, основанный на представлении секции как [(name, value)], способной запоминать порядок всех пар при добавлении.

a -> x
b -> y
a -> z

Тестирование

Настраиваемые директории в pytest.ini

  • currespath директория с файлами blk текущего формата
  • bbfrespath директория с файлами blk формата bbf3
  • cdkpath директория CDK с текстовыми файлами
  • buildpath выходная директория тестов

После настройки одноименные фикстуры для pytestсодержат указанные пути.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published