From 2780f851701d7147f7ffc7d49b4776cc1bca0426 Mon Sep 17 00:00:00 2001 From: Vitaly the Alpaca Date: Tue, 16 Apr 2024 07:52:46 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20OPI=20->=20OInt=20?= =?UTF-8?q?(workflow)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OInt/tests/Modules/internal/OPI_Тесты.os | 14 +++++ .../Modules/OPI_ПолучениеДанныхТестов.os | 4 ++ .../internal/Modules/OPI_Инструменты.os | 60 ++++++++++++++++--- 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/OInt/tests/Modules/internal/OPI_Тесты.os b/OInt/tests/Modules/internal/OPI_Тесты.os index 083726eb68..927741238a 100644 --- a/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/OInt/tests/Modules/internal/OPI_Тесты.os @@ -2822,6 +2822,20 @@ #КонецОбласти +#Область Slack + +Процедура Слак_ОтправитьСообщение() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token"); + Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel"); + Текст = "Тестовое сообщение"; + + Результат = OPI_Slack.ОтправитьСообщение(Токен, Канал, Текст); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #КонецОбласти diff --git a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os index 0b11bd5370..d911fbfcb5 100644 --- a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os +++ b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os @@ -211,6 +211,7 @@ МассивРазделов.Добавить("Google Calendar"); МассивРазделов.Добавить("Google Drive"); МассивРазделов.Добавить("Notion"); + МассивРазделов.Добавить("Slack"); Возврат МассивРазделов; @@ -227,6 +228,7 @@ Драйв = "Google Drive"; ВСпейс = "Google Workspace"; Ноушн = "Notion"; + Слак = "Slack"; ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов.Колонки.Добавить("Метод"); @@ -329,6 +331,8 @@ НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн); НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн); + + НовыйТест(ТаблицаТестов, "Слак_ОтправитьСообщение" , "Отправить сообщение" , Слак); Возврат ТаблицаТестов; diff --git a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os index 85a8855eb8..b365945b74 100644 --- a/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os +++ b/OInt/tools/Modules/internal/Modules/OPI_Инструменты.os @@ -412,8 +412,9 @@ Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных); Соединение = СоздатьСоединение(Сервер); - ТелоЗапроса = Запрос.ПолучитьТелоКакПоток(); - ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь); + + ТелоЗапроса = ПолучитьИмяВременногоФайла(); + ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", Ложь, "", Ложь); ЗаписатьПараметрыМультипарт(ЗаписьТекста, Boundary, Параметры); ЗаписатьФайлыМультипарт(ЗаписьТекста, Boundary, ТипКонтента, Файлы); @@ -421,6 +422,8 @@ ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--" + РазделительСтрок); ЗаписьТекста.Закрыть(); + Запрос.УстановитьИмяФайлаТела(ТелоЗапроса); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка; @@ -434,7 +437,11 @@ Иначе ОбработатьОтвет(Ответ); КонецЕсли; - + + Запрос = Неопределено; + ЗаписьТекста = Неопределено; + + УдалитьФайлы(ТелоЗапроса); Возврат Ответ; КонецФункции @@ -453,9 +460,9 @@ Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных); Соединение = СоздатьСоединение(Сервер); - ТелоЗапроса = Запрос.ПолучитьТелоКакПоток(); - ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь); - + ТелоЗапроса = ПолучитьИмяВременногоФайла(); + ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", Ложь, "", Ложь); + ЗаписатьJSONМультипарт(ЗаписьТекста, Boundary, JSON); ЗаписатьФайлыРелэйтед(ЗаписьТекста, Boundary, Файлы); @@ -464,6 +471,8 @@ ДобавитьContentLength(Запрос); + Запрос.УстановитьИмяФайлаТела(ТелоЗапроса); + Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос); ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка; @@ -473,6 +482,10 @@ ОбработатьОтвет(Ответ); КонецЕсли; + Запрос = Неопределено; + ЗаписьТекста = Неопределено; + + УдалитьФайлы(ТелоЗапроса); Возврат Ответ; КонецФункции @@ -617,7 +630,7 @@ ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + ТипКонтента); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); - ЗаписьТекста.Записать(Файл.Значение); + ЗаписатьДвоичныеДанные(ЗаписьТекста, Файл.Значение); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); КонецЦикла; @@ -639,7 +652,7 @@ ЗаписьТекста.ЗаписатьСтроку("Content-Type: " + Файл.Значение); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); - ЗаписьТекста.Записать(Файл.Ключ); + ЗаписатьДвоичныеДанные(ЗаписьТекста, Файл.Ключ); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок); @@ -649,6 +662,37 @@ КонецПроцедуры +Процедура ЗаписатьДвоичныеДанные(ЗаписьДанных, Знач ДвоичныеДанные) + + РазмерЧасти = 268435456; + ПрочитанноБайт = 0; + ТекущаяПозиция = 0; + ОбщийРазмер = ДвоичныеДанные.Размер(); + + Пока ПрочитанноБайт < ОбщийРазмер Цикл + + ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанные); + ПрочитанноБайт = ЧтениеДанных.Пропустить(ТекущаяПозиция); + Результат = ЧтениеДанных.Прочитать(РазмерЧасти); + ТекущиеДанные = Результат.ПолучитьДвоичныеДанные(); + РазмерТекущих = ТекущиеДанные.Размер(); + + Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда + Прервать; + КонецЕсли; + + + ЗаписьДанных.Записать(ТекущиеДанные); + + ОсвободитьОбъект(ТекущиеДанные); + ВыполнитьСборкуМусора(); + + ТекущаяПозиция = ТекущаяПозиция + РазмерТекущих; + + КонецЦикла; + +КонецПроцедуры + Процедура ЗаписатьJSONМультипарт(ЗаписьТекста, Знач Boundary, Знач JSON) Если Не ЗначениеЗаполнено(JSON) Тогда