Проект намеренно небольшой: Python 3.11+, стандартная библиотека, unittest, без runtime-зависимостей.
Проверить версию Python:
python --versionОпционально установить проект в editable-режиме:
python -m pip install -e .После этого доступны console scripts:
generate-config-report --help
generate-config-report-build-overrides --helpБез установки можно запускать напрямую:
python generate_config_report.py --help
python -m generate_config_report --helpПолный прогон:
python -B -m unittest discover -s tests -vЧасть integration tests требует локальный каталог:
D:\cf_llv
D:\cf_llv\Configuration.xml
Эти тесты намеренно создают и заменяют:
D:\cf_llv\ОтчетПоКонфигурации.txt
Если фикстуры нет, тест должен падать с понятным сообщением. Это сделано специально: для простого CLI проверяется реальная XML-конфигурация, а не минимальный временный пример.
Синтаксис ключевых файлов:
python -m py_compile generate_config_report\cli.py generate_config_report\generator.py generate_config_report\__main__.py tests\test_generate_config_report.pyHelp основного CLI:
python generate_config_report.py --help
python -m generate_config_report --helpDry-run на локальной фикстуре:
python generate_config_report.py D:\cf_llv --dry-run
python -m generate_config_report D:\cf_llv --dry-runПроверка whitespace в diff:
git diff --checkПростой режим:
python generate_config_report.py D:\cf_llvОжидаемый результат:
D:\cf_llv\ОтчетПоКонфигурации.txt
Отчет должен быть непустым и содержать корневую строку вида:
- Конфигурации.
Расширенный режим:
python generate_config_report.py --config .\config.example.jsonПеред запуском замените пути в config.example.json на локальные.
Предпочтительный порядок:
- Найти XML-элемент в реальной выгрузке и определить, как это свойство выглядит в отчете конфигуратора.
- Проверить, можно ли выразить поддержку настройками в
settings/defaults.json. - Если XML-имя отличается от имени отчета, добавить alias в
propertyAliases. - Если значение нужно перевести, добавить правило в
propertyValueTranslations,propertyValuePrefixTranslations,valueTranslationsили соседний раздел. - Добавить свойство в whitelist нужного
objectTypesилиchildCollections. - Если свойство имеет сложную XML-структуру, добавить extractor-логику в
property_extractors.py. - Добавить unit test на минимальный XML-фрагмент.
- Прогнать tests и smoke на
D:\cf_llv.
Если новое правило зависит от конкретной конфигурации, не добавляйте его как project-specific условие в Python-код. Используйте settings overlay или XML-derived overrides.
Для нового типа метаданных обычно достаточно расширить objectTypes в settings/defaults.json:
{
"typeKey": "new_type",
"folderNames": ["NewTypes", "НовыеТипы"],
"xmlElementNames": ["NewType"],
"reportPlural": "НовыеТипы",
"whitelist": [
"@common",
"Имя",
"Синоним"
],
"childCollections": [
"forms",
"commands"
]
}Правила:
typeKeyдолжен быть стабильным внутренним идентификатором;folderNamesдолжны включать известные варианты папок XML-выгрузки;xmlElementNamesнужны, если имя XML-элемента не выводится автоматически из папки;reportPluralдолжен совпадать с заголовком в отчете;whitelistзадает порядок свойств;childCollectionsпереиспользует уже описанные вложенные коллекции.
Если тип имеет нестандартные вложенные объекты, сначала добавьте их в childCollections.
Для проверки builder-а отдельно:
python -m generate_config_report.build_xml_overrides `
--repo-path D:\repo `
--main-config-path src\cf `
--output D:\repo\settings\generated\demo.xml-overrides.jsonПосле генерации проверьте JSON:
python -m json.tool D:\repo\settings\generated\demo.xml-overrides.jsonBuilder должен оставаться конфигурационно-универсальным. Новые rules допустимы, если они выводятся из XML-структуры и не завязаны на один проектный путь или одно имя базы.
Если новая поддержка уменьшает число warnings, проверьте:
report-diagnostics.json;report-stats.json;- количество
unsupportedComplexProperty; - количество
unsupportedType; - наличие новых ошибок парсинга.
При добавлении fallback-поведения лучше явно решить, нужен ли warning. Для массовых ожидаемых случаев warning может создавать шум, для неизвестного XML-формата warning полезен.
При изменениях важно сохранять:
- простой CLI с одним аргументом;
- module-вариант
python -m generate_config_report; - JSON config mode
--config; - safe replace итогового отчета;
- возможность работы без diagnostics/logs;
- отсутствие внешних runtime-зависимостей;
- универсальность через settings вместо project-specific условий.
Перед commit полезно проверить:
git status --short
git diff --check
python -B -m unittest discover -s tests -vНе коммитьте локальные временные артефакты из work/, если они не стали частью осознанной документации или тестовых данных.