You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-08-10 22:41:43 +02:00
Main build (Jenkins)
This commit is contained in:
2588
docs/en/openapi/main.json
vendored
2588
docs/en/openapi/main.json
vendored
File diff suppressed because it is too large
Load Diff
2588
docs/ru/openapi/main.json
vendored
2588
docs/ru/openapi/main.json
vendored
File diff suppressed because it is too large
Load Diff
12652
service/dictionaries/en.json
vendored
12652
service/dictionaries/en.json
vendored
File diff suppressed because it is too large
Load Diff
216
src/en/OInt/tools/Modules/OPI_TestDataRetrieval.os
vendored
216
src/en/OInt/tools/Modules/OPI_TestDataRetrieval.os
vendored
@@ -42,6 +42,7 @@
|
||||
|
||||
// Uncomment if OneScript is executed
|
||||
#Use "./internal"
|
||||
#Use "../../data"
|
||||
#Use asserts
|
||||
|
||||
#Region Internal
|
||||
@@ -537,6 +538,12 @@ Function ExecuteTestCLI(Val Library, Val Method, Val Options, Val Record = True)
|
||||
|
||||
If Record Then
|
||||
WriteCLICall(Library, Method, Options);
|
||||
|
||||
Try
|
||||
WriteSwaggerPage(Library, Method, Options);
|
||||
Except
|
||||
Message("Swagger: " + ErrorDescription());
|
||||
EndTry;
|
||||
EndIf;
|
||||
|
||||
Try
|
||||
@@ -2478,13 +2485,218 @@ Procedure WriteSwaggerPage(Val Library, Val Method, Val Options)
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
PagesCatalog = SwaggerCatalog();
|
||||
PagesCatalog = SwaggerCatalog();
|
||||
LibraryCatalog = PagesCatalog + Library + "/";
|
||||
MethodFile = LibraryCatalog + Method + ".json";
|
||||
|
||||
SimplestMethod = DefineSimplestHttpMethod(Options);
|
||||
OintComposition = New("LibraryComposition");
|
||||
LibraryComposition = OintComposition.GetComposition(Library);
|
||||
MethodContent = LibraryComposition.FindRows(New Structure("Method", Method));
|
||||
|
||||
OptionsTable = New ValueTable;
|
||||
OptionsTable.Columns.Add("Key");
|
||||
OptionsTable.Columns.Add("Value");
|
||||
OptionsTable.Columns.Add("Description");
|
||||
|
||||
For Each ContentString In MethodContent Do
|
||||
|
||||
NewLine = OptionsTable.Add();
|
||||
NewLine.Key = StrReplace(ContentString.Parameter, "--", "");
|
||||
NewLine.Description = ContentString.Description;
|
||||
|
||||
OPI_Tools.CollectionFieldExist(Options, NewLine.Option, NewLine.Value);
|
||||
|
||||
EndDo;
|
||||
|
||||
DescriptionStructure = New Structure;
|
||||
|
||||
If SimplestMethod = "GET" Then
|
||||
DescriptionStructure.Insert("get", MakeDescriptionGet(OptionsTable));
|
||||
EndIf;
|
||||
|
||||
NeedJSONVariant = SimplestMethod = "GET" Or SimplestMethod = "POST";
|
||||
|
||||
DescriptionStructure.Insert("post", MakeDescriptionPost(OptionsTable, NeedJSONVariant));
|
||||
|
||||
|
||||
OPI_Tools.WriteJSONFile(DescriptionStructure, MethodFile);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Function DefineSimplestHttpMethod(Val Options)
|
||||
|
||||
BinaryExist = False;
|
||||
FindJSON = False;
|
||||
|
||||
For Each Option In Options Do
|
||||
|
||||
Value = Option.Value;
|
||||
Key = Option.Key;
|
||||
|
||||
If Key = "out" Then
|
||||
Continue;
|
||||
EndIf;
|
||||
|
||||
If TypeOf(Value) = Type("BinaryData") Then
|
||||
|
||||
BinaryExist = True;
|
||||
Break;
|
||||
|
||||
ElsIf TypeOf(Value) = Type("String") Then
|
||||
|
||||
ValueFile = New File(Value);
|
||||
|
||||
If ValueFile.Exist() And ValueFile.IsFile() Then
|
||||
|
||||
BinaryExist = True;
|
||||
Break;
|
||||
|
||||
Else
|
||||
|
||||
OPI_TypeConversion.GetCollection(Value);
|
||||
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
CurrentType = TypeOf(Value);
|
||||
|
||||
If CurrentType = Type("Map") Or CurrentType = Type("Structure") Then
|
||||
FindJSON = True;
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
|
||||
If Not BinaryExist And Not FindJSON Then
|
||||
Method = "GET";
|
||||
ElsIf Not BinaryExist Then
|
||||
Method = "POST";
|
||||
Else
|
||||
Method = "FORM";
|
||||
EndIf;
|
||||
|
||||
Return Method;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function MakeDescriptionGet(Val OptionsTable)
|
||||
|
||||
DescriptionStructure = New Structure;
|
||||
DescriptionStructure.Insert("summary", "Execution via GET method");
|
||||
|
||||
ParameterArray = New Array;
|
||||
TypesMap = SwaggerTypesMap();
|
||||
|
||||
For Each Option In OptionsTable Do
|
||||
|
||||
Key = Option.Key;
|
||||
Value = Option.Value;
|
||||
Description = Option.Description;
|
||||
|
||||
ParameterStructure = New Structure;
|
||||
ParameterStructure.Insert("name", Key);
|
||||
ParameterStructure.Insert("in" , "query");
|
||||
|
||||
SwaggerType = TypesMap.Get(TypeOf(Value));
|
||||
SwaggerType = ?(ValueIsFilled(SwaggerType), SwaggerType, TypesMap.Get(Type("String")));
|
||||
|
||||
ParameterStructure.Insert("schema" , SwaggerType);
|
||||
ParameterStructure.Insert("description", Description);
|
||||
|
||||
ParameterArray.Add(ParameterStructure);
|
||||
|
||||
EndDo;
|
||||
|
||||
DescriptionStructure.Insert("parameters", ParameterArray);
|
||||
|
||||
Return DescriptionStructure;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function MakeDescriptionPost(Val OptionsTable, Val NeedJSONVariant)
|
||||
|
||||
Description = "Execution via POST method (%1)";
|
||||
Description = StrTemplate(Description, ?(NeedJSONVariant, "JSON or form-data", "form-data"));
|
||||
|
||||
DescriptionStructure = New Structure;
|
||||
DescriptionStructure.Insert("summary", Description);
|
||||
|
||||
BodyStructure = New Structure;
|
||||
BodyStructure.Insert("required", True);
|
||||
|
||||
BodyVariantsMap = MakeBodyVariants(OptionsTable, NeedJSONVariant);
|
||||
|
||||
BodyStructure.Insert("content", BodyVariantsMap);
|
||||
|
||||
DescriptionStructure.Insert("requestBody", BodyStructure);
|
||||
|
||||
Return DescriptionStructure;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function MakeBodyVariants(Val OptionsTable, Val NeedJSONVariant)
|
||||
|
||||
TypesMap = SwaggerTypesMap();
|
||||
BodyStructure = New Structure;
|
||||
|
||||
SchemeStructure = New Structure;
|
||||
SchemeStructure.Insert("type", "object");
|
||||
|
||||
PropertiesStructure = New Structure;
|
||||
|
||||
For Each Option In OptionsTable Do
|
||||
|
||||
Key = Option.Key;
|
||||
Value = Option.Value;
|
||||
Description = Option.Description;
|
||||
|
||||
PropertyStructure = New Structure;
|
||||
|
||||
SwaggerType = TypesMap.Get(TypeOf(Value));
|
||||
SwaggerType = ?(ValueIsFilled(SwaggerType), SwaggerType, TypesMap.Get(Type("String")));
|
||||
|
||||
PropertyStructure.Insert("type" , SwaggerType);
|
||||
PropertyStructure.Insert("description", Description);
|
||||
|
||||
PropertiesStructure.Insert(Key, PropertyStructure);
|
||||
|
||||
EndDo;
|
||||
|
||||
SchemeStructure.Insert("properties", PropertiesStructure);
|
||||
BodyStructure.Insert("schema", SchemeStructure);
|
||||
|
||||
VariantsMap = New Map;
|
||||
VariantsMap.Insert("multipart/form-data", BodyStructure);
|
||||
|
||||
If NeedJSONVariant Then
|
||||
VariantsMap.Insert("application/json", BodyStructure);
|
||||
EndIf;
|
||||
|
||||
Return VariantsMap;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function SwaggerTypesMap()
|
||||
|
||||
TypesMap = New Map;
|
||||
|
||||
TypesMap.Insert(Type("String") , New Structure("type" , "string"));
|
||||
TypesMap.Insert(Type("Date") , New Structure("type,format", "string", "date-time"));
|
||||
TypesMap.Insert(Type("Number") , New Structure("type" , "number"));
|
||||
TypesMap.Insert(Type("Boolean") , New Structure("type" , "boolean"));
|
||||
TypesMap.Insert(Type("Array") , New Structure("type,items" , "array" , New Structure("type","string")));
|
||||
TypesMap.Insert(Type("Structure") , New Structure("type" , "object"));
|
||||
TypesMap.Insert(Type("Map") , New Structure("type" , "object"));
|
||||
TypesMap.Insert(Type("BinaryData"), New Structure("type" , "file"));
|
||||
|
||||
Return TypesMap;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function SwaggerCatalog()
|
||||
Return "./docs/ru/openapi/"
|
||||
Return "./docs/ru/openapi/";
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
@@ -520,6 +520,16 @@ Function ReadJSONFile(Val Path) Export
|
||||
|
||||
EndFunction
|
||||
|
||||
Procedure WriteJSONFile(Data, Path) Export
|
||||
|
||||
JSONWriter = New JSONWriter;
|
||||
JSONWriter.OpenFile(Path, , , New JSONWriterSettings(, Chars.Tab));
|
||||
|
||||
WriteJSON(JSONWriter, Data);
|
||||
JSONWriter.Close();
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#Region XML
|
||||
|
@@ -42,6 +42,7 @@
|
||||
|
||||
// Uncomment if OneScript is executed
|
||||
// #Use "./internal"
|
||||
// #Use "../../data"
|
||||
// #Use asserts
|
||||
|
||||
#Region Internal
|
||||
@@ -537,6 +538,12 @@ Function ExecuteTestCLI(Val Library, Val Method, Val Options, Val Record = True)
|
||||
|
||||
If Record Then
|
||||
WriteCLICall(Library, Method, Options);
|
||||
|
||||
Try
|
||||
WriteSwaggerPage(Library, Method, Options);
|
||||
Except
|
||||
Message("Swagger: " + ErrorDescription());
|
||||
EndTry;
|
||||
EndIf;
|
||||
|
||||
Try
|
||||
@@ -2478,13 +2485,218 @@ Procedure WriteSwaggerPage(Val Library, Val Method, Val Options)
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
PagesCatalog = SwaggerCatalog();
|
||||
PagesCatalog = SwaggerCatalog();
|
||||
LibraryCatalog = PagesCatalog + Library + "/";
|
||||
MethodFile = LibraryCatalog + Method + ".json";
|
||||
|
||||
SimplestMethod = DefineSimplestHttpMethod(Options);
|
||||
OintComposition = New("LibraryComposition");
|
||||
LibraryComposition = OintComposition.GetComposition(Library);
|
||||
MethodContent = LibraryComposition.FindRows(New Structure("Method", Method));
|
||||
|
||||
OptionsTable = New ValueTable;
|
||||
OptionsTable.Columns.Add("Key");
|
||||
OptionsTable.Columns.Add("Value");
|
||||
OptionsTable.Columns.Add("Description");
|
||||
|
||||
For Each ContentString In MethodContent Do
|
||||
|
||||
NewLine = OptionsTable.Add();
|
||||
NewLine.Key = StrReplace(ContentString.Parameter, "--", "");
|
||||
NewLine.Description = ContentString.Description;
|
||||
|
||||
OPI_Tools.CollectionFieldExists(Options, NewLine.Option, NewLine.Value);
|
||||
|
||||
EndDo;
|
||||
|
||||
DescriptionStructure = New Structure;
|
||||
|
||||
If SimplestMethod = "GET" Then
|
||||
DescriptionStructure.Insert("get", MakeDescriptionGet(OptionsTable));
|
||||
EndIf;
|
||||
|
||||
NeedJSONVariant = SimplestMethod = "GET" Or SimplestMethod = "POST";
|
||||
|
||||
DescriptionStructure.Insert("post", MakeDescriptionPost(OptionsTable, NeedJSONVariant));
|
||||
|
||||
|
||||
OPI_Tools.WriteJSONFile(DescriptionStructure, MethodFile);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Function DefineSimplestHttpMethod(Val Options)
|
||||
|
||||
BinaryExists = False;
|
||||
FindJSON = False;
|
||||
|
||||
For Each Option In Options Do
|
||||
|
||||
Value = Option.Value;
|
||||
Key = Option.Key;
|
||||
|
||||
If Key = "out" Then
|
||||
Continue;
|
||||
EndIf;
|
||||
|
||||
If TypeOf(Value) = Type("BinaryData") Then
|
||||
|
||||
BinaryExists = True;
|
||||
Break;
|
||||
|
||||
ElsIf TypeOf(Value) = Type("String") Then
|
||||
|
||||
ValueFile = New File(Value);
|
||||
|
||||
If ValueFile.Exists() And ValueFile.IsFile() Then
|
||||
|
||||
BinaryExists = True;
|
||||
Break;
|
||||
|
||||
Else
|
||||
|
||||
OPI_TypeConversion.GetCollection(Value);
|
||||
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
CurrentType = TypeOf(Value);
|
||||
|
||||
If CurrentType = Type("Map") Or CurrentType = Type("Structure") Then
|
||||
FindJSON = True;
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
|
||||
If Not BinaryExists And Not FindJSON Then
|
||||
Method = "GET";
|
||||
ElsIf Not BinaryExists Then
|
||||
Method = "POST";
|
||||
Else
|
||||
Method = "FORM";
|
||||
EndIf;
|
||||
|
||||
Return Method;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function MakeDescriptionGet(Val OptionsTable)
|
||||
|
||||
DescriptionStructure = New Structure;
|
||||
DescriptionStructure.Insert("summary", "Execution via GET method");
|
||||
|
||||
ParameterArray = New Array;
|
||||
TypesMap = SwaggerTypesMap();
|
||||
|
||||
For Each Option In OptionsTable Do
|
||||
|
||||
Key = Option.Key;
|
||||
Value = Option.Value;
|
||||
Description = Option.Description;
|
||||
|
||||
ParameterStructure = New Structure;
|
||||
ParameterStructure.Insert("name", Key);
|
||||
ParameterStructure.Insert("in" , "query");
|
||||
|
||||
SwaggerType = TypesMap.Get(TypeOf(Value));
|
||||
SwaggerType = ?(ValueIsFilled(SwaggerType), SwaggerType, TypesMap.Get(Type("String")));
|
||||
|
||||
ParameterStructure.Insert("schema" , SwaggerType);
|
||||
ParameterStructure.Insert("description", Description);
|
||||
|
||||
ParameterArray.Add(ParameterStructure);
|
||||
|
||||
EndDo;
|
||||
|
||||
DescriptionStructure.Insert("parameters", ParameterArray);
|
||||
|
||||
Return DescriptionStructure;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function MakeDescriptionPost(Val OptionsTable, Val NeedJSONVariant)
|
||||
|
||||
Description = "Execution via POST method (%1)";
|
||||
Description = StrTemplate(Description, ?(NeedJSONVariant, "JSON or form-data", "form-data"));
|
||||
|
||||
DescriptionStructure = New Structure;
|
||||
DescriptionStructure.Insert("summary", Description);
|
||||
|
||||
BodyStructure = New Structure;
|
||||
BodyStructure.Insert("required", True);
|
||||
|
||||
BodyVariantsMap = MakeBodyVariants(OptionsTable, NeedJSONVariant);
|
||||
|
||||
BodyStructure.Insert("content", BodyVariantsMap);
|
||||
|
||||
DescriptionStructure.Insert("requestBody", BodyStructure);
|
||||
|
||||
Return DescriptionStructure;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function MakeBodyVariants(Val OptionsTable, Val NeedJSONVariant)
|
||||
|
||||
TypesMap = SwaggerTypesMap();
|
||||
BodyStructure = New Structure;
|
||||
|
||||
SchemeStructure = New Structure;
|
||||
SchemeStructure.Insert("type", "object");
|
||||
|
||||
PropertiesStructure = New Structure;
|
||||
|
||||
For Each Option In OptionsTable Do
|
||||
|
||||
Key = Option.Key;
|
||||
Value = Option.Value;
|
||||
Description = Option.Description;
|
||||
|
||||
PropertyStructure = New Structure;
|
||||
|
||||
SwaggerType = TypesMap.Get(TypeOf(Value));
|
||||
SwaggerType = ?(ValueIsFilled(SwaggerType), SwaggerType, TypesMap.Get(Type("String")));
|
||||
|
||||
PropertyStructure.Insert("type" , SwaggerType);
|
||||
PropertyStructure.Insert("description", Description);
|
||||
|
||||
PropertiesStructure.Insert(Key, PropertyStructure);
|
||||
|
||||
EndDo;
|
||||
|
||||
SchemeStructure.Insert("properties", PropertiesStructure);
|
||||
BodyStructure.Insert("schema", SchemeStructure);
|
||||
|
||||
VariantsMap = New Map;
|
||||
VariantsMap.Insert("multipart/form-data", BodyStructure);
|
||||
|
||||
If NeedJSONVariant Then
|
||||
VariantsMap.Insert("application/json", BodyStructure);
|
||||
EndIf;
|
||||
|
||||
Return VariantsMap;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function SwaggerTypesMap()
|
||||
|
||||
TypesMap = New Map;
|
||||
|
||||
TypesMap.Insert(Type("String") , New Structure("type" , "string"));
|
||||
TypesMap.Insert(Type("Date") , New Structure("type,format", "string", "date-time"));
|
||||
TypesMap.Insert(Type("Number") , New Structure("type" , "number"));
|
||||
TypesMap.Insert(Type("Boolean") , New Structure("type" , "boolean"));
|
||||
TypesMap.Insert(Type("Array") , New Structure("type,items" , "array" , New Structure("type","string")));
|
||||
TypesMap.Insert(Type("Structure") , New Structure("type" , "object"));
|
||||
TypesMap.Insert(Type("Map") , New Structure("type" , "object"));
|
||||
TypesMap.Insert(Type("BinaryData"), New Structure("type" , "file"));
|
||||
|
||||
Return TypesMap;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function SwaggerCatalog()
|
||||
Return "./docs/ru/openapi/"
|
||||
Return "./docs/ru/openapi/";
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
@@ -520,6 +520,16 @@ Function ReadJSONFile(Val Path) Export
|
||||
|
||||
EndFunction
|
||||
|
||||
Procedure WriteJSONFile(Data, Path) Export
|
||||
|
||||
JSONWriter = New JSONWriter;
|
||||
JSONWriter.OpenFile(Path, , , New JSONWriterSettings(, Chars.Tab));
|
||||
|
||||
WriteJSON(JSONWriter, Data);
|
||||
JSONWriter.Close();
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#Region XML
|
||||
|
@@ -254,9 +254,9 @@
|
||||
Иначе
|
||||
|
||||
ТекстВыполнения = СтруктураВыполнения["Результат"];
|
||||
|
||||
|
||||
Выполнить(ТекстВыполнения);
|
||||
|
||||
|
||||
|
||||
Ответ = Новый Структура("result,data", Истина, Ответ);
|
||||
|
||||
|
@@ -538,7 +538,7 @@
|
||||
|
||||
Если Записывать Тогда
|
||||
ЗаписатьВызовCLI(Библиотека, Метод, Опции);
|
||||
|
||||
|
||||
Попытка
|
||||
ЗаписатьСтраницуSwagger(Библиотека, Метод, Опции);
|
||||
Исключение
|
||||
@@ -2196,9 +2196,9 @@
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
|
||||
|
||||
|
||||
Модуль = Вычислить(Имя);
|
||||
|
||||
|
||||
|
||||
Возврат Модуль;
|
||||
|
||||
@@ -2484,215 +2484,215 @@
|
||||
Если Не OPI_Инструменты.ЭтоOneScript() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КаталогСтраниц = КаталогSwagger();
|
||||
КаталогБиблиотеки = КаталогСтраниц + Библиотека + "/";
|
||||
ФайлМетода = КаталогБиблиотеки + Метод + ".json";
|
||||
|
||||
|
||||
ПростейшийМетод = ОпределитьПростейшийHttpМетод(Опции);
|
||||
СоставОПИ = Новый("LibraryComposition");
|
||||
СоставБиблиотеки = СоставОПИ.ПолучитьСостав(Библиотека);
|
||||
СоставМетода = СоставБиблиотеки.НайтиСтроки(Новый Структура("Метод", Метод));
|
||||
|
||||
|
||||
ТаблицаОпций = Новый ТаблицаЗначений;
|
||||
ТаблицаОпций.Колонки.Добавить("Ключ");
|
||||
ТаблицаОпций.Колонки.Добавить("Значение");
|
||||
ТаблицаОпций.Колонки.Добавить("Описание");
|
||||
|
||||
|
||||
Для Каждого СтрокаСостава Из СоставМетода Цикл
|
||||
|
||||
НоваяСтрока = ТаблицаОпций.Добавить();
|
||||
|
||||
НоваяСтрока = ТаблицаОпций.Добавить();
|
||||
НоваяСтрока.Ключ = СтрЗаменить(СтрокаСостава.Параметр, "--", "");
|
||||
НоваяСтрока.Описание = СтрокаСостава.Описание;
|
||||
|
||||
|
||||
OPI_Инструменты.ПолеКоллекцииСуществует(Опции, НоваяСтрока.Опция, НоваяСтрока.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
СтруктураОписания = Новый Структура;
|
||||
|
||||
|
||||
Если ПростейшийМетод = "GET" Тогда
|
||||
СтруктураОписания.Вставить("get", ПолучитьОписаниеGet(ТаблицаОпций));
|
||||
КонецЕсли;
|
||||
|
||||
ЕстьВариантJSON = ПростейшийМетод = "GET" Или ПростейшийМетод = "POST";
|
||||
|
||||
|
||||
СтруктураОписания.Вставить("post", ПолучитьОписаниеPost(ТаблицаОпций, ЕстьВариантJSON));
|
||||
|
||||
|
||||
|
||||
OPI_Инструменты.ЗаписатьJSONФайл(СтруктураОписания, ФайлМетода);
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОпределитьПростейшийHttpМетод(Знач Опции)
|
||||
|
||||
|
||||
ЕстьДвоичные = Ложь;
|
||||
ЕстьJSON = Ложь;
|
||||
|
||||
|
||||
Для Каждого Опция Из Опции Цикл
|
||||
|
||||
|
||||
Значение = Опция.Значение;
|
||||
Ключ = Опция.Ключ;
|
||||
|
||||
|
||||
Если Ключ = "out" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
|
||||
ЕстьДвоичные = Истина;
|
||||
Прервать;
|
||||
|
||||
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||
|
||||
|
||||
ФайлЗначения = Новый Файл(Значение);
|
||||
|
||||
|
||||
Если ФайлЗначения.Существует() И ФайлЗначения.ЭтоФайл() Тогда
|
||||
|
||||
|
||||
ЕстьДвоичные = Истина;
|
||||
Прервать;
|
||||
|
||||
|
||||
Иначе
|
||||
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение);
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ТекущийТип = ТипЗнч(Значение);
|
||||
|
||||
|
||||
Если ТекущийТип = Тип("Соответствие") Или ТекущийТип = Тип("Структура") Тогда
|
||||
ЕстьJSON = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
|
||||
Если Не ЕстьДвоичные И Не ЕстьJSON Тогда
|
||||
Метод = "GET";
|
||||
Метод = "GET";
|
||||
ИначеЕсли Не ЕстьДвоичные Тогда
|
||||
Метод = "POST";
|
||||
Иначе
|
||||
Метод = "FORM";
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Возврат Метод;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОписаниеGet(Знач ТаблицаОпций)
|
||||
|
||||
|
||||
СтруктураОписания = Новый Структура;
|
||||
СтруктураОписания.Вставить("summary", "Выполнение через метод GET");
|
||||
|
||||
|
||||
МассивПараметров = Новый Массив;
|
||||
СоответствиеТипов = СоответствиеТиповSwagger();
|
||||
|
||||
|
||||
Для Каждого Опция Из ТаблицаОпций Цикл
|
||||
|
||||
|
||||
Ключ = Опция.Ключ;
|
||||
Значение = Опция.Значение;
|
||||
Описание = Опция.Описание;
|
||||
|
||||
|
||||
СтруктураПараметра = Новый Структура;
|
||||
СтруктураПараметра.Вставить("name", Ключ);
|
||||
СтруктураПараметра.Вставить("in" , "query");
|
||||
|
||||
|
||||
ТипSwagger = СоответствиеТипов.Получить(ТипЗнч(Значение));
|
||||
ТипSwagger = ?(ЗначениеЗаполнено(ТипSwagger), ТипSwagger, СоответствиеТипов.Получить(Тип("Строка")));
|
||||
|
||||
|
||||
СтруктураПараметра.Вставить("schema" , ТипSwagger);
|
||||
СтруктураПараметра.Вставить("description", Описание);
|
||||
|
||||
|
||||
МассивПараметров.Добавить(СтруктураПараметра);
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
СтруктураОписания.Вставить("parameters", МассивПараметров);
|
||||
|
||||
|
||||
Возврат СтруктураОписания;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОписаниеPost(Знач ТаблицаОпций, Знач ЕстьВариантJSON)
|
||||
|
||||
|
||||
Описание = "Выполнение через метод POST (%1)";
|
||||
Описание = СтрШаблон(Описание, ?(ЕстьВариантJSON, "JSON или form-data", "form-data"));
|
||||
|
||||
|
||||
СтруктураОписания = Новый Структура;
|
||||
СтруктураОписания.Вставить("summary", Описание);
|
||||
|
||||
|
||||
СтруктураТела = Новый Структура;
|
||||
СтруктураТела.Вставить("required", Истина);
|
||||
|
||||
|
||||
СоответствиеВариантовТела = СформироватьВариантыТела(ТаблицаОпций, ЕстьВариантJSON);
|
||||
|
||||
|
||||
СтруктураТела.Вставить("content", СоответствиеВариантовТела);
|
||||
|
||||
|
||||
СтруктураОписания.Вставить("requestBody", СтруктураТела);
|
||||
|
||||
|
||||
Возврат СтруктураОписания;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьВариантыТела(Знач ТаблицаОпций, Знач ЕстьВариантJSON)
|
||||
|
||||
|
||||
СоответствиеТипов = СоответствиеТиповSwagger();
|
||||
СтруктураТела = Новый Структура;
|
||||
|
||||
|
||||
СтруктураСхемы = Новый Структура;
|
||||
СтруктураСхемы.Вставить("type", "object");
|
||||
|
||||
|
||||
СтруктураСвойств = Новый Структура;
|
||||
|
||||
|
||||
Для Каждого Опция Из ТаблицаОпций Цикл
|
||||
|
||||
|
||||
Ключ = Опция.Ключ;
|
||||
Значение = Опция.Значение;
|
||||
Описание = Опция.Описание;
|
||||
|
||||
|
||||
СтруктураСвойства = Новый Структура;
|
||||
|
||||
|
||||
ТипSwagger = СоответствиеТипов.Получить(ТипЗнч(Значение));
|
||||
ТипSwagger = ?(ЗначениеЗаполнено(ТипSwagger), ТипSwagger, СоответствиеТипов.Получить(Тип("Строка")));
|
||||
|
||||
|
||||
СтруктураСвойства.Вставить("type" , ТипSwagger);
|
||||
СтруктураСвойства.Вставить("description", Описание);
|
||||
|
||||
|
||||
СтруктураСвойств.Вставить(Ключ, СтруктураСвойства);
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
СтруктураСхемы.Вставить("properties", СтруктураСвойств);
|
||||
СтруктураТела.Вставить("schema", СтруктураСхемы);
|
||||
|
||||
|
||||
СоответствиеВариантов = Новый Соответствие;
|
||||
СоответствиеВариантов.Вставить("multipart/form-data", СтруктураТела);
|
||||
|
||||
|
||||
Если ЕстьВариантJSON Тогда
|
||||
СоответствиеВариантов.Вставить("application/json", СтруктураТела);
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Возврат СоответствиеВариантов;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоответствиеТиповSwagger()
|
||||
|
||||
|
||||
СоответствиеТипов = Новый Соответствие;
|
||||
|
||||
СоответствиеТипов.Вставить(Тип("Строка") , Новый Структура("type", "string"));
|
||||
|
||||
СоответствиеТипов.Вставить(Тип("Строка") , Новый Структура("type" , "string"));
|
||||
СоответствиеТипов.Вставить(Тип("Дата") , Новый Структура("type,format", "string", "date-time"));
|
||||
СоответствиеТипов.Вставить(Тип("Число") , Новый Структура("type", "number"));
|
||||
СоответствиеТипов.Вставить(Тип("Булево") , Новый Структура("type", "boolean"));
|
||||
СоответствиеТипов.Вставить(Тип("Массив") , Новый Структура("type,items", "array", Новый Структура("type","string")));
|
||||
СоответствиеТипов.Вставить(Тип("Структура") , Новый Структура("type", "object"));
|
||||
СоответствиеТипов.Вставить(Тип("Соответствие") , Новый Структура("type", "object"));
|
||||
СоответствиеТипов.Вставить(Тип("ДвоичныеДанные"), Новый Структура("type", "file"));
|
||||
|
||||
СоответствиеТипов.Вставить(Тип("Число") , Новый Структура("type" , "number"));
|
||||
СоответствиеТипов.Вставить(Тип("Булево") , Новый Структура("type" , "boolean"));
|
||||
СоответствиеТипов.Вставить(Тип("Массив") , Новый Структура("type,items" , "array" , Новый Структура("type","string")));
|
||||
СоответствиеТипов.Вставить(Тип("Структура") , Новый Структура("type" , "object"));
|
||||
СоответствиеТипов.Вставить(Тип("Соответствие") , Новый Структура("type" , "object"));
|
||||
СоответствиеТипов.Вставить(Тип("ДвоичныеДанные"), Новый Структура("type" , "file"));
|
||||
|
||||
Возврат СоответствиеТипов;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогSwagger()
|
||||
|
@@ -538,7 +538,7 @@
|
||||
|
||||
Если Записывать Тогда
|
||||
ЗаписатьВызовCLI(Библиотека, Метод, Опции);
|
||||
|
||||
|
||||
Попытка
|
||||
ЗаписатьСтраницуSwagger(Библиотека, Метод, Опции);
|
||||
Исключение
|
||||
@@ -2484,215 +2484,215 @@
|
||||
Если Не OPI_Инструменты.ЭтоOneScript() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КаталогСтраниц = КаталогSwagger();
|
||||
КаталогБиблиотеки = КаталогСтраниц + Библиотека + "/";
|
||||
ФайлМетода = КаталогБиблиотеки + Метод + ".json";
|
||||
|
||||
|
||||
ПростейшийМетод = ОпределитьПростейшийHttpМетод(Опции);
|
||||
СоставОПИ = Новый("LibraryComposition");
|
||||
СоставБиблиотеки = СоставОПИ.ПолучитьСостав(Библиотека);
|
||||
СоставМетода = СоставБиблиотеки.НайтиСтроки(Новый Структура("Метод", Метод));
|
||||
|
||||
|
||||
ТаблицаОпций = Новый ТаблицаЗначений;
|
||||
ТаблицаОпций.Колонки.Добавить("Ключ");
|
||||
ТаблицаОпций.Колонки.Добавить("Значение");
|
||||
ТаблицаОпций.Колонки.Добавить("Описание");
|
||||
|
||||
|
||||
Для Каждого СтрокаСостава Из СоставМетода Цикл
|
||||
|
||||
НоваяСтрока = ТаблицаОпций.Добавить();
|
||||
|
||||
НоваяСтрока = ТаблицаОпций.Добавить();
|
||||
НоваяСтрока.Ключ = СтрЗаменить(СтрокаСостава.Параметр, "--", "");
|
||||
НоваяСтрока.Описание = СтрокаСостава.Описание;
|
||||
|
||||
|
||||
OPI_Инструменты.ПолеКоллекцииСуществует(Опции, НоваяСтрока.Опция, НоваяСтрока.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
СтруктураОписания = Новый Структура;
|
||||
|
||||
|
||||
Если ПростейшийМетод = "GET" Тогда
|
||||
СтруктураОписания.Вставить("get", ПолучитьОписаниеGet(ТаблицаОпций));
|
||||
КонецЕсли;
|
||||
|
||||
ЕстьВариантJSON = ПростейшийМетод = "GET" Или ПростейшийМетод = "POST";
|
||||
|
||||
|
||||
СтруктураОписания.Вставить("post", ПолучитьОписаниеPost(ТаблицаОпций, ЕстьВариантJSON));
|
||||
|
||||
|
||||
|
||||
OPI_Инструменты.ЗаписатьJSONФайл(СтруктураОписания, ФайлМетода);
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОпределитьПростейшийHttpМетод(Знач Опции)
|
||||
|
||||
|
||||
ЕстьДвоичные = Ложь;
|
||||
ЕстьJSON = Ложь;
|
||||
|
||||
|
||||
Для Каждого Опция Из Опции Цикл
|
||||
|
||||
|
||||
Значение = Опция.Значение;
|
||||
Ключ = Опция.Ключ;
|
||||
|
||||
|
||||
Если Ключ = "out" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
|
||||
ЕстьДвоичные = Истина;
|
||||
Прервать;
|
||||
|
||||
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||
|
||||
|
||||
ФайлЗначения = Новый Файл(Значение);
|
||||
|
||||
|
||||
Если ФайлЗначения.Существует() И ФайлЗначения.ЭтоФайл() Тогда
|
||||
|
||||
|
||||
ЕстьДвоичные = Истина;
|
||||
Прервать;
|
||||
|
||||
|
||||
Иначе
|
||||
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение);
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ТекущийТип = ТипЗнч(Значение);
|
||||
|
||||
|
||||
Если ТекущийТип = Тип("Соответствие") Или ТекущийТип = Тип("Структура") Тогда
|
||||
ЕстьJSON = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
|
||||
Если Не ЕстьДвоичные И Не ЕстьJSON Тогда
|
||||
Метод = "GET";
|
||||
Метод = "GET";
|
||||
ИначеЕсли Не ЕстьДвоичные Тогда
|
||||
Метод = "POST";
|
||||
Иначе
|
||||
Метод = "FORM";
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Возврат Метод;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОписаниеGet(Знач ТаблицаОпций)
|
||||
|
||||
|
||||
СтруктураОписания = Новый Структура;
|
||||
СтруктураОписания.Вставить("summary", "Выполнение через метод GET");
|
||||
|
||||
|
||||
МассивПараметров = Новый Массив;
|
||||
СоответствиеТипов = СоответствиеТиповSwagger();
|
||||
|
||||
|
||||
Для Каждого Опция Из ТаблицаОпций Цикл
|
||||
|
||||
|
||||
Ключ = Опция.Ключ;
|
||||
Значение = Опция.Значение;
|
||||
Описание = Опция.Описание;
|
||||
|
||||
|
||||
СтруктураПараметра = Новый Структура;
|
||||
СтруктураПараметра.Вставить("name", Ключ);
|
||||
СтруктураПараметра.Вставить("in" , "query");
|
||||
|
||||
|
||||
ТипSwagger = СоответствиеТипов.Получить(ТипЗнч(Значение));
|
||||
ТипSwagger = ?(ЗначениеЗаполнено(ТипSwagger), ТипSwagger, СоответствиеТипов.Получить(Тип("Строка")));
|
||||
|
||||
|
||||
СтруктураПараметра.Вставить("schema" , ТипSwagger);
|
||||
СтруктураПараметра.Вставить("description", Описание);
|
||||
|
||||
|
||||
МассивПараметров.Добавить(СтруктураПараметра);
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
СтруктураОписания.Вставить("parameters", МассивПараметров);
|
||||
|
||||
|
||||
Возврат СтруктураОписания;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОписаниеPost(Знач ТаблицаОпций, Знач ЕстьВариантJSON)
|
||||
|
||||
|
||||
Описание = "Выполнение через метод POST (%1)";
|
||||
Описание = СтрШаблон(Описание, ?(ЕстьВариантJSON, "JSON или form-data", "form-data"));
|
||||
|
||||
|
||||
СтруктураОписания = Новый Структура;
|
||||
СтруктураОписания.Вставить("summary", Описание);
|
||||
|
||||
|
||||
СтруктураТела = Новый Структура;
|
||||
СтруктураТела.Вставить("required", Истина);
|
||||
|
||||
|
||||
СоответствиеВариантовТела = СформироватьВариантыТела(ТаблицаОпций, ЕстьВариантJSON);
|
||||
|
||||
|
||||
СтруктураТела.Вставить("content", СоответствиеВариантовТела);
|
||||
|
||||
|
||||
СтруктураОписания.Вставить("requestBody", СтруктураТела);
|
||||
|
||||
|
||||
Возврат СтруктураОписания;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьВариантыТела(Знач ТаблицаОпций, Знач ЕстьВариантJSON)
|
||||
|
||||
|
||||
СоответствиеТипов = СоответствиеТиповSwagger();
|
||||
СтруктураТела = Новый Структура;
|
||||
|
||||
|
||||
СтруктураСхемы = Новый Структура;
|
||||
СтруктураСхемы.Вставить("type", "object");
|
||||
|
||||
|
||||
СтруктураСвойств = Новый Структура;
|
||||
|
||||
|
||||
Для Каждого Опция Из ТаблицаОпций Цикл
|
||||
|
||||
|
||||
Ключ = Опция.Ключ;
|
||||
Значение = Опция.Значение;
|
||||
Описание = Опция.Описание;
|
||||
|
||||
|
||||
СтруктураСвойства = Новый Структура;
|
||||
|
||||
|
||||
ТипSwagger = СоответствиеТипов.Получить(ТипЗнч(Значение));
|
||||
ТипSwagger = ?(ЗначениеЗаполнено(ТипSwagger), ТипSwagger, СоответствиеТипов.Получить(Тип("Строка")));
|
||||
|
||||
|
||||
СтруктураСвойства.Вставить("type" , ТипSwagger);
|
||||
СтруктураСвойства.Вставить("description", Описание);
|
||||
|
||||
|
||||
СтруктураСвойств.Вставить(Ключ, СтруктураСвойства);
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
СтруктураСхемы.Вставить("properties", СтруктураСвойств);
|
||||
СтруктураТела.Вставить("schema", СтруктураСхемы);
|
||||
|
||||
|
||||
СоответствиеВариантов = Новый Соответствие;
|
||||
СоответствиеВариантов.Вставить("multipart/form-data", СтруктураТела);
|
||||
|
||||
|
||||
Если ЕстьВариантJSON Тогда
|
||||
СоответствиеВариантов.Вставить("application/json", СтруктураТела);
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Возврат СоответствиеВариантов;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоответствиеТиповSwagger()
|
||||
|
||||
|
||||
СоответствиеТипов = Новый Соответствие;
|
||||
|
||||
СоответствиеТипов.Вставить(Тип("Строка") , Новый Структура("type", "string"));
|
||||
|
||||
СоответствиеТипов.Вставить(Тип("Строка") , Новый Структура("type" , "string"));
|
||||
СоответствиеТипов.Вставить(Тип("Дата") , Новый Структура("type,format", "string", "date-time"));
|
||||
СоответствиеТипов.Вставить(Тип("Число") , Новый Структура("type", "number"));
|
||||
СоответствиеТипов.Вставить(Тип("Булево") , Новый Структура("type", "boolean"));
|
||||
СоответствиеТипов.Вставить(Тип("Массив") , Новый Структура("type,items", "array", Новый Структура("type","string")));
|
||||
СоответствиеТипов.Вставить(Тип("Структура") , Новый Структура("type", "object"));
|
||||
СоответствиеТипов.Вставить(Тип("Соответствие") , Новый Структура("type", "object"));
|
||||
СоответствиеТипов.Вставить(Тип("ДвоичныеДанные"), Новый Структура("type", "file"));
|
||||
|
||||
СоответствиеТипов.Вставить(Тип("Число") , Новый Структура("type" , "number"));
|
||||
СоответствиеТипов.Вставить(Тип("Булево") , Новый Структура("type" , "boolean"));
|
||||
СоответствиеТипов.Вставить(Тип("Массив") , Новый Структура("type,items" , "array" , Новый Структура("type","string")));
|
||||
СоответствиеТипов.Вставить(Тип("Структура") , Новый Структура("type" , "object"));
|
||||
СоответствиеТипов.Вставить(Тип("Соответствие") , Новый Структура("type" , "object"));
|
||||
СоответствиеТипов.Вставить(Тип("ДвоичныеДанные"), Новый Структура("type" , "file"));
|
||||
|
||||
Возврат СоответствиеТипов;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогSwagger()
|
||||
|
Reference in New Issue
Block a user