1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-10-08 22:51:57 +02:00
Files
OpenIntegrations/src/ru/cli/data/Classes/LibraryComposition.os
2025-09-18 13:47:29 +03:00

248 lines
14 KiB
Plaintext

#Использовать "./internal"
Перем СоответствиеКомандМодулей;
Перем Версия;
Перем КэшированиеИндексов;
Перем ШаблонДоступа;
Перем КаталогПакетов;
Процедура ПриСозданииОбъекта()
Версия = "1.28.0";
ИнициализироватьОсновныеСписки();
ТекущийКаталог = ТекущийСценарий().Каталог;
ШаблонДоступа = ОбъединитьПути(ТекущийКаталог, "internal", "Classes", "%1.os");
КаталогПакетов = СтрЗаменить(ПолучитьЗначениеСистемнойНастройки("lib.system"), "\", "/");
КонецПроцедуры
Процедура ИнициализироватьОсновныеСписки() Экспорт
КэшированиеИндексов = Новый Соответствие();
СоответствиеКомандМодулей = Новый Соответствие();
СоответствиеКомандМодулей.Вставить("tools", "Utils");
СоответствиеКомандМодулей.Вставить("airtable", "OPI_Airtable");
СоответствиеКомандМодулей.Вставить("bitrix24", "OPI_Bitrix24");
СоответствиеКомандМодулей.Вставить("cdek", "OPI_CDEK");
СоответствиеКомандМодулей.Вставить("dropbox", "OPI_Dropbox");
СоответствиеКомандМодулей.Вставить("ftp", "OPI_FTP");
СоответствиеКомандМодулей.Вставить("gcalendar", "OPI_GoogleCalendar");
СоответствиеКомандМодулей.Вставить("gdrive", "OPI_GoogleDrive");
СоответствиеКомандМодулей.Вставить("gsheets", "OPI_GoogleSheets");
СоответствиеКомандМодулей.Вставить("google", "OPI_GoogleWorkspace");
СоответствиеКомандМодулей.Вставить("greenapi", "OPI_GreenAPI");
СоответствиеКомандМодулей.Вставить("mssql", "OPI_MSSQL");
СоответствиеКомандМодулей.Вставить("mysql", "OPI_MySQL");
СоответствиеКомандМодулей.Вставить("neocities", "OPI_Neocities");
СоответствиеКомандМодулей.Вставить("notion", "OPI_Notion");
СоответствиеКомандМодулей.Вставить("ollama", "OPI_Ollama");
СоответствиеКомандМодулей.Вставить("openai", "OPI_OpenAI");
СоответствиеКомандМодулей.Вставить("ozon", "OPI_Ozon");
СоответствиеКомандМодулей.Вставить("postgres", "OPI_PostgreSQL");
СоответствиеКомандМодулей.Вставить("rcon", "OPI_RCON");
СоответствиеКомандМодулей.Вставить("rportal", "OPI_ReportPortal");
СоответствиеКомандМодулей.Вставить("s3", "OPI_S3");
СоответствиеКомандМодулей.Вставить("slack", "OPI_Slack");
СоответствиеКомандМодулей.Вставить("sqlite", "OPI_SQLite");
СоответствиеКомандМодулей.Вставить("tcp", "OPI_TCP");
СоответствиеКомандМодулей.Вставить("telegram", "OPI_Telegram");
СоответствиеКомандМодулей.Вставить("twitter", "OPI_Twitter");
СоответствиеКомандМодулей.Вставить("viber", "OPI_Viber");
СоответствиеКомандМодулей.Вставить("vk", "OPI_VK");
СоответствиеКомандМодулей.Вставить("vkteams", "OPI_VKTeams");
СоответствиеКомандМодулей.Вставить("yadisk", "OPI_YandexDisk");
СоответствиеКомандМодулей.Вставить("yandex", "OPI_YandexID");
СоответствиеКомандМодулей.Вставить("yamarket", "OPI_YandexMarket");
СоответствиеКомандМодулей.Вставить("metrika", "OPI_YandexMetrika");
КонецПроцедуры
Функция ПолучитьВерсию() Экспорт
Возврат Версия;
КонецФункции
Функция ПолучитьСоответствиеКомандМодулей() Экспорт
Возврат СоответствиеКомандМодулей;
КонецФункции
Функция ПолучитьИнформациюИндекса(Знач Команда) Экспорт
ИнформацияИндекса = КэшированиеИндексов.Получить(Команда);
Если ИнформацияИндекса = Неопределено Тогда
Попытка
ОбъектСостава = ЗагрузитьСценарий(СтрШаблон(ШаблонДоступа, Команда));
Состав = ОбъектСостава.ПолучитьСостав();
СтрокаПодключения = ОбъектСостава.ПолучитьСтрокуПодключения();
ИнформацияИндекса = Новый Структура;
ИнформацияИндекса.Вставить("Состав" , Состав);
ИнформацияИндекса.Вставить("СтрокаПодключения", СтрокаПодключения);
КэшированиеИндексов.Вставить(Команда, ИнформацияИндекса);
Исключение
ВызватьИсключение СтрШаблон("Некорректное имя команды: %1", Команда)
КонецПопытки;
КонецЕсли;
Возврат ИнформацияИндекса;
КонецФункции
Функция ПолучитьПолныйСостав() Экспорт
ОбщаяТаблица = Неопределено;
Для Каждого Команда Из СоответствиеКомандМодулей Цикл
ОбъектИндекса = ПолучитьИнформациюИндекса(Команда.Ключ);
ТекущаяТаблица = ОбъектИндекса["Состав"];
Если ОбщаяТаблица = Неопределено Тогда
ОбщаяТаблица = ТекущаяТаблица;
Иначе
Для Каждого СтрокаТаблицы Из ТекущаяТаблица Цикл
ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ОбщаяТаблица;
КонецФункции
Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач Команда, Знач Метод, Знач Динамически = Истина) Экспорт
Модуль = ПолучитьСоответствиеКомандМодулей().Получить(Команда);
ОбъектИндекса = ПолучитьИнформациюИндекса(Команда);
Если Не ЗначениеЗаполнено(Модуль) Тогда
Возврат Новый Структура("Ошибка,Результат", Истина, "Команда");
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ОбъектИндекса["Состав"].НайтиСтроки(ОтборКоманды);
Если Динамически Тогда
ТекстВыполнения = СтрШаблон(ОбъектИндекса["СтрокаПодключения"], КаталогПакетов);
Иначе
ТекстВыполнения = "";
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыМетода) Тогда
Возврат Новый Структура("Ошибка,Результат", Истина, "Метод");
КонецЕсли;
СтрокаВызова = Модуль + "." + Метод + "(";
Счетчик = 0;
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ИмяПараметра = НеобходимыйПараметр.Параметр;
ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_");
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ ИмяПараметра
+ " = """
+ СтрЗаменить(ЗначениеПараметра, """", """""")
+ """;";
Если ТребуетсяОбработкаУправляющихПоследовательностей(ИмяПараметра, ЗначениеПараметра) Тогда
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ "OPI_Инструменты.ЗаменитьУправляющиеПоследовательности(" + ИмяПараметра + ");";
КонецЕсли;
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
Счетчик = Счетчик + 1;
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
ЛишниеСимволы = 2;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
СтруктураВозврата = Новый Структура("Ошибка,Результат", Ложь, ТекстВыполнения);
Возврат СтруктураВозврата;
КонецФункции
Процедура ДополнитьКэшСостава(Знач Библиотека, Знач ТаблицаПараметров, Команда = "") Экспорт
Команда = ?(ЗначениеЗаполнено(Команда), Команда, Библиотека);
СтрокаПодключения = "";
ИнформацияИндекса = Новый Структура;
ИнформацияИндекса.Вставить("Состав" , ТаблицаПараметров);
ИнформацияИндекса.Вставить("СтрокаПодключения", СтрокаПодключения);
КэшированиеИндексов.Вставить(Команда, ИнформацияИндекса);
СоответствиеКомандМодулей.Вставить(Команда, Библиотека);
КонецПроцедуры
Функция ТребуетсяОбработкаУправляющихПоследовательностей(Знач ИмяПараметра, Знач ЗначениеПараметра)
ФайлПараметра = Новый Файл(ЗначениеПараметра);
ЗначениеПараметраСокр = СокрЛП(ЗначениеПараметра);
Возврат Не СтрНачинаетсяС(ЗначениеПараметраСокр, "{")
И Не СтрНачинаетсяС(ЗначениеПараметраСокр, "[")
И Не ФайлПараметра.Существует()
И Не ИмяПараметра = "Параметр_out";
КонецФункции
#Region Alternate
Procedure InitializeCommonLists() Export
ИнициализироватьОсновныеСписки();
EndProcedure
Function GetVersion() Export
Return ПолучитьВерсию();
EndFunction
Function GetCommandModuleMapping() Export
Return ПолучитьСоответствиеКомандМодулей();
EndFunction
Function GetIndexData(Val Command) Export
Return ПолучитьИнформациюИндекса(Command);
EndFunction
Function GetFullComposition() Export
Return ПолучитьПолныйСостав();
EndFunction
Function FormMethodCallString(Val PassedParameters, Val Command, Val Method, Val Dynamically = True) Export
Return СформироватьСтрокуВызоваМетода(PassedParameters, Command, Method, Dynamically);
EndFunction
Procedure CompleteCompositionCache(Val Library, Val ParametersTable, Command = "") Export
ДополнитьКэшСостава(Library, ParametersTable, Command);
EndProcedure
#EndRegion