Skip to content

Commit

Permalink
Merge pull request #168 from Stivo182/feat/45-create-dirs
Browse files Browse the repository at this point in the history
Поддрержка опции --create-dirs
  • Loading branch information
Stivo182 authored Jan 26, 2025
2 parents d658cab + ecf9a41 commit 1fc031f
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@
|o
|output
|output-dir
|create-dirs
|O
|remote-name
|remote-name-all
Expand Down Expand Up @@ -483,6 +484,8 @@

Процедура ДобавитьВызовHTTPМетода(ОписаниеРесурса)

ДобавитьСозданиеКаталога(ОписаниеРесурса);

ПараметрыФункции = Новый Массив;
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеРесурса.Метод));
ПараметрыФункции.Добавить(ИмяПараметраHTTPЗапрос);
Expand All @@ -499,6 +502,29 @@

КонецПроцедуры

Процедура ДобавитьСозданиеКаталога(ОписаниеРесурса)

Если Не ЗначениеЗаполнено(ОписаниеРесурса.ИмяВыходногоФайла)
Или Не ОписаниеЗапроса.СоздатьКаталогСохраненияФайлов Тогда
Возврат;
КонецЕсли;

Каталог = ОбщегоНазначения.КаталогФайла(ОписаниеРесурса.ИмяВыходногоФайла);

Если Не ПустаяСтрока(Каталог) Тогда
ШаблонСозданияКаталога = "// Создание каталога по необходимости
|Каталог = Новый Файл(""%1"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;";

Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(ШаблонСозданияКаталога, Каталог);
КонецЕсли;

КонецПроцедуры

Процедура ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса)

ДобавитьУстановкуТелаЗапросаТекстовымиДанными();
Expand Down
11 changes: 9 additions & 2 deletions src/core/Классы/КонвертерКомандыCURL.os
Original file line number Diff line number Diff line change
Expand Up @@ -865,11 +865,15 @@
КонецПроцедуры

Процедура ПрочитатьКаталогСохраненияФайлов()
КаталогСохраненияФайлов = "";

КаталогСохраненияФайлов = "";
Каталог = ПоследнееЗначениеОпции("output-dir");
Если Не Каталог = Неопределено Тогда
КаталогСохраненияФайлов = Каталог;
КонецЕсли;

ОписаниеЗапроса.СоздатьКаталогСохраненияФайлов = УстановленФлагОпции("create-dirs");

КонецПроцедуры

Процедура ПрочитатьАдресПрокси()
Expand Down Expand Up @@ -1068,6 +1072,10 @@
"output-dir",
"Каталог сохранения файлов").ТМассивСтрок();

ДобавитьПоддерживаемуюОпцию(
"create-dirs",
"Создает каталог сохранения файла при необходимости").ТМассивБулево();

ДобавитьПоддерживаемуюОпцию(
"O remote-name",
"Извлечение имени выходного файла из URL").ТМассивБулево();
Expand Down Expand Up @@ -1184,7 +1192,6 @@
ДобавитьНеподдерживаемуюОпцию("C continue-at").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("b cookie").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("c cookie-jar").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("create-dirs").ТМассивБулево();
ДобавитьНеподдерживаемуюОпцию("create-file-mode").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпцию("crlf").ТМассивБулево();
ДобавитьНеподдерживаемуюОпцию("crlfile").ТМассивСтрок();
Expand Down
2 changes: 2 additions & 0 deletions src/internal/Классы/ОписаниеЗапроса.os
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
Перем ОтправлятьКакMultipartFormData Экспорт; // Булево
Перем AWS4 Экспорт; // Структура
Перем ТокенBearer Экспорт; // Строка
Перем СоздатьКаталогСохраненияФайлов Экспорт; // Булево

// Максимальное время ожидания на выполнение запроса
Перем Таймаут Экспорт; // Число
Expand Down Expand Up @@ -110,6 +111,7 @@
ОтправлятьКакMultipartFormData = Ложь;
AWS4 = НовыйAWS4();
ТокенBearer = "";
СоздатьКаталогСохраненияФайлов = Ложь;
КонецПроцедуры

Функция ЕстьДанныеПоНазначению(Назначение) Экспорт
Expand Down
29 changes: 24 additions & 5 deletions src/internal/Модули/ОбщегоНазначения.os
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,36 @@
КонецПроцедуры

Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога) Экспорт

Если ПустаяСтрока(ПутьКаталога) Тогда
Возврат ПутьКаталога;
КонецЕсли;

ПоследнийСимвол = Прав(ПутьКаталога, 1);

Если ПоследнийСимвол = "/" Или ПоследнийСимвол = "\" Тогда
Возврат ПутьКаталога;
КонецЕсли;

Разделитель = ?(СтрНайти(ПутьКаталога, "\"), "\", "/");

ДобавляемыйСимвол = ПолучитьРазделительПути();
Возврат ПутьКаталога + Разделитель;

КонецФункции

Функция КаталогФайла(ПутьКФайлу) Экспорт

ИндексРазделителя1 = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца);
ИндексРазделителя2 = СтрНайти(ПутьКФайлу, "/", НаправлениеПоиска.СКонца);

ИндексРазделителя = Макс(ИндексРазделителя1, ИндексРазделителя2);

Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда
Возврат ПутьКаталога;
Иначе
Возврат ПутьКаталога + ДобавляемыйСимвол;
Если ИндексРазделителя Тогда
Возврат Сред(ПутьКФайлу, 1, ИндексРазделителя - 1);
КонецЕсли;

Возврат "";

КонецФункции

Функция ДополнитьИменемФайлаПутьURL(ПолноеИмяФайла, ПутьURL) Экспорт
Expand Down
80 changes: 70 additions & 10 deletions tests/ГенераторПрограммногоКода1С_test.os
Original file line number Diff line number Diff line change
Expand Up @@ -917,16 +917,12 @@
&Тест
Процедура ТестДолжен_ПроверитьКаталогСохраненияФайловИПереданноеИмяФайла() Экспорт

КаталогСохраненияОС = СтрЗаменить("/some/path", "/", ПолучитьРазделительПути());

КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path'";
КонсольнаяКоманда = СтрЗаменить(КонсольнаяКоманда, "/some/path", КаталогСохраненияОС);
КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path/'";

ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");";
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());

ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);

Expand All @@ -935,21 +931,85 @@
&Тест
Процедура ТестДолжен_ПроверитьКаталогСохраненияФайловИИзвлеченноеИмяФайлаИзURL() Экспорт

КаталогСохраненияОС = СтрЗаменить("/some/path", "/", ПолучитьРазделительПути());

КонсольнаяКоманда = "curl http://example.com/about.html -O --output-dir '/some/path'";
КонсольнаяКоманда = СтрЗаменить(КонсольнаяКоманда, "/some/path", КаталогСохраненияОС);
КонсольнаяКоманда = "curl http://example.com/about.html -O --output-dir '/some/path/'";

ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");";
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());

ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);

КонецПроцедуры

&Тест
Процедура ТестДолжен_ПроверитьСозданиеКаталогСохраненияФайлов() Экспорт

КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path/' --create-dirs
|curl http://example.com/about.html -O --output-dir '/some/path/' --create-dirs
|curl http://example.com/about.html -o '/some/path/file.html' --create-dirs
|curl http://example.com/about.html -o '/some/path\file.html' --create-dirs";

ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");
|
|//////////////////////////////////////////////
|// Команда #2.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");
|
|//////////////////////////////////////////////
|// Команда #3.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");
|
|//////////////////////////////////////////////
|// Команда #4.
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
|// Создание каталога по необходимости
|Каталог = Новый Файл(""/some/path"");
|Если Не Каталог.Существует() Тогда
| СоздатьКаталог(Каталог.ПолноеИмя);
|КонецЕсли;
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path\file.html"");";

ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);

КонецПроцедуры

&Тест
Процедура ТестДолжен_ПроверитьПрокси() Экспорт

Expand Down

0 comments on commit 1fc031f

Please sign in to comment.