Домашнее задание №3
Разработать инструмент командной строки для учебного конфигурационного
языка, синтаксис которого приведен далее. Этот инструмент преобразует текст из
входного формата в выходной. Синтаксические ошибки выявляются с выдачей сообщений.
Входной текст на учебном конфигурационном языке принимается из
стандартного ввода. Выходной текст на языке yaml попадает в файл, путь к
которому задан ключом командной строки.
Данный проект представляет собой инструмент командной строки, разработанный для
преобразования текста с учебного конфигурационного языка в формат YAML.
Инструмент принимает входной текст из стандартного ввода и записывает преобразованный результат
в файл, путь к которому задается ключом командной строки.
При обнаружении синтаксических ошибок выводятся соответствующие сообщения.
-
Клонируйте репозиторий:
git clone https://github.com/kcatrina/Konfig3.git cd Konfig3 -
Установите необходимые зависимости:
Убедитесь, что у вас установлен Python 3. Если в проекте имеется файл requirements.txt,
установите зависимости с помощью pip:
pip install -r requirements.txt
Примечание: Если файл requirements.txt отсутствует, убедитесь,
что установлены необходимые библиотеки, используемые в проекте.
- Запустите инструмент:
Используйте следующую команду для запуска инструмента, указав путь к выходному файлу:
python main.py -o path/to/output.yaml
Ввод текста на учебном конфигурационном языке осуществляется через стандартный ввод.
Например, вы можете использовать перенаправление ввода из файла:
python main.py -o path/to/output.yaml < input.txt
Инструмент преобразует текст с учебного конфигурационного языка в формат YAML. При запуске укажите путь к выходному файлу с помощью опции -o или --output:
python main.py --output path/to/output.yaml
Ввод текста может осуществляться через стандартный ввод или из файла с использованием
перенаправления. При обнаружении синтаксических ошибок инструмент выведет соответствующие
сообщения в стандартный вывод.
В проекте имеется файл tests.py, содержащий тесты для проверки функциональности
инструмента. Вы можете запустить тесты с помощью следующей команды:
python tests.py
Убедитесь, что все тесты проходят успешно перед использованием инструмента.
-
Python 3.x
-
Необходимые библиотеки, указанные в requirements.txt (если имеется)
-
main.py — основной файл с реализацией инструмента.
-
input.txt — пример входного файла с текстом на учебном конфигурационном языке.
-
output.yaml — файл для записи результата преобразования в формат YAML.
-
tests.py — модуль с тестами для проверки функциональности.
-
README.md — документация проекта.
Пример 1
input.txt
max_connections -> max_conn;
[app_name => "MyApp", version => 1, settings => [max_users => 100, max_connections => @{max_conn}, allowed_ips => (list "192.168.1.1" "192.168.1.2" "10.0.0.1")] [host => "localhost", port => 5432, credentials => [user => "admin", password => "secret"]]]
output.yaml
- app_name: MyApp
settings:
allowed_ips:
- 192.168.1.1
- 192.168.1.2
- 10.0.0.1
credentials:
password: secret
user: admin
max_connections: max_connections
max_users: 100
port: 5432
version: 1
Пример 2 input.txt
max_connections -> max_conn;
[app_name => "SecondApp", version => 2, settings => [max_users => 1000, max_connections => @{max_conn}, allowed_ips => (list "192.168.1.1" "192.168.1.2" "10.0.0.1")] [host => "localhost", port => 5172, credentials => [user => "admin", password => "secret"]]]
ouput.yaml
- app_name: SecondApp
settings:
allowed_ips:
- 192.168.1.1
- 192.168.1.2
- 10.0.0.1
credentials:
password: secret
user: admin
max_connections: max_connections
max_users: 1000
port: 5172
version: 2
Пример 3 input.txt
max_connections -> max_conn;
[app_name => "App", version => 16, settings => [max_users => 800, max_connections => @{max_conn}, allowed_ips => (list "192.168.1.1" "192.168.1.2" "10.0.0.1")] [host => "localhost", port => 1456, credentials => [user => "admin", password => "secret"]]]
ouput.txt
- app_name: App
settings:
allowed_ips:
- 192.168.1.1
- 192.168.1.2
- 10.0.0.1
credentials:
password: secret
user: admin
max_connections: max_connections
max_users: 800
port: 1456
version: 16