Skip to content

Commit 70af4f0

Browse files
committed
feat: Поддержка загрузки библиотек из конфигурационных файлов и переменных окружения при старте приложения
1 parent 67ee641 commit 70af4f0

File tree

10 files changed

+234
-32
lines changed

10 files changed

+234
-32
lines changed

.github/workflows/qa.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ jobs:
1010
uses: autumn-library/workflows/.github/workflows/sonar.yml@main
1111
with:
1212
github_repository: stivo182/oscript-httpbin
13-
oscript_version: dev
13+
oscript_version: stable
1414
secrets:
1515
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

.github/workflows/test.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ jobs:
1010
strategy:
1111
fail-fast: false
1212
matrix:
13-
oscript_version: ['stable', 'dev']
13+
oscript_version: ['default', 'lts']
14+
test_engine: '1testrunner'
15+
include:
16+
- oscript_version: ['stable', 'dev']
17+
test_engine: 'oneunit'
1418
uses: autumn-library/workflows/.github/workflows/test.yml@main
1519
with:
16-
oscript_version: ${{ matrix.oscript_version }}
20+
oscript_version: ${{ matrix.oscript_version }}
21+
test_engine: ${{ matrix.test_engine }}

packagedef

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
.ВключитьФайл("LICENSE")
1414
.ЗависитОт("autumn", "4.3.11")
1515
.ЗависитОт("autumn-cli", "1.2.0")
16-
.ЗависитОт("winow", "0.11.0")
16+
.ЗависитОт("winow", "0.11.2")
1717
.ЗависитОт("compressor", "1.0.2")
1818
.ЗависитОт("1connector", "2.3.3")
1919
.ЗависитОт("packageinfo", "1.1.1")
2020
.ЗависитОт("fs", "1.2.0")
2121
.ЗависитОт("logos", "1.7.1")
22+
.ЗависитОт("configor", "0.11.0")
2223
.РазработкаЗависитОт("1testrunner")
2324
.РазработкаЗависитОт("asserts")
2425
.РазработкаЗависитОт("coverage")
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
#Использовать winow
32

43
Перем _Хост; // Строка
@@ -36,7 +35,7 @@
3635
_НастройкиВебСервера.ИмяХоста = _Хост;
3736
_НастройкиВебСервера.Порт = _Порт;
3837

39-
Если ПолучитьПеременнуюСреды("HTTPBIN_IS_TEST_MODE") = "true" Тогда
38+
Если ПолучитьПеременнуюСреды("HTTPBIN_TESTING_MODE") = "true" Тогда
4039
_НастройкиВебСервера.ЗадержкаПередЧтениемСокета = 400;
4140
КонецЕсли;
4241

src/cmd/Классы/КомандаЗапустить.os

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,22 @@
1818
&ПоУмолчанию(3333)
1919
Перем _Порт; // Число
2020

21+
&Опция(
22+
Имя = "routes-handlers",
23+
Описание = "Путь к файлу или каталогу кастомных контроллеров"
24+
)
25+
&ТМассивСтрок
26+
Перем _КастомныеКонтроллеры; // BSLLS:UnusedLocalVariable-off
27+
2128
&Опция(
2229
Имя = "parent-pid",
2330
Описание = "PID родительского процесса"
2431
)
2532
&ТЧисло
2633
&ПоУмолчанию(0)
34+
&СкрытьВСправке
2735
Перем _ИдентификаторРодительскогоПроцесса; // Число
2836

29-
&Опция(
30-
Имя = "routes-handlers",
31-
Описание = "Путь к файлу или каталогу кастомных контроллеров"
32-
)
33-
&ТМассивСтрок
34-
Перем _КастомныеКонтроллеры; // BSLLS:UnusedLocalVariable-off
35-
3637
#КонецОбласти
3738

3839
#Область ОписаниеПеременных

src/core/Классы/HttpBin.os

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#Использовать 1connector
55
#Использовать fs
66
#Использовать logos
7+
#Использовать configor
8+
#Использовать "../../internal"
79

810
Перем _ТаймаутЗапуска; // Число - Таймаут запуска сервиса в секундах
911
Перем _ТаймаутПроверки; // Число - Таймаут HTTP-проверки доступности в секундах
@@ -275,7 +277,7 @@
275277

276278
_Лог.Отладка("Запуск процесса: %1", СтрокаКоманды);
277279

278-
_Процесс = СоздатьПроцесс(СтрокаКоманды, РабочийКаталог, , , , ПеременныеСреды());
280+
_Процесс = СоздатьПроцесс(СтрокаКоманды, РабочийКаталог, , , , ПолучитьПараметрыСредыПроцесса());
279281
_Процесс.Запустить();
280282

281283
Если Синхронно Тогда
@@ -393,4 +395,90 @@
393395

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

398+
Функция ПолучитьПараметрыСредыПроцесса()
399+
400+
ПеременныеСреды = ПеременныеСреды();
401+
СтартовыйКаталог = СтартовыйСценарий().Каталог;
402+
ПутьККонфигурации = ОбъединитьПути(СтартовыйКаталог, "oscript.cfg");
403+
404+
Если Не ФС.ФайлСуществует(ПутьККонфигурации) Тогда
405+
Возврат ПеременныеСреды;
406+
КонецЕсли;
407+
408+
Конфигурация = КонфигурацияОСкрпитВСоответствие(ПеременныеСреды["OSCRIPT_CONFIG"]);
409+
Если ЗначениеЗаполнено(Конфигурация["lib.system"]) Тогда
410+
Возврат ПеременныеСреды;
411+
КонецЕсли;
412+
413+
МенеджерПараметров = Новый МенеджерПараметров();
414+
МенеджерПараметров.УстановитьФайлПараметров(ПутьККонфигурации);
415+
МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровCFG());
416+
МенеджерПараметров.Прочитать();
417+
418+
УстановитьКаталогВКонфигурацию(Конфигурация, "lib.system", МенеджерПараметров.Параметр("lib.system"));
419+
УстановитьКаталогВКонфигурацию(Конфигурация, "lib.additional", МенеджерПараметров.Параметр("lib.additional"));
420+
421+
ПеременныеСреды["OSCRIPT_CONFIG"] = КонфигурацияОСкрпитВСтроку(Конфигурация);
422+
423+
Возврат ПеременныеСреды;
424+
425+
КонецФункции
426+
427+
Функция КонфигурацияОСкрпитВСоответствие(Параметры)
428+
429+
Результат = Новый Соответствие();
430+
431+
Если Не ЗначениеЗаполнено(Параметры) Тогда
432+
Возврат Результат;
433+
КонецЕсли;
434+
435+
КлючиИЗначения = СтрРазделить(Параметры, ";");
436+
437+
Для Каждого КлючИЗначение Из КлючиИЗначения Цикл
438+
Части = СтрРазделить(КлючИЗначение, "=");
439+
Если Части.Количество() = 2 Тогда
440+
Результат.Вставить(СокрЛП(Части[0]), СокрЛП(Части[1]));
441+
КонецЕсли;
442+
КонецЦикла;
443+
444+
Возврат Результат;
445+
446+
КонецФункции
447+
448+
Функция КонфигурацияОСкрпитВСтроку(Параметры)
449+
450+
Результат = Новый Массив();
451+
452+
Для Каждого КлючИЗначение Из Параметры Цикл
453+
Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда
454+
Результат.Добавить(СтрШаблон("%1=%2", НРег(КлючИЗначение.Ключ), КлючИЗначение.Значение));
455+
КонецЕсли;
456+
КонецЦикла;
457+
458+
Возврат СтрСоединить(Результат, ";");
459+
460+
КонецФункции
461+
462+
Процедура УстановитьКаталогВКонфигурацию(Конфигурация, Ключ, Знач Каталог)
463+
464+
Если Не ЗначениеЗаполнено(Каталог) Тогда
465+
Возврат;
466+
КонецЕсли;
467+
468+
ПозицияТочкиЗапятой = СтрНайти(Каталог, ";");
469+
Если ПозицияТочкиЗапятой > 0 Тогда
470+
Каталог = Сред(Каталог, 1, ПозицияТочкиЗапятой - 1);
471+
КонецЕсли;
472+
473+
СтартовыйКаталог = СтартовыйСценарий().Каталог;
474+
НормализованныйПуть = ФС.НормализоватьПуть(ОбъединитьПути(СтартовыйКаталог, Каталог));
475+
476+
Если ФС.КаталогСуществует(НормализованныйПуть) Тогда
477+
Каталог = НормализованныйПуть;
478+
КонецЕсли;
479+
480+
Конфигурация[Ключ] = Каталог;
481+
482+
КонецПроцедуры
483+
396484
#КонецОбласти

src/internal/Классы/ПодключательКастомныхКонтроллеров.os

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252
Процедура ПодключитьИзКаталога(Каталог)
5353

54-
Файлы = НайтиФайлы(Каталог, "*.os");
54+
Файлы = НайтиФайлы(Каталог, "*.os", Истина);
5555

5656
Для Каждого Файл Из Файлы Цикл
5757
Подключить(Файл.ПолноеИмя);
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#Использовать logos
2+
3+
Перем _Лог;
4+
5+
#Область ПрограммныйИнтерфейс
6+
7+
// Возвращает приоритет провайдера
8+
//
9+
// Возвращаемое значение:
10+
// Число - текущий приоритет провайдера
11+
//
12+
Функция Приоритет() Экспорт
13+
Возврат 1;
14+
КонецФункции
15+
16+
// Возвращает идентификатор провайдера
17+
//
18+
// Возвращаемое значение:
19+
// Строка - текущий идентификатор провайдера
20+
//
21+
Функция Идентификатор() Экспорт
22+
Возврат "cfg";
23+
КонецФункции
24+
25+
// Возвращает тип провайдера
26+
//
27+
// Возвращаемое значение:
28+
// Строка - текущий тип провайдера
29+
//
30+
Функция ТипПровайдера() Экспорт
31+
Возврат "file";
32+
КонецФункции
33+
34+
// Возвращает расширения файлов по умолчанию
35+
//
36+
// Возвращаемое значение:
37+
// Строка - расширения файлов по умолчанию
38+
//
39+
Функция РасширенияФайлов() Экспорт
40+
Возврат "cfg";
41+
КонецФункции
42+
43+
// Выполняет чтение параметров для провайдера
44+
//
45+
// Параметры:
46+
// НастройкиПровайдера - Структура - структура настроек провайдера
47+
//
48+
// Возвращаемое значение:
49+
// Соответствие - результат чтения провайдера
50+
//
51+
Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
52+
53+
ПрочитанныеПараметры = Новый Соответствие;
54+
55+
ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
56+
57+
Если Не ФайлПараметров.Существует() Тогда
58+
_Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
59+
Возврат ПрочитанныеПараметры;
60+
КонецЕсли;
61+
62+
_Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
63+
ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);
64+
65+
Возврат ПрочитанныеПараметры;
66+
67+
КонецФункции
68+
69+
#КонецОбласти
70+
71+
#Область СлужебныеПроцедурыИФункции
72+
73+
Процедура ПриСозданииОбъекта()
74+
_Лог = Логирование.ПолучитьЛог("oscript.lib.httpbin.configor.cfg");
75+
КонецПроцедуры
76+
77+
// Выполнить чтение настроек из файла
78+
//
79+
// Параметры:
80+
// ПутьКФайлу - Cтрока - путь к файлу настроек
81+
// Возвращаемое значение:
82+
// Соответствие - итоговые параметры
83+
//
84+
Функция Прочитать(Знач ПутьКФайлу)
85+
86+
НастройкиИзФайла = Новый Соответствие;
87+
88+
ТД = Новый ТекстовыйДокумент();
89+
ТД.Прочитать(ПутьКФайлу);
90+
91+
Для Сч = 1 По ТД.КоличествоСтрок() Цикл
92+
93+
СтрокаНастроек = ТД.ПолучитьСтроку(Сч);
94+
95+
Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда
96+
Продолжить;
97+
КонецЕсли;
98+
99+
Поз = СтрНайти(СтрокаНастроек, "=");
100+
Если Поз = 0 Тогда
101+
Продолжить;
102+
КонецЕсли;
103+
104+
Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1));
105+
Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1));
106+
107+
НастройкиИзФайла.Вставить(Ключ, Значение);
108+
109+
КонецЦикла;
110+
111+
_Лог.Отладка("Прочитан файл настроек %1", ПутьКФайлу);
112+
113+
Возврат НастройкиИзФайла;
114+
115+
КонецФункции // Прочитать
116+
117+
#КонецОбласти

tests/HttpBin_API_test.os

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#Использовать "../src/core"
88

99
Перем HttpBin; // HttpBin
10-
Перем СервисЗапущен;
1110

1211
&ТестовыйНабор(Характер = "Одиночка")
1312
Процедура ПриСозданииОбъекта()
@@ -16,15 +15,13 @@
1615

1716
&ПередВсеми
1817
Процедура ПередЗапускомТестов() Экспорт
19-
20-
СервисЗапущен = Ложь;
21-
22-
УстановитьПеременнуюСреды("HTTPBIN_IS_TEST_MODE", "true");
23-
24-
HttpBin = Новый HttpBin();
25-
HttpBin.Запустить();
26-
27-
СервисЗапущен = Истина;
18+
19+
Если HttpBin = Неопределено Или Не HttpBin.Активен() Тогда
20+
УстановитьПеременнуюСреды("HTTPBIN_TESTING_MODE", "true");
21+
22+
HttpBin = Новый HttpBin();
23+
HttpBin.Запустить();
24+
КонецЕсли;
2825

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

@@ -33,13 +30,6 @@
3330
HttpBin.Остановить();
3431
КонецПроцедуры
3532

36-
&ПередКаждым
37-
Процедура ПередЗапускомТеста() Экспорт
38-
Если Не СервисЗапущен Тогда
39-
ВызватьИсключение "Сервис не запущен";
40-
КонецЕсли;
41-
КонецПроцедуры
42-
4333
&Тест
4434
Процедура Должен_ПроверитьТочкуМаршрута_Html() Экспорт
4535

tests/oscript.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
lib.system=../oscript_modules

0 commit comments

Comments
 (0)