1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-04-02 22:05:37 +02:00

Правки по CLI

This commit is contained in:
Anton Titovets 2024-03-26 14:15:13 +03:00
parent 419cedd743
commit d546b737c6
4 changed files with 119 additions and 108 deletions

View File

@ -6,58 +6,74 @@
Перем ОбъектОПИ;
Перем Парсер;
Процедура ПриСозданииОбъекта()
ОбъектОПИ = Новый СвязьОПИ();
КонецПроцедуры
#Область СлужебныеПроцедурыИФункции
#Область Основные
Процедура ОсновнойОбработчик()
Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер = Новый ПарсерАргументовКоманднойСтроки();
ОбъектОПИ = Новый СвязьОПИ();
Команды = ОбъектОПИ.СоответствиеКомандМодулей;
Для Каждого Команда Из ОбъектОПИ.ПолучитьИмяМодуля() Цикл
ДобавитьКомандуСправки();
Для Каждого Команда Из Команды Цикл
СформироватьКоманду(Команда.Ключ, Парсер);
КонецЦикла;
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
ТекущаяКоманда = Результат["Команда"];
Если ТекущаяКоманда = Неопределено Тогда
Справка.ВывестиНачальнуюСтраницу();
Справка.ВывестиНачальнуюСтраницу(Команды);
Иначе
ВыполнитьОбработкуКоманды(Результат);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьКомандуСправки()
Парсер.ДобавитьПараметр("-h");
Парсер.ДобавитьПараметр("-help");
Парсер.ДобавитьПараметр("--help");
КонецПроцедуры
Процедура СформироватьКоманду(Знач Имя, Парсер)
Команда = Парсер.ОписаниеКоманды(Имя);
ТаблицаПараметров = ОбъектОПИ.ПолучитьТаблицуПараметров(Имя).Скопировать();
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
ДобавитьПараметрыКоманды(Парсер, Команда, ТаблицаПараметров);
Парсер.ДобавитьКоманду(Команда);
ТаблицаПараметров = ОбъектОПИ.СоответствиеТаблицПараметров[Имя];
Если Не ТаблицаПараметров = Неопределено Тогда
ТаблицаПараметров = ТаблицаПараметров.Скопировать();
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
ДобавитьПараметрыКоманды(Парсер, Команда, ТаблицаПараметров);
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--help");
Парсер.ДобавитьКоманду(Команда);
Иначе
Справка.ВывестиСообщениеИсключения("Команда");
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьОбработкуКоманды(Знач Данные)
ТекущаяКоманда = Данные["Команда"];
Параметры = Данные["ЗначенияПараметров"];
Вывод = "";
Попытка
Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Данные);
ОбработатьВыводJSON(Вывод);
Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Параметры);
Если ЗначениеЗаполнено(Вывод) Тогда
ОбработатьВыводJSON(Вывод);
Сообщить(Символы.ПС + Вывод + Символы.ПС, СтатусСообщения.Внимание);
КонецЕсли;
@ -66,37 +82,33 @@
Если ЗначениеЗаполнено(Вывод) Тогда
Сообщить(Вывод);
Иначе
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Сообщить(Символы.ПС);
Справка.ВывестиСообщениеИсключения(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецЕсли;
КонецПопытки;
КонецПроцедуры
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Данные)
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Параметры)
Модуль = ОбъектОПИ.ПолучитьИмяМодуля(Команда);
Параметры = Данные["ЗначенияПараметров"];
Модуль = ОбъектОПИ.СоответствиеКомандМодулей[Команда];
Метод = Параметры["Метод"];
Ответ = "<пустой возврат>";
Ответ = "Функция вернула пустое значение";
ТаблицаПараметров = ОбъектОПИ.ПолучитьТаблицуПараметров(Команда);
ТаблицаПараметров = ОбъектОПИ.СоответствиеТаблицПараметров[Команда];
Если Не ЗначениеЗаполнено(Метод) Тогда
Если Не ЗначениеЗаполнено(Метод) Или Метод = "--help" Тогда
Справка.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров);
Возврат "";
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
Если Параметры.Количество() = 1 Тогда
Если Параметры.Количество() = 2 Или Параметры["--help"] = Истина Тогда
Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода, Команда);
Возврат "";
КонецЕсли;
ТекстВыполнения = СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод);
ТекстВыполнения = СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод);
Выполнить(ТекстВыполнения);
@ -156,6 +168,7 @@
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
Счетчик = Счетчик + 1;
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
@ -176,8 +189,9 @@
#КонецОбласти
ПриСозданииОбъекта();
Попытка
ОсновнойОбработчик();
Исключение
Справка.ВывестиСообщениеИсключения(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

View File

@ -1,21 +1,12 @@
#Использовать "../../tools"
Перем ОбъектОПИ;
#Область СлужебныйПрограммныйИнтерфейс
Процедура ПриСозданииОбъекта()
ОбъектОПИ = Новый СвязьОПИ;
КонецПроцедуры
Процедура ВывестиНачальнуюСтраницу() Экспорт
Процедура ВывестиНачальнуюСтраницу(Знач СоответствиеКомандМодулей) Экспорт
СписокКоманд = "";
Модули = ОбъектОПИ.ПолучитьИмяМодуля();
Для Каждого Команда Из Модули Цикл
Для Каждого Команда Из СоответствиеКомандМодулей Цикл
СписокКоманд = СписокКоманд + Команда.Ключ + ", ";
КонецЦикла;
@ -44,6 +35,8 @@
Сообщить("Полную документацию можно найти по адресу: https://opi.neocities.org" + Символы.ПС
, СтатусСообщения.Информация);
ЗавершитьРаботу(0);
КонецПроцедуры
@ -62,22 +55,28 @@
Сообщить(Символы.ПС);
ЗавершитьРаботу(0);
КонецПроцедуры
Процедура ВывестиСправкуПоПараметрам(Знач ТаблицаПараметров, Знач Команда) Экспорт
Если ТаблицаПараметров.Количество() = 0 Тогда
Возврат;
ВывестиСообщениеИсключения("Метод");
КонецЕсли;
ИмяМетода = ТаблицаПараметров[0].Метод;
ТекстСправки = "";
Сообщить("
Дополнение = СформироватьДополненеОписания(Команда);
ИмяМетода = ТаблицаПараметров[0].Метод;
ТекстСправки = "
| ## Метод " + ИмяМетода + "
| ## " + ТаблицаПараметров[0].ОписаниеМетода + "
| " + ОбъектОПИ.ДополнениеОписанияПараметров[Команда] + "
| ", СтатусСообщения.Информация);
| ## " + ТаблицаПараметров[0].ОписаниеМетода;
Если ЗначениеЗаполнено(Дополнение) Тогда
ТекстСправки = Символы.ПС + ТекстСправки + Дополнение + Символы.ПС;
КонецЕсли;
Сообщить(ТекстСправки, СтатусСообщения.Информация);
ТекстСправки = "";
ОбработатьТабуляциюСправки(ТаблицаПараметров);
@ -93,22 +92,44 @@
КонецЦикла;
Сообщить(ТекстСправки + Символы.ПС, СтатусСообщения.Внимание);
ЗавершитьРаботу(0);
КонецПроцедуры
Процедура ВывестиСообщениеИсключения(Знач Причина) Экспорт
Если Причина = "Команда" Тогда
Текст = "Некорректная команда! Проверьте правильность ввода";
Код = 1;
ИначеЕсли Причина = "Метод" Тогда
Текст = "Некорректный метод! Проверьте правильность ввода";
Код = 2;
Иначе
Текст = "Непредвиденная ошибка!: " + Причина;
Код = 99
КонецЕсли;
Текст = Символы.ПС + Текст + Символы.ПС;
Сообщить(Текст, СтатусСообщения.ОченьВажное);
ЗавершитьРаботу(Код);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ОбработатьТабуляциюСправки(ТаблицаПараметров)
МаксимальнаяДлина = 0;
МаксимальнаяДлина = 15;
Для Каждого ПараметрМетода Из ТаблицаПараметров Цикл
ДлинаТекущего = СтрДлина(ПараметрМетода["Параметр"]);
МаксимальнаяДлина = ?(ДлинаТекущего > МаксимальнаяДлина, ДлинаТекущего, МаксимальнаяДлина);
Пока Не СтрДлина(ПараметрМетода["Параметр"]) = МаксимальнаяДлина Цикл
ПараметрМетода["Параметр"] = ПараметрМетода["Параметр"] + " ";
КонецЦикла;
@ -139,7 +160,27 @@
КонецЦикла;
КонецПроцедуры
Функция СформироватьДополненеОписания(Команда)
Если Команда = "vk" Тогда
ТекстДополнения = "
| Структура JSON данных авторизации (параметр --auth):
| {
| ""access_token"": """",
| ""from_group"" : ""1"",
| ""owner_id"" : """",
| ""v"" : ""5.131"",
| ""app_id"" : """",
| ""group_id"" : """"
| }
|";
Иначе
ТекстДополнения = "";
КонецЕсли;
Возврат ТекстДополнения;
КонецФункции
#КонецОбласти
ПриСозданииОбъекта();

View File

@ -1,8 +1,7 @@
#Использовать "../../data"
Перем СоответствиеТаблицПараметров;
Перем СоответствиеКомандМодулей;
Перем ДополнениеОписанияПараметров Экспорт;
Перем СоответствиеТаблицПараметров Экспорт;
Перем СоответствиеКомандМодулей Экспорт;
Процедура ПриСозданииОбъекта()
@ -13,8 +12,6 @@
ТекущаяБиблиотека = "";
ТекущаяТаблица = "";
СформироватьДополненяОписаний();
Для Каждого СтрокаСостава Из ТаблицаСостава Цикл
Если ТекущаяБиблиотека <> СтрокаСостава.Библиотека Тогда
@ -57,45 +54,4 @@
КонецФункции
Функция ПолучитьИмяМодуля(Знач Команда = "") Экспорт
Если ЗначениеЗаполнено(Команда) Тогда
Значение = СоответствиеКомандМодулей[Команда];
Иначе
Значение = СоответствиеКомандМодулей;
КонецЕсли;
Если Не ЗначениеЗаполнено(Значение) Тогда
ВызватьИсключение "Команда не найдена: " + Команда;
Иначе
Возврат Значение;
КонецЕсли;
КонецФункции
Функция ПолучитьТаблицуПараметров(Знач Команда) Экспорт
Возврат СоответствиеТаблицПараметров[Команда];
КонецФункции
Функция СформироватьДополненяОписаний()
ТекстДополненияВК = "
| Структура JSON данных авторизации (параметр --auth):
| {
| ""access_token"": """",
| ""from_group"" : ""1"",
| ""owner_id"" : """",
| ""v"" : ""5.131"",
| ""app_id"" : """",
| ""group_id"" : """"
| }
|";
ДополнениеОписанияПараметров = Новый Соответствие;
ДополнениеОписанияПараметров.Вставить("vk", ТекстДополненияВК);
КонецФункции
#КонецОбласти
ПриСозданииОбъекта();

View File

@ -57,11 +57,11 @@
Процедура ОбработатьПараметрМассив(Значение)
Значение = СтрЗаменить(Значение, "['", "");
Значение = СтрЗаменить(Значение, "']", "");
Значение = СтрЗаменить(Значение, "', '", "','");
Значение = СтрЗаменить(Значение, "['" , "");
Значение = СтрЗаменить(Значение, "']" , "");
Значение = СтрЗаменить(Значение, "', '" , "','");
Значение = СтрЗаменить(Значение, "' , '", "','");
Значение = СтрЗаменить(Значение, "' ,'", "','");
Значение = СтрЗаменить(Значение, "' ,'" , "','");
Значение = СтрРазделить(Значение, "','", Ложь);