From eff7406c6dd64389932a38863c2cd3cb993552d1 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Fri, 19 Jul 2024 10:37:39 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F;=20=D0=9F=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB=20=D0=9F=D1=80=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5.os=20->=20app.os=20=D0=B8?= =?UTF-8?q?=D0=B7-=D0=B7=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5?= =?UTF-8?q?=D0=BC=D1=8B=20=D1=81=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=BE=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cli_draft.yml | 4 +- .github/workflows/cli_draft_en.yml | 4 +- .github/workflows/cli_test.yml | 5 +- .github/workflows/cli_test_en.yml | 5 +- .github/workflows/os/cli_parse.os | 2 +- .github/workflows/os/cli_testmaker.os | 4 +- .github/workflows/os/cli_testmaker_en.os | 4 +- .github/workflows/os/releasemaker.os | 4 +- .../core/Classes/{Приложение.os => app.os} | 700 +++++++++--------- src/en/cli/packagedef | 1 + .../core/Classes/{Приложение.os => app.os} | 0 src/ru/cli/packagedef | 1 + 12 files changed, 369 insertions(+), 365 deletions(-) rename src/en/cli/core/Classes/{Приложение.os => app.os} (97%) rename src/ru/cli/core/Classes/{Приложение.os => app.os} (100%) diff --git a/.github/workflows/cli_draft.yml b/.github/workflows/cli_draft.yml index 613e6d003d..a2f543b8ec 100644 --- a/.github/workflows/cli_draft.yml +++ b/.github/workflows/cli_draft.yml @@ -41,12 +41,12 @@ jobs: - name: Собрать бинарник run: | cd ./src/ru/cli - oscript -make core/Classes/Приложение.os oint + oscript -make core/Classes/app.os oint - name: Собрать exe run: | cd ./src/ru/cli - oscript -make core/Classes/Приложение.os oint.exe + oscript -make core/Classes/app.os oint.exe - name: Записать артефакт uses: actions/upload-artifact@v4 diff --git a/.github/workflows/cli_draft_en.yml b/.github/workflows/cli_draft_en.yml index 160dd1dd18..c343acee23 100644 --- a/.github/workflows/cli_draft_en.yml +++ b/.github/workflows/cli_draft_en.yml @@ -41,12 +41,12 @@ jobs: - name: Собрать бинарник run: | cd ./src/en/cli - oscript -make core/Classes/Приложение.os oint + oscript -make core/Classes/app.os oint - name: Собрать exe run: | cd ./src/en/cli - oscript -make core/Classes/Приложение.os oint.exe + oscript -make core/Classes/app.os oint.exe - name: Записать артефакт uses: actions/upload-artifact@v4 diff --git a/.github/workflows/cli_test.yml b/.github/workflows/cli_test.yml index d3fdf86b13..a323ad984c 100644 --- a/.github/workflows/cli_test.yml +++ b/.github/workflows/cli_test.yml @@ -57,12 +57,12 @@ jobs: - name: Собрать бинарник run: | cd ./src/ru/cli - oscript -make core/Classes/Приложение.os oint + oscript -make core/Classes/app.os oint - name: Собрать exe run: | cd ./src/ru/cli - oscript -make core/Classes/Приложение.os oint.exe + oscript -make core/Classes/app.os oint.exe - name: Записать артефакт uses: actions/upload-artifact@v4 @@ -266,6 +266,7 @@ jobs: --doc "${{ env.json_Document }}" \ --keyboard "" \ --parsemode "" \ + --filename "" \ diff --git a/.github/workflows/cli_test_en.yml b/.github/workflows/cli_test_en.yml index 8c3a33d2de..ce911786ae 100644 --- a/.github/workflows/cli_test_en.yml +++ b/.github/workflows/cli_test_en.yml @@ -57,12 +57,12 @@ jobs: - name: Собрать бинарник run: | cd ./src/en/cli - oscript -make core/Classes/Приложение.os oint + oscript -make core/Classes/app.os oint - name: Собрать exe run: | cd ./src/en/cli - oscript -make core/Classes/Приложение.os oint.exe + oscript -make core/Classes/app.os oint.exe - name: Записать артефакт uses: actions/upload-artifact@v4 @@ -266,6 +266,7 @@ jobs: --doc "${{ env.json_Document }}" \ --keyboard "" \ --parsemode "" \ + --filename "" \ diff --git a/.github/workflows/os/cli_parse.os b/.github/workflows/os/cli_parse.os index 513505d5b9..9ab6cae744 100644 --- a/.github/workflows/os/cli_parse.os +++ b/.github/workflows/os/cli_parse.os @@ -813,7 +813,7 @@ ТЗСловаря.Сортировать("Длина УБЫВ"); МассивМодулейДляПеревода = Новый Массив; - МассивМодулейДляПеревода.Добавить("./src/" + ТекущийЯзык + "/cli/core/Classes/Приложение.os"); + МассивМодулейДляПеревода.Добавить("./src/" + ТекущийЯзык + "/cli/core/Classes/app.os"); МассивМодулейДляПеревода.Добавить("./src/" + ТекущийЯзык + "/cli/help/Modules/Справка.os"); Для Каждого ПереводимыйМодуль Из МассивМодулейДляПеревода Цикл diff --git a/.github/workflows/os/cli_testmaker.os b/.github/workflows/os/cli_testmaker.os index 5532acb71d..52edc39a8c 100644 --- a/.github/workflows/os/cli_testmaker.os +++ b/.github/workflows/os/cli_testmaker.os @@ -131,12 +131,12 @@ | - name: Собрать бинарник | run: | | cd ./src/ru/cli - | oscript -make core/Classes/Приложение.os oint + | oscript -make core/Classes/app.os oint | | - name: Собрать exe | run: | | cd ./src/ru/cli - | oscript -make core/Classes/Приложение.os oint.exe + | oscript -make core/Classes/app.os oint.exe | | - name: Записать артефакт | uses: actions/upload-artifact@v4 diff --git a/.github/workflows/os/cli_testmaker_en.os b/.github/workflows/os/cli_testmaker_en.os index 51e5eb1ebc..dfcb6eabb8 100644 --- a/.github/workflows/os/cli_testmaker_en.os +++ b/.github/workflows/os/cli_testmaker_en.os @@ -131,12 +131,12 @@ | - name: Собрать бинарник | run: | | cd ./src/en/cli - | oscript -make core/Classes/Приложение.os oint + | oscript -make core/Classes/app.os oint | | - name: Собрать exe | run: | | cd ./src/en/cli - | oscript -make core/Classes/Приложение.os oint.exe + | oscript -make core/Classes/app.os oint.exe | | - name: Записать артефакт | uses: actions/upload-artifact@v4 diff --git a/.github/workflows/os/releasemaker.os b/.github/workflows/os/releasemaker.os index 0df15eb2bd..6f0a20d9a9 100644 --- a/.github/workflows/os/releasemaker.os +++ b/.github/workflows/os/releasemaker.os @@ -25,7 +25,7 @@ СтруктураРус.Вставить("База" , "OpenIntegrations"); СтруктураРус.Вставить("ПутьКEDT", ПутьКРепозиторию + "\src\ru\OPI"); СтруктураРус.Вставить("ПутьOS" , ПутьКРепозиторию + "\src\ru\OInt"); - СтруктураРус.Вставить("ПутьCLI" , ПутьКРепозиторию + "\src\ru\cli\core\Classes\Приложение.os"); + СтруктураРус.Вставить("ПутьCLI" , ПутьКРепозиторию + "\src\ru\cli\core\Classes\app.os"); СтруктураРус.Вставить("ПутьISS" , ПутьКРепозиторию + "\service\iss\ru.iss"); СтруктураРус.Вставить("Префикс" , "ru"); @@ -33,7 +33,7 @@ СтруктураАнг.Вставить("База" , "OpenIntegrations_Eng"); СтруктураАнг.Вставить("ПутьКEDT", ПутьКРепозиторию + "\src\en\OPI"); СтруктураАнг.Вставить("ПутьOS" , ПутьКРепозиторию + "\src\en\OInt"); - СтруктураАнг.Вставить("ПутьCLI" , ПутьКРепозиторию + "\src\en\cli\core\Classes\Приложение.os"); + СтруктураАнг.Вставить("ПутьCLI" , ПутьКРепозиторию + "\src\en\cli\core\Classes\app.os"); СтруктураАнг.Вставить("ПутьISS" , ПутьКРепозиторию + "\service\iss\en.iss"); СтруктураАнг.Вставить("Префикс" , "en"); diff --git a/src/en/cli/core/Classes/Приложение.os b/src/en/cli/core/Classes/app.os similarity index 97% rename from src/en/cli/core/Classes/Приложение.os rename to src/en/cli/core/Classes/app.os index 84976858f8..16c17db1cc 100644 --- a/src/en/cli/core/Classes/Приложение.os +++ b/src/en/cli/core/Classes/app.os @@ -1,350 +1,350 @@ -#Использовать cmdline -#Использовать oint -#Использовать "../../tools" -#Использовать "../../help" -#Использовать "../../data" - -Перем Версия; // Версия программы -Перем Отладка; // Флаг вывода отладочной информации -Перем Тестирование; // Флаг отключения отправки данных после обработки - -Перем Парсер; // Объект парсера входящих данных -Перем ОбъектОПИ; // Объект работы с методами ОПИ - -Перем ФайлВывода; // Путь перенаправления вывода в файл - -Перем ТаблицаПараметров; // Таблица параметров текущей библиотеки -Перем ТекущаяКоманда; // Имя текущей команды -Перем Команды; // Список всех доступных команд - -#Область СлужебныеПроцедурыИФункции - -#Область Основные - -Процедура ОсновнойОбработчик() - - Отладка = Ложь; - Тестирование = Ложь; - - Парсер = Новый ПарсерАргументовКоманднойСтроки(); - ОбъектОПИ = Новый СоставБиблиотеки(); - Версия = ОбъектОПИ.ПолучитьВерсию(); - Команды = ОбъектОПИ.ПолучитьСоответствиеКомандМодулей(); - - ОпределитьТекущуюКоманду(); - СформироватьКоманду(); - - Результат = Парсер.Разобрать(АргументыКоманднойСтроки); - ВыполнитьОбработкуКоманды(Результат); - -КонецПроцедуры - -Процедура ОпределитьТекущуюКоманду() - - Если АргументыКоманднойСтроки.Количество() > 0 Тогда - ТекущаяКоманда = АргументыКоманднойСтроки[0]; - Иначе - ТекущаяКоманда = Неопределено; - КонецЕсли; - -КонецПроцедуры - -Процедура СформироватьКоманду() - - Если ТекущаяКоманда = Неопределено Тогда - Справка.ВывестиНачальнуюСтраницу(Команды, Версия); - Возврат; - КонецЕсли; - - Команда = Парсер.ОписаниеКоманды(ТекущаяКоманда); - ТаблицаПараметров = ОбъектОПИ.ПолучитьСостав(ТекущаяКоманда); - - Если Не ТаблицаПараметров = Неопределено Тогда - - Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод"); - - ДобавитьПараметрыКоманды(Парсер, Команда); - Парсер.ДобавитьПараметрФлагКоманды(Команда, "--help"); - Парсер.ДобавитьПараметрФлагКоманды(Команда, "--debug"); - Парсер.ДобавитьПараметрФлагКоманды(Команда, "--test"); - - Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "--out"); - - Парсер.ДобавитьКоманду(Команда); - - Иначе - Справка.ВывестиСообщениеИсключения("Команда"); - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьОбработкуКоманды(Знач Данные) - - ТекущаяКоманда = Данные["Команда"]; - Параметры = Данные["ЗначенияПараметров"]; - Вывод = ""; - - УстановитьРежимОтладки(Параметры); - УстановитьРежимТеста(Параметры); - УстановитьФайлВывода(Параметры); - ВывестиДопИнформацию(Параметры); - - Попытка - - Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Параметры); - - Если ЗначениеЗаполнено(Вывод) Тогда - ОбработатьВыводJSON(Вывод); - СообщитьРезультат(Вывод, СтатусСообщения.Внимание); - КонецЕсли; - - Исключение - ОбработатьОшибочныйВывод(Вывод, ErrorInfo()); - КонецПопытки; - -КонецПроцедуры - -Функция ПолучитьРезультатОбработки(Знач Команда, Знач Параметры) - - Модуль = Команды[Команда]; - Метод = Параметры["Метод"]; - Ответ = "The function returned an empty value."; - - ЧислоСтандартныхПараметров = 4; - - Если Не ЗначениеЗаполнено(Метод) Или Метод = "--help" Тогда - Справка.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров); - КонецЕсли; - - ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод)); - ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды); - - Если Параметры.Количество() = ЧислоСтандартныхПараметров Или Параметры["--help"] Тогда - Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода); - КонецЕсли; - - ТекстВыполнения = СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод); - - Если Отладка Или Тестирование Тогда - Сообщить(ТекстВыполнения, СтатусСообщения.Внимание); - КонецЕсли; - - Если Не Тестирование Тогда - Выполнить(ТекстВыполнения); - КонецЕсли; - - Возврат Ответ; - -КонецФункции - -#КонецОбласти - -#Область Вспомогательные - -Процедура ДобавитьПараметрыКоманды(Парсер, Команда); - - Параметр_ = "Параметр"; - - ТаблицаДляИспользования = ТаблицаПараметров.Скопировать(, Параметр_); - ТаблицаДляИспользования.Свернуть(Параметр_); - - МассивПараметров = ТаблицаДляИспользования.ВыгрузитьКолонку(Параметр_); - - Для Каждого Параметр Из МассивПараметров Цикл - Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр); - КонецЦикла; - -КонецПроцедуры - -Процедура ОбработатьВыводJSON(Вывод) - - Если ТипЗнч(Вывод) = Тип("Структура") - Или ТипЗнч(Вывод) = Тип("Соответствие") - Или ТипЗнч(Вывод) = Тип("Массив") Тогда - - Вывод = OPI_Tools.JSONString(Вывод); - - КонецЕсли; - -КонецПроцедуры - -Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод) - - ТекстВыполнения = ""; - СтрокаВызова = Модуль + "." + Метод + "("; - Счетчик = 0; - - Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл - - ИмяПараметра = НеобходимыйПараметр.Параметр; - ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра); - - Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда - - ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_"); - - ТекстВыполнения = ТекстВыполнения - + Символы.ПС - + ИмяПараметра - + " = """ - + СтрЗаменить(ЗначениеПараметра, """", """""") - + """;"; - - СтрокаВызова = СтрокаВызова + ИмяПараметра + ", "; - Счетчик = Счетчик + 1; - - Иначе - СтрокаВызова = СтрокаВызова + " , "; - КонецЕсли; - - КонецЦикла; - - ЛишниеСимволы = 2; - СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы); - СтрокаВызова = СтрокаВызова + ");"; - СтрокаВызова = "Ответ = " + СтрокаВызова; - ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова; - - Возврат ТекстВыполнения; - -КонецФункции - -Процедура УстановитьРежимОтладки(Знач Параметры) - - Если Параметры["--debug"] Тогда - Отладка = Истина; - Иначе - Отладка = Ложь; - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьРежимТеста(Знач Параметры) - - Если Параметры["--test"] Тогда - Тестирование = Истина; - Иначе - Тестирование = Ложь; - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьФайлВывода(Знач Параметры) - - Вывод = Параметры["--out"]; - - Если ЗначениеЗаполнено(Вывод) Тогда - ФайлВывода = Вывод; - КонецЕсли; - -КонецПроцедуры - -Процедура ВывестиДопИнформацию(Параметры) - - Если Отладка Или Тестирование Тогда - - Для каждого ВводныйПараметр Из Параметры Цикл - Сообщить(ВводныйПараметр.Ключ + " : " + ВводныйПараметр.Значение); - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -Процедура ОбработатьОшибочныйВывод(Вывод, ErrorInfo) - - Информация = ""; - Если ЗначениеЗаполнено(Вывод) Тогда - - Если Отладка Или Тестирование Тогда - Информация = ПодробноеПредставлениеОшибки(ErrorInfo); - КонецЕсли; - - СообщитьРезультат(Вывод); - Иначе - - Если Отладка Или Тестирование Тогда - Информация = ПодробноеПредставлениеОшибки(ErrorInfo); - Иначе - Информация = BriefErrorDescription(ErrorInfo); - КонецЕсли; - - КонецЕсли; - - Справка.ВывестиСообщениеИсключения(Информация); - -КонецПроцедуры - -Процедура СообщитьРезультат(Знач Текст, Знач Статус = "") - - Если Не ЗначениеЗаполнено(Статус) Тогда - Статус = СтатусСообщения.БезСтатуса; - КонецЕсли; - - Если ЗначениеЗаполнено(ФайлВывода) Тогда - Текст = ЗаписатьЗначениеВФайл(Текст, ФайлВывода); - ИначеЕсли ТипЗнч(Текст) = Тип("ДвоичныеДанные") Тогда - Текст = "It seems that binary data was returned in the response! " - + "Next time, use the --out option to specify the path for saving them"; - Статус = СтатусСообщения.Информация; - Иначе - Текст = Строка(Текст); - КонецЕсли; - - Сообщить(Текст, Статус); - -КонецПроцедуры - -Функция ЗаписатьЗначениеВФайл(Знач Значение, Знач Путь) - - СтандартнаяЕдиница = 1024; - ЕдиницаДанных = СтандартнаяЕдиница * СтандартнаяЕдиница; - Значение = ?(ТипЗнч(Значение) = Тип("ДвоичныеДанные"), Значение, Строка(Значение)); - - Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда - Значение.Записать(Путь); - Иначе - - ВозможныйФайл = Новый Файл(Значение); - - Если ВозможныйФайл.Существует() Тогда - Путь = Значение; - Иначе - ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.УстановитьТекст(Значение); - ТекстовыйДокумент.Записать(Путь); - КонецЕсли; - - КонецЕсли; - - ЗаписанныйФайл = Новый Файл(Путь); - - Если ЗаписанныйФайл.Существует() Тогда - Возврат "File (Size " - + Строка(Окр(ЗаписанныйФайл.Размер() / ЕдиницаДанных, 3)) - + " MB) has been written to " - + ЗаписанныйФайл.ПолноеИмя; - Иначе - ВызватьИсключение "The file was not written! Use the --debug flag for additional information"; - КонецЕсли; - -КонецФункции - -#КонецОбласти - -#КонецОбласти - -Попытка - ОсновнойОбработчик(); -Исключение - - Если Отладка Тогда - Информация = ErrorDescription(); - Иначе - Информация = BriefErrorDescription(ErrorInfo()); - КонецЕсли; - - Справка.ВывестиСообщениеИсключения(Информация); - -КонецПопытки; - +#Использовать cmdline +#Использовать oint +#Использовать "../../tools" +#Использовать "../../help" +#Использовать "../../data" + +Перем Версия; // Версия программы +Перем Отладка; // Флаг вывода отладочной информации +Перем Тестирование; // Флаг отключения отправки данных после обработки + +Перем Парсер; // Объект парсера входящих данных +Перем ОбъектОПИ; // Объект работы с методами ОПИ + +Перем ФайлВывода; // Путь перенаправления вывода в файл + +Перем ТаблицаПараметров; // Таблица параметров текущей библиотеки +Перем ТекущаяКоманда; // Имя текущей команды +Перем Команды; // Список всех доступных команд + +#Область СлужебныеПроцедурыИФункции + +#Область Основные + +Процедура ОсновнойОбработчик() + + Отладка = Ложь; + Тестирование = Ложь; + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + ОбъектОПИ = Новый СоставБиблиотеки(); + Версия = ОбъектОПИ.ПолучитьВерсию(); + Команды = ОбъектОПИ.ПолучитьСоответствиеКомандМодулей(); + + ОпределитьТекущуюКоманду(); + СформироватьКоманду(); + + Результат = Парсер.Разобрать(АргументыКоманднойСтроки); + ВыполнитьОбработкуКоманды(Результат); + +КонецПроцедуры + +Процедура ОпределитьТекущуюКоманду() + + Если АргументыКоманднойСтроки.Количество() > 0 Тогда + ТекущаяКоманда = АргументыКоманднойСтроки[0]; + Иначе + ТекущаяКоманда = Неопределено; + КонецЕсли; + +КонецПроцедуры + +Процедура СформироватьКоманду() + + Если ТекущаяКоманда = Неопределено Тогда + Справка.ВывестиНачальнуюСтраницу(Команды, Версия); + Возврат; + КонецЕсли; + + Команда = Парсер.ОписаниеКоманды(ТекущаяКоманда); + ТаблицаПараметров = ОбъектОПИ.ПолучитьСостав(ТекущаяКоманда); + + Если Не ТаблицаПараметров = Неопределено Тогда + + Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод"); + + ДобавитьПараметрыКоманды(Парсер, Команда); + Парсер.ДобавитьПараметрФлагКоманды(Команда, "--help"); + Парсер.ДобавитьПараметрФлагКоманды(Команда, "--debug"); + Парсер.ДобавитьПараметрФлагКоманды(Команда, "--test"); + + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "--out"); + + Парсер.ДобавитьКоманду(Команда); + + Иначе + Справка.ВывестиСообщениеИсключения("Команда"); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьОбработкуКоманды(Знач Данные) + + ТекущаяКоманда = Данные["Команда"]; + Параметры = Данные["ЗначенияПараметров"]; + Вывод = ""; + + УстановитьРежимОтладки(Параметры); + УстановитьРежимТеста(Параметры); + УстановитьФайлВывода(Параметры); + ВывестиДопИнформацию(Параметры); + + Попытка + + Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Параметры); + + Если ЗначениеЗаполнено(Вывод) Тогда + ОбработатьВыводJSON(Вывод); + СообщитьРезультат(Вывод, СтатусСообщения.Внимание); + КонецЕсли; + + Исключение + ОбработатьОшибочныйВывод(Вывод, ErrorInfo()); + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьРезультатОбработки(Знач Команда, Знач Параметры) + + Модуль = Команды[Команда]; + Метод = Параметры["Метод"]; + Ответ = "The function returned an empty value."; + + ЧислоСтандартныхПараметров = 4; + + Если Не ЗначениеЗаполнено(Метод) Или Метод = "--help" Тогда + Справка.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров); + КонецЕсли; + + ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод)); + ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды); + + Если Параметры.Количество() = ЧислоСтандартныхПараметров Или Параметры["--help"] Тогда + Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода); + КонецЕсли; + + ТекстВыполнения = СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод); + + Если Отладка Или Тестирование Тогда + Сообщить(ТекстВыполнения, СтатусСообщения.Внимание); + КонецЕсли; + + Если Не Тестирование Тогда + Выполнить(ТекстВыполнения); + КонецЕсли; + + Возврат Ответ; + +КонецФункции + +#КонецОбласти + +#Область Вспомогательные + +Процедура ДобавитьПараметрыКоманды(Парсер, Команда); + + Параметр_ = "Параметр"; + + ТаблицаДляИспользования = ТаблицаПараметров.Скопировать(, Параметр_); + ТаблицаДляИспользования.Свернуть(Параметр_); + + МассивПараметров = ТаблицаДляИспользования.ВыгрузитьКолонку(Параметр_); + + Для Каждого Параметр Из МассивПараметров Цикл + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр); + КонецЦикла; + +КонецПроцедуры + +Процедура ОбработатьВыводJSON(Вывод) + + Если ТипЗнч(Вывод) = Тип("Структура") + Или ТипЗнч(Вывод) = Тип("Соответствие") + Или ТипЗнч(Вывод) = Тип("Массив") Тогда + + Вывод = OPI_Tools.JSONString(Вывод); + + КонецЕсли; + +КонецПроцедуры + +Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод) + + ТекстВыполнения = ""; + СтрокаВызова = Модуль + "." + Метод + "("; + Счетчик = 0; + + Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл + + ИмяПараметра = НеобходимыйПараметр.Параметр; + ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра); + + Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда + + ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_"); + + ТекстВыполнения = ТекстВыполнения + + Символы.ПС + + ИмяПараметра + + " = """ + + СтрЗаменить(ЗначениеПараметра, """", """""") + + """;"; + + СтрокаВызова = СтрокаВызова + ИмяПараметра + ", "; + Счетчик = Счетчик + 1; + + Иначе + СтрокаВызова = СтрокаВызова + " , "; + КонецЕсли; + + КонецЦикла; + + ЛишниеСимволы = 2; + СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы); + СтрокаВызова = СтрокаВызова + ");"; + СтрокаВызова = "Ответ = " + СтрокаВызова; + ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова; + + Возврат ТекстВыполнения; + +КонецФункции + +Процедура УстановитьРежимОтладки(Знач Параметры) + + Если Параметры["--debug"] Тогда + Отладка = Истина; + Иначе + Отладка = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьРежимТеста(Знач Параметры) + + Если Параметры["--test"] Тогда + Тестирование = Истина; + Иначе + Тестирование = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьФайлВывода(Знач Параметры) + + Вывод = Параметры["--out"]; + + Если ЗначениеЗаполнено(Вывод) Тогда + ФайлВывода = Вывод; + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиДопИнформацию(Параметры) + + Если Отладка Или Тестирование Тогда + + Для каждого ВводныйПараметр Из Параметры Цикл + Сообщить(ВводныйПараметр.Ключ + " : " + ВводныйПараметр.Значение); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьОшибочныйВывод(Вывод, ErrorInfo) + + Информация = ""; + Если ЗначениеЗаполнено(Вывод) Тогда + + Если Отладка Или Тестирование Тогда + Информация = ПодробноеПредставлениеОшибки(ErrorInfo); + КонецЕсли; + + СообщитьРезультат(Вывод); + Иначе + + Если Отладка Или Тестирование Тогда + Информация = ПодробноеПредставлениеОшибки(ErrorInfo); + Иначе + Информация = BriefErrorDescription(ErrorInfo); + КонецЕсли; + + КонецЕсли; + + Справка.ВывестиСообщениеИсключения(Информация); + +КонецПроцедуры + +Процедура СообщитьРезультат(Знач Текст, Знач Статус = "") + + Если Не ЗначениеЗаполнено(Статус) Тогда + Статус = СтатусСообщения.БезСтатуса; + КонецЕсли; + + Если ЗначениеЗаполнено(ФайлВывода) Тогда + Текст = ЗаписатьЗначениеВФайл(Текст, ФайлВывода); + ИначеЕсли ТипЗнч(Текст) = Тип("ДвоичныеДанные") Тогда + Текст = "It seems that binary data was returned in the response! " + + "Next time, use the --out option to specify the path for saving them"; + Статус = СтатусСообщения.Информация; + Иначе + Текст = Строка(Текст); + КонецЕсли; + + Сообщить(Текст, Статус); + +КонецПроцедуры + +Функция ЗаписатьЗначениеВФайл(Знач Значение, Знач Путь) + + СтандартнаяЕдиница = 1024; + ЕдиницаДанных = СтандартнаяЕдиница * СтандартнаяЕдиница; + Значение = ?(ТипЗнч(Значение) = Тип("ДвоичныеДанные"), Значение, Строка(Значение)); + + Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда + Значение.Записать(Путь); + Иначе + + ВозможныйФайл = Новый Файл(Значение); + + Если ВозможныйФайл.Существует() Тогда + Путь = Значение; + Иначе + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.УстановитьТекст(Значение); + ТекстовыйДокумент.Записать(Путь); + КонецЕсли; + + КонецЕсли; + + ЗаписанныйФайл = Новый Файл(Путь); + + Если ЗаписанныйФайл.Существует() Тогда + Возврат "File (Size " + + Строка(Окр(ЗаписанныйФайл.Размер() / ЕдиницаДанных, 3)) + + " MB) has been written to " + + ЗаписанныйФайл.ПолноеИмя; + Иначе + ВызватьИсключение "The file was not written! Use the --debug flag for additional information"; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +Попытка + ОсновнойОбработчик(); +Исключение + + Если Отладка Тогда + Информация = ErrorDescription(); + Иначе + Информация = BriefErrorDescription(ErrorInfo()); + КонецЕсли; + + Справка.ВывестиСообщениеИсключения(Информация); + +КонецПопытки; + diff --git a/src/en/cli/packagedef b/src/en/cli/packagedef index bed9fd8b8a..09cb140c6e 100644 --- a/src/en/cli/packagedef +++ b/src/en/cli/packagedef @@ -11,3 +11,4 @@ .ЗависитОт("oint") .ЗависитОт("cmdline") .ЗависитОт("coloratos") + .ИсполняемыйФайл("core/Classes/app.os", "oint"); diff --git a/src/ru/cli/core/Classes/Приложение.os b/src/ru/cli/core/Classes/app.os similarity index 100% rename from src/ru/cli/core/Classes/Приложение.os rename to src/ru/cli/core/Classes/app.os diff --git a/src/ru/cli/packagedef b/src/ru/cli/packagedef index bed9fd8b8a..4f3be982b0 100644 --- a/src/ru/cli/packagedef +++ b/src/ru/cli/packagedef @@ -11,3 +11,4 @@ .ЗависитОт("oint") .ЗависитОт("cmdline") .ЗависитОт("coloratos") + .ИсполняемыйФайл("core/Classes/app.os", "oint")