1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-01-28 05:46:35 +02:00

Начало AirTable

This commit is contained in:
Anton 2024-05-06 19:19:02 +03:00
parent 8d89be74de
commit 6bd119cd5c
6 changed files with 178 additions and 1 deletions

View File

@ -0,0 +1,128 @@
// Библиотека: Airtable
// Команда CLI: Airtable
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область РаботаСБазами
Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц);
Если Не ТипЗнч(КоллекцияТаблиц) = Тип("Структура")
И Не ТипЗнч(КоллекцияТаблиц) = Тип("Соответствие") Тогда
ВызватьИсключение "Ошибка в данных коллекции таблиц";
КонецЕсли;
URL = "https://api.airtable.com/v0/meta/bases";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
МассивТаблиц = Новый Массив;
Для Каждого Таблица Из КоллекцияТаблиц Цикл
Описание = СформироватьОписаниеТаблицы(Таблица.Ключ, Таблица.Значение);
МассивТаблиц.Добавить(Описание);
КонецЦикла;
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("name" , Наименование , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("tables" , МассивТаблиц , "Массив", Параметры);
OPI_Инструменты.ДобавитьПоле("workspaceId", РабочееПространство, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область ФормированиеПолей
Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт
Возврат ОписаниеПримитовногоПоля(Наименование, "richText");
КонецФункции
Функция ПолучитьПолеНомера(Знач Наименование, Знач Точность = 0) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Точность);
СтруктураОпций = Новый Структура("precision", Точность);
Возврат ОписаниеПримитовногоПоля(Наименование, "number", СтруктураОпций);
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки;
КонецФункции
Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей);
ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей);
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеПримитовногоПоля(Знач Наименование, Знач Тип, Знач Опции = "")
СтруктураПоля = Новый Структура();
OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка" , СтруктураПоля);
OPI_Инструменты.ДобавитьПоле("type" , Тип , "Строка" , СтруктураПоля);
OPI_Инструменты.ДобавитьПоле("options", Опции , "Коллекция", СтруктураПоля);
Возврат СтруктураПоля;
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="457991ad-c2ad-49b8-a26a-9fc83c8a7d11">
<name>OPI_Airtable</name>
<synonym>
<key></key>
<value>OPI airtable</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -52,9 +52,10 @@
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
Разделы.Вставить("GoogleDrive" , ЗависимостиГугл);
Разделы.Вставить("GoogleSheets" , ЗависимостиГугл);
Разделы.Вставить("GoogleSheets" , ЗависимостиГугл);
Разделы.Вставить("Notion" , СтандартныеЗависимости);
Разделы.Вставить("Slack" , СтандартныеЗависимости);
Разделы.Вставить("Airtable" , СтандартныеЗависимости);
Возврат Разделы;
@ -73,6 +74,7 @@
Ноушн = "Notion";
Слак = "Slack";
Таблицы = "GoogleSheets";
АирТ = "Airtable";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@ -193,6 +195,8 @@
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак);
НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать базу" , АирТ);
Возврат ТаблицаТестов;

View File

@ -272,6 +272,13 @@
КонецПроцедуры
Процедура ПолучитьЧисло(Значение) Экспорт
ОписаниеТипа = Новый ОписаниеТипов("Число");
Значение = ОписаниеТипа.ПривестиЗначение(Значение);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -3467,6 +3467,32 @@
#КонецОбласти
#Область Airtable
Процедура АТ_СоздатьБазу() Экспорт
Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token");
Область = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Workspace");
Наименование = "Тестовая база";
МассивПолей = Новый Массив;
МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеНомера("Автономер"));
МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеСтроковое("Строковое"));
СоответствиеТаблиц = Новый Соответствие;
СоответствиеТаблиц.Вставить("Тестовая таблица", МассивПолей);
Результат = OPI_Airtable.СоздатьБазу(Токен, Область, Наименование, СоответствиеТаблиц);
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОБоте");
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).Заполнено();
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"][0]["name"]).Равно(Наименование);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти

View File

@ -62,6 +62,7 @@
<commonModules>CommonModule.OPI_GoogleDrive</commonModules>
<commonModules>CommonModule.OPI_GoogleSheets</commonModules>
<commonModules>CommonModule.OPI_Slack</commonModules>
<commonModules>CommonModule.OPI_Airtable</commonModules>
<commonModules>CommonModule.OPI_Тесты</commonModules>
<commonModules>CommonModule.OPI_ПолучениеДанныхТестов</commonModules>
</mdclass:Configuration>