mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-02-03 13:22:19 +02:00
Доработки по CLI: области, структура модуля, унификация
This commit is contained in:
parent
4f006ff8d4
commit
7204976470
376
cli/app.os
376
cli/app.os
@ -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" , "Документ" , "Путь к файлу");
|
||||
|
||||
|
||||
|
||||
Возврат ТПМ;
|
||||
|
||||
КонецФункции
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Процедура ДобавитьПараметрМетода(Таблица, Знач Метод, Знач Параметр, Знач Имя, Знач Описание)
|
||||
|
||||
НовыйПараметр = Таблица.Добавить();
|
||||
НовыйПараметр.МетодПоиска = вРег(Метод);
|
||||
НовыйПараметр.Метод = Метод;
|
||||
НовыйПараметр.Параметр = Параметр;
|
||||
НовыйПараметр.Имя = Имя;
|
||||
НовыйПараметр.Описание = Описание;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьПараметрыКоманды(Парсер, Команда, Знач ТаблицаПараметров);
|
||||
|
||||
ТаблицаПараметров.Свернуть("Параметр");
|
||||
|
||||
МассивПараметров = ТаблицаПараметров.ВыгрузитьКолонку("Параметр");
|
||||
|
||||
Для Каждого Параметр Из МассивПараметров Цикл
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Попытка
|
||||
ОсновнойОбработчик();
|
||||
|
Loading…
x
Reference in New Issue
Block a user