1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-02-03 13:22:19 +02:00

Доработки по CLI: области, структура модуля, унификация

This commit is contained in:
Anton Titovets 2024-03-20 14:52:23 +03:00
parent 4f006ff8d4
commit 7204976470

View File

@ -1,25 +1,202 @@
#Использовать cmdline
#Использовать oint
#Область СлужебныеПроцедурыИФункции
#Область Основные
Процедура ОсновнойОбработчик()
Парсер = Новый ПарсерАргументовКоманднойСтроки();
ДобавитьКомандуТелеграм(Парсер);
Для Каждого Команда Из ПолучитьИмяМодуля() Цикл
СформироватьКоманду(Команда.Ключ, Парсер);
КонецЦикла;
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
ТекущаяКоманда = Результат["Команда"];
Если ТекущаяКоманда = Неопределено Тогда
ВывестиСправку();
ВывестиНачальнуюСтраницу();
Иначе
ВыполнитьОбработкуКоманды(Результат);
КонецЕсли;
КонецПроцедуры
Процедура ВывестиСправку()
Процедура СформироватьКоманду(Знач Имя, Парсер)
Команда = Парсер.ОписаниеКоманды(Имя);
ТаблицаПараметров = ПолучитьТаблицуПараметров(Имя);
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
ДобавитьПараметрыКоманды(Парсер, Команда, ТаблицаПараметров);
Парсер.ДобавитьКоманду(Команда);
КонецПроцедуры
Процедура ВыполнитьОбработкуКоманды(Знач Данные)
ТекущаяКоманда = Данные["Команда"];
Вывод = "";
Попытка
Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Данные);
Если ТипЗнч(Вывод) = Тип("Структура")
Или ТипЗнч(Вывод) = Тип("Соответствие")
Или ТипЗнч(Вывод) = Тип("Массив") Тогда
Вывод = OPI_Инструменты.JSONСтрокой(Вывод);
КонецЕсли;
Если ЗначениеЗаполнено(Вывод) Тогда
Сообщить(Символы.ПС + Вывод + Символы.ПС, СтатусСообщения.Внимание);
КонецЕсли;
Исключение
Если ЗначениеЗаполнено(Вывод) Тогда
Сообщить(Вывод);
Иначе
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Сообщить(Символы.ПС);
КонецЕсли;
КонецПопытки;
КонецПроцедуры
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Данные)
Модуль = ПолучитьИмяМодуля(Команда);
Параметры = Данные["ЗначенияПараметров"];
Метод = Параметры["Метод"];
Ответ = "<пустой возврат>";
ТаблицаПараметров = ПолучитьТаблицуПараметров(Команда);
Если Не ЗначениеЗаполнено(Метод) Тогда
Сообщить(Символы.ПС + " ## Команда - " + Команда, СтатусСообщения.Информация);
ВывестиСправкуПоМетодам(ТаблицаПараметров);
Возврат "";
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
ТекстВыполнения = "";
Если Параметры.Количество() = 1 Тогда
ВывестиСправкуПоПараметрам(ПараметрыМетода);
Возврат "";
КонецЕсли;
СтрокаВызова = Модуль + "." + Метод + "(";
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ЗначениеПараметра = Параметры.Получить(НеобходимыйПараметр.Параметр);
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ НеобходимыйПараметр.Имя
+ " = ОбработатьВходящийПараметр("""
+ ЗначениеПараметра
+ """, """
+ НеобходимыйПараметр.ВариантОбработки
+ """);";
СтрокаВызова = СтрокаВызова + НеобходимыйПараметр.Имя + ", ";
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - 2);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
Выполнить(ТекстВыполнения);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область Вспомогательные
Процедура ДобавитьПараметрыКоманды(Парсер, Команда, Знач ТаблицаПараметров);
ТаблицаПараметров.Свернуть("Параметр");
МассивПараметров = ТаблицаПараметров.ВыгрузитьКолонку("Параметр");
Для Каждого Параметр Из МассивПараметров Цикл
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр);
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьПараметрМетода(Таблица
, Знач Метод
, Знач Параметр
, Знач Имя
, Знач Описание
, Знач ВариантОбработки = "Строка")
НовыйПараметр = Таблица.Добавить();
НовыйПараметр.МетодПоиска = вРег(Метод);
НовыйПараметр.Метод = Метод;
НовыйПараметр.Параметр = Параметр;
НовыйПараметр.Имя = Имя;
НовыйПараметр.Описание = Описание;
НовыйПараметр.ВариантОбработки = ВариантОбработки;
КонецПроцедуры
Функция ОбработатьВходящийПараметр(Знач Значение, Знач ВидОбработки)
Если ВидОбработки = "СтруктураИзJSONФайла" Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(Значение);
ЧтениеJSON.Прочитать();
Значение = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Иначе
Значение = Строка(Значение);
КонецЕсли;
Возврат Значение;
КонецФункции
#КонецОбласти
#Область Справки
Процедура ВывестиНачальнуюСтраницу()
СписокКоманд = "";
Для Каждого Команда Из ПолучитьИмяМодуля() Цикл
СписокКоманд = СписокКоманд + Команда.Ключ + ", ";
КонецЦикла;
СписокКоманд = Лев(СписокКоманд, СтрДлина(СписокКоманд) - 2);
Сообщить("-----------------------------------------------------", СтатусСообщения.Информация);
Сообщить("
|
@ -36,13 +213,28 @@
| OInt БИБЛИОТЕКА ""МЕТОД"" [Параметры]
|
| Вызов библиотеки без метода или метода без параметров возвращает справку
| Список доступных библиотек: telegram
| Список доступных библиотек: "
+ СписокКоманд
+ "
|", СтатусСообщения.Внимание);
Сообщить("Полную документацию можно найти по адресу: https://opi.neocities.org" + Символы.ПС, СтатусСообщения.Информация);
КонецПроцедуры
Процедура ВывестиСправкуПоМетодам(Знач ТаблицаПараметров)
ТаблицаПараметров.Свернуть("Метод");
МассивМетодов = ТаблицаПараметров.ВыгрузитьКолонку("Метод");
Сообщить(" ## Доступные методы: " + Символы.ПС, СтатусСообщения.Информация);
Для каждого Метод Из МассивМетодов Цикл
Сообщить(" - " + Метод + Символы.ПС, СтатусСообщения.Внимание);
КонецЦикла;
КонецПроцедуры
Процедура ВывестиСправкуПоПараметрам(Знач ТаблицаПараметров)
Если ТаблицаПараметров.Количество() = 0 Тогда
@ -70,134 +262,31 @@
КонецПроцедуры
Процедура ВывестиСправкуПоМетодам(Знач ТаблицаПараметров)
#КонецОбласти
ТаблицаПараметров.Свернуть("Метод");
МассивМетодов = ТаблицаПараметров.ВыгрузитьКолонку("Метод");
#Область СвязьОПИ
Сообщить(" ## Доступные методы: " + Символы.ПС, СтатусСообщения.Информация);
Функция ПолучитьИмяМодуля(Знач ИмяКоманды = "")
Для каждого Метод Из МассивМетодов Цикл
Сообщить(" - " + Метод + Символы.ПС, СтатусСообщения.Внимание);
КонецЦикла;
СоответствиеКомандМодулей = Новый Соответствие();
СоответствиеКомандМодулей.Вставить("telegram", "OPI_Telegram");
КонецПроцедуры
Процедура ВыполнитьОбработкуКоманды(Знач Данные)
ТекущаяКоманда = Данные["Команда"];
Вывод = "";
Попытка
Если ТекущаяКоманда = "telegram" Тогда
Вывод = ОбработкаКомандыТелеграм(Данные);
Иначе
Сообщить("Неизвестная команда!", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;
Если ТипЗнч(Вывод) = Тип("Структура")
Или ТипЗнч(Вывод) = Тип("Соответствие")
Или ТипЗнч(Вывод) = Тип("Массив") Тогда
Вывод = OPI_Инструменты.JSONСтрокой(Вывод);
КонецЕсли;
Если ЗначениеЗаполнено(Вывод) Тогда
Сообщить(Символы.ПС + Вывод + Символы.ПС, СтатусСообщения.Внимание);
КонецЕсли;
Исключение
Если ЗначениеЗаполнено(Вывод) Тогда
Сообщить(Вывод);
Иначе
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Сообщить(Символы.ПС);
КонецЕсли;
КонецПопытки;
КонецПроцедуры
#Область telegram
Функция ОбработкаКомандыТелеграм(Знач Данные)
Модуль = "OPI_Telegram";
Параметры = Данные["ЗначенияПараметров"];
Метод = Параметры["Метод"];
Ответ = "<пустой возврат>";
ТаблицаПараметров = ПолучитьТаблицуПараметровТелеграм();
Если Не ЗначениеЗаполнено(Метод) Тогда
Сообщить(Символы.ПС + " ## Команда - telegram", СтатусСообщения.Информация);
ВывестиСправкуПоМетодам(ТаблицаПараметров);
Возврат "";
Если ЗначениеЗаполнено(ИмяКоманды) Тогда
Результат = СоответствиеКомандМодулей.Получить(ИмяКоманды);
Иначе
Результат = СоответствиеКомандМодулей;
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
ТекстВыполнения = "";
Если Параметры.Количество() = 1 Тогда
ВывестиСправкуПоПараметрам(ПараметрыМетода);
Возврат "";
Если Не ЗначениеЗаполнено(Результат) Тогда
ВызватьИсключение "Неизвестная команда: " + ИмяКоманды;
Иначе
Возврат Результат;
КонецЕсли;
СтрокаВызова = Модуль + "." + Метод + "(";
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ЗначениеПараметра = Параметры.Получить(НеобходимыйПараметр.Параметр);
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ НеобходимыйПараметр.Имя
+ " = """
+ ЗначениеПараметра
+ """;";
СтрокаВызова = СтрокаВызова + НеобходимыйПараметр.Имя + ", ";
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - 2);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
Выполнить(ТекстВыполнения);
Возврат Ответ;
КонецФункции
Процедура ДобавитьКомандуТелеграм(Парсер)
Команда = Парсер.ОписаниеКоманды("telegram");
ТаблицаПараметров = ПолучитьТаблицуПараметровТелеграм();
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
ДобавитьПараметрыКоманды(Парсер, Команда, ТаблицаПараметров);
Парсер.ДобавитьКоманду(Команда);
КонецПроцедуры
Функция ПолучитьТаблицуПараметров(Знач ИмяКоманды)
Функция ПолучитьТаблицуПараметровТелеграм()
ТПМ = Новый ТаблицаЗначений();
ТПМ.Колонки.Добавить("Метод");
@ -205,6 +294,19 @@
ТПМ.Колонки.Добавить("Параметр");
ТПМ.Колонки.Добавить("Имя");
ТПМ.Колонки.Добавить("Описание");
ТПМ.Колонки.Добавить("ВариантОбработки");
Попытка
Выполнить("ЗаполнитьТаблицуПараметров" + ИмяКоманды + "(ТПМ);");
Исключение
ВызватьИсключение "Неизвестная команда: " + ИмяКоманды;
КонецПопытки;
Возврат ТПМ;
КонецФункции
Процедура ЗаполнитьТаблицуПараметровTelegram(ТПМ)
ДобавитьПараметрМетода(ТПМ, "ПолучитьИнформациюБота", "--token" , "Токен" , "Токен бота");
@ -241,37 +343,11 @@
ДобавитьПараметрМетода(ТПМ, "ОтправитьДокумент", "--text" , "Текст" , "Текст сообщения");
ДобавитьПараметрМетода(ТПМ, "ОтправитьДокумент", "--path" , "Документ" , "Путь к файлу");
Возврат ТПМ;
КонецФункции
КонецПроцедуры
#КонецОбласти
Процедура ДобавитьПараметрМетода(Таблица, Знач Метод, Знач Параметр, Знач Имя, Знач Описание)
НовыйПараметр = Таблица.Добавить();
НовыйПараметр.МетодПоиска = вРег(Метод);
НовыйПараметр.Метод = Метод;
НовыйПараметр.Параметр = Параметр;
НовыйПараметр.Имя = Имя;
НовыйПараметр.Описание = Описание;
КонецПроцедуры
Процедура ДобавитьПараметрыКоманды(Парсер, Команда, Знач ТаблицаПараметров);
ТаблицаПараметров.Свернуть("Параметр");
МассивПараметров = ТаблицаПараметров.ВыгрузитьКолонку("Параметр");
Для Каждого Параметр Из МассивПараметров Цикл
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
Попытка
ОсновнойОбработчик();