ab_engine 0.2.1__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ab_engine-0.2.1 → ab_engine-0.2.2}/PKG-INFO +17 -14
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_mysql.py +9 -1
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_postgresql.py +3 -1
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/config.py +28 -26
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/db_context.py +2 -2
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/PKG-INFO +17 -14
- {ab_engine-0.2.1 → ab_engine-0.2.2}/pyproject.toml +1 -1
- {ab_engine-0.2.1 → ab_engine-0.2.2}/readme.md +16 -13
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/__init__.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/class_tools.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/__init__.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_sqlite.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/driver_valkey.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/option.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/processor.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/db/table.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/__init__.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/env/timer.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/error.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/error.yaml +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/__init__.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/fnc.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/json_rpc.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine/rpc/rpc.py +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/SOURCES.txt +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/dependency_links.txt +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/requires.txt +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/ab_engine.egg-info/top_level.txt +0 -0
- {ab_engine-0.2.1 → ab_engine-0.2.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ab_engine
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Library of standard modules
|
|
5
5
|
Author-email: Andrew Bulatov <BulatovAndrew@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -167,17 +167,17 @@ create table config(
|
|
|
167
167
|
|
|
168
168
|
нресколько имен ключей файла конфигурации зарезервированы и являются специальными:
|
|
169
169
|
|
|
170
|
-
**timers** - определяет интервалы для таймеров системы
|
|
171
|
-
**logging** - позволяет задать настройки логирования
|
|
172
|
-
**database**- содержит строки соединения с одной или несколькими БД
|
|
173
|
-
**defaults**- содержит значения по умолчанию
|
|
170
|
+
* **timers** - определяет интервалы для таймеров системы
|
|
171
|
+
* **logging** - позволяет задать настройки логирования
|
|
172
|
+
* **database**- содержит строки соединения с одной или несколькими БД
|
|
173
|
+
* **defaults**- содержит значения по умолчанию
|
|
174
174
|
|
|
175
175
|
#### Значения по умолчанию
|
|
176
176
|
|
|
177
|
-
**defaults.name** - имя, подставляемое в лог как имя сервиса
|
|
178
|
-
**defaults.database** - имя соединения БД по умолчанию
|
|
179
|
-
**defaults.plugin_path** - путь к каталогу плагинов
|
|
180
|
-
**defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
|
|
177
|
+
* **defaults.name** - имя, подставляемое в лог как имя сервиса
|
|
178
|
+
* **defaults.database** - имя соединения БД по умолчанию
|
|
179
|
+
* **defaults.plugin_path** - путь к каталогу плагинов
|
|
180
|
+
* **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
|
|
181
181
|
|
|
182
182
|
## Управление таймерами
|
|
183
183
|
|
|
@@ -209,7 +209,7 @@ callbac должен быть функцией вида:
|
|
|
209
209
|
>
|
|
210
210
|
> ...
|
|
211
211
|
|
|
212
|
-
в параметр **name** передается
|
|
212
|
+
в параметр **name** передается имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
|
|
213
213
|
|
|
214
214
|
Предусмотрены следующие типы интервалов работы таймера:
|
|
215
215
|
|
|
@@ -219,7 +219,7 @@ callbac должен быть функцией вида:
|
|
|
219
219
|
* TimerInterval.HOUR
|
|
220
220
|
* TimerInterval.DAY
|
|
221
221
|
|
|
222
|
-
Для управления таймерами, также,
|
|
222
|
+
Для управления таймерами, также, используются методы:
|
|
223
223
|
|
|
224
224
|
* **start**(immediately_start=True) - запускает таймер, если он остановлен. Если immediately_start=False, то таймер ждет свой
|
|
225
225
|
интервал и только потом запускает callback, иначе callback будет запущен сразу после вызова start()
|
|
@@ -277,7 +277,7 @@ if __name__ == '__main__':
|
|
|
277
277
|
- code: ERROR # код для вызова из функции raise_error
|
|
278
278
|
http: 444 # код для возврата для HTTP. можно не указывать
|
|
279
279
|
msg: В {place} у объекта {name} случилось {what} # Сообщение в которое будут подставлены kwargs из raise_error
|
|
280
|
-
class: Error #
|
|
280
|
+
class: Error # задаёт класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было не указывать)
|
|
281
281
|
- code: OTHER_ERROR
|
|
282
282
|
class: Exception
|
|
283
283
|
msg: Еще ошибка
|
|
@@ -373,6 +373,7 @@ logging:
|
|
|
373
373
|
## Доступ к БД
|
|
374
374
|
|
|
375
375
|
Библиотека поддерживает хранение настроек соединений и выполнение команд SQL на этих соединениях с БД.
|
|
376
|
+
|
|
376
377
|
Из коробки реализованы драйвер Postgresql, Sqlite и Valkey (Redis). Также реализован драйвер Mysql но для его работы дополнительно надо установить зависимость mysql-connector-python.
|
|
377
378
|
|
|
378
379
|
Можно описывать драйвера к другим БД. Для того чтобы использовать собственный драйвер, можно добавить класс драйвера
|
|
@@ -422,7 +423,7 @@ database: postgresql://localhost:5432/postgres?user=postgres&password=postgres
|
|
|
422
423
|
```toml
|
|
423
424
|
[database]
|
|
424
425
|
test = "postgresql://localhost:5432/test?user=postgres&password=postgres"
|
|
425
|
-
mydb = "postgresql://localhost:5432/mydb
|
|
426
|
+
mydb = "postgresql://postgres:postgres@localhost:5432/mydb"
|
|
426
427
|
|
|
427
428
|
[defaults]
|
|
428
429
|
database = "test"
|
|
@@ -445,7 +446,7 @@ database = "test"
|
|
|
445
446
|
который ограничит максимальное количество таких соединений. Т.е. по достижении данного числа соединений система
|
|
446
447
|
не станет выполнять очередную команду до тех пор, пока не освободится одно из текущих соединений с БД.
|
|
447
448
|
|
|
448
|
-
Для некоторых драйверов, например, для встроенного драйвера
|
|
449
|
+
Для некоторых драйверов, например, для встроенного драйвера postgresql строка сооединения с БД
|
|
449
450
|
может иметь альтернативную структуру:
|
|
450
451
|
|
|
451
452
|
<имя_драйвера>**://**<имя пользователя>**:**<пароль>**@**<адрес сервера>**:**<номер порта>**/**<имя БД>**?**<параметры соединения>**{**дополнительные параметры**}**
|
|
@@ -616,6 +617,7 @@ inner join t2 on t2.t_id=t.id and t2.name=$name
|
|
|
616
617
|
where t.date < now()::date;
|
|
617
618
|
```
|
|
618
619
|
система автоматически создает подстроку со значением параметра и, при необходимости, заключает это значение в кавычки.
|
|
620
|
+
|
|
619
621
|
|**Тип python**|**Тип БД**|**В кавычках**|
|
|
620
622
|
|--------|---------|-----|
|
|
621
623
|
| None | NULL | [ ] |
|
|
@@ -685,6 +687,7 @@ async def sql(query:str, *args, **kwargs):
|
|
|
685
687
|
|
|
686
688
|
Опции, это специальные параметры, которые влияют на выполнение запроса в целом.
|
|
687
689
|
Передавать опции можно только в конце списка args, после позиционных параметров, либо вместо них.
|
|
690
|
+
|
|
688
691
|
В библиотеке реализованы следующие опции:
|
|
689
692
|
* DB - служит для передачи соединения в функцию sql. Передается как DB("строка соединения").
|
|
690
693
|
* NOTICE - то же, что DB, но запросы с такой опцией возвращают как результат список сообщений нотификации
|
|
@@ -69,8 +69,16 @@ class Driver(BaseDriver):
|
|
|
69
69
|
self._conn_params[k] = v
|
|
70
70
|
|
|
71
71
|
async def begin(self):
|
|
72
|
-
await self._before_open()
|
|
72
|
+
params = await self._before_open()
|
|
73
73
|
self._conn = await connect(**self._conn_params)
|
|
74
|
+
if params:
|
|
75
|
+
cur = await self._conn.cursor()
|
|
76
|
+
try:
|
|
77
|
+
for x in params:
|
|
78
|
+
p = x if x.startswith("@") else f"@{x.strip()}"
|
|
79
|
+
await cur.execute(f"SET {p} = '{params[x]}'")
|
|
80
|
+
finally:
|
|
81
|
+
await cur.close()
|
|
74
82
|
|
|
75
83
|
async def sql(self, query, one_row=False, row_factory=RowFactory.DICT):
|
|
76
84
|
if self._conn is None:
|
|
@@ -56,8 +56,10 @@ class Driver(BaseDriver):
|
|
|
56
56
|
for x in params:
|
|
57
57
|
if x == "TIMEZONE":
|
|
58
58
|
await self._conn.execute(f"set session timezone '{params[x]}'")
|
|
59
|
+
elif x.startswith("pg_"):
|
|
60
|
+
await self._conn.execute(f"SET {x[3:]} = '{params[x]}'")
|
|
59
61
|
else:
|
|
60
|
-
await self._conn.execute(f"
|
|
62
|
+
await self._conn.execute(f"select set_config('{x if '.' in x else f'my_app.{x}'}','{params[x]}', true)")
|
|
61
63
|
if self._notify:
|
|
62
64
|
self._conn.add_notify_handler(self._notify_callback)
|
|
63
65
|
|
|
@@ -14,6 +14,9 @@ from ..error import error, error_msg
|
|
|
14
14
|
import asyncio
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
_LIB_PATH = str(Path(__file__).parent.parent)
|
|
18
|
+
|
|
19
|
+
|
|
17
20
|
class LogLevel(Enum):
|
|
18
21
|
CRITICAL = LOG.CRITICAL
|
|
19
22
|
FATAL = LOG.FATAL
|
|
@@ -482,32 +485,31 @@ class Config:
|
|
|
482
485
|
"extra": None,
|
|
483
486
|
"sinfo": None
|
|
484
487
|
}
|
|
485
|
-
if self._log_level.value <= LogLevel.DEBUG.value or isinstance(msg, Exception):
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
params["lno"] = info[1]
|
|
488
|
+
#if self._log_level.value <= LogLevel.DEBUG.value or isinstance(msg, Exception):
|
|
489
|
+
if level.value > LogLevel.DEBUG.value:
|
|
490
|
+
info = ("", "", "")
|
|
491
|
+
elif 'stacklevel' not in kwargs:
|
|
492
|
+
lvl = 2
|
|
493
|
+
info = log_to.findCaller(stacklevel=lvl)
|
|
494
|
+
while info[0].startswith(_LIB_PATH):
|
|
495
|
+
lvl += 1
|
|
496
|
+
x = log_to.findCaller(stacklevel=lvl)
|
|
497
|
+
if not x[0].startswith(_LIB_PATH):
|
|
498
|
+
info = x
|
|
499
|
+
break
|
|
500
|
+
else:
|
|
501
|
+
info = x
|
|
502
|
+
else:
|
|
503
|
+
info = log_to.findCaller(stacklevel=kwargs.get('stacklevel', 2))
|
|
504
|
+
|
|
505
|
+
if isinstance(msg, Exception):
|
|
506
|
+
params["fn"] = info[0]
|
|
507
|
+
else:
|
|
508
|
+
x = info[0].rsplit("/", 2)
|
|
509
|
+
del x[0]
|
|
510
|
+
params["fn"] = '/'.join(x)
|
|
511
|
+
params["func"] = info[2]
|
|
512
|
+
params["lno"] = info[1]
|
|
511
513
|
|
|
512
514
|
if "timer" in kwargs:
|
|
513
515
|
n = kwargs["timer"]
|
|
@@ -29,7 +29,7 @@ class DB_ENV(UserDict):
|
|
|
29
29
|
"""
|
|
30
30
|
Окружение для работы с БД
|
|
31
31
|
:param connection: строка соеддинения или экземпляр DB_ENV, на основе которого нужно создать данный
|
|
32
|
-
:param db_params: список переменных, которые должны передаваться в
|
|
32
|
+
:param db_params: список имен переменных, которые должны передаваться в соединение с БД
|
|
33
33
|
:param notify: список или функция, в которую будут переданы извещения о событиях
|
|
34
34
|
:param kwargs: значения переменных
|
|
35
35
|
"""
|
|
@@ -102,7 +102,7 @@ class DB_ENV(UserDict):
|
|
|
102
102
|
if self._context is not None:
|
|
103
103
|
raise_error("ENV_CONTEXT_EXISTS")
|
|
104
104
|
if self._db_params:
|
|
105
|
-
s = self._connection_str +
|
|
105
|
+
s = self._connection_str + dumps({x:self[x] for x in self._db_params if self.has_item(x)})
|
|
106
106
|
else:
|
|
107
107
|
s = self._connection_str
|
|
108
108
|
self._context = DB(s, notify=self._notify)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ab_engine
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Library of standard modules
|
|
5
5
|
Author-email: Andrew Bulatov <BulatovAndrew@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -167,17 +167,17 @@ create table config(
|
|
|
167
167
|
|
|
168
168
|
нресколько имен ключей файла конфигурации зарезервированы и являются специальными:
|
|
169
169
|
|
|
170
|
-
**timers** - определяет интервалы для таймеров системы
|
|
171
|
-
**logging** - позволяет задать настройки логирования
|
|
172
|
-
**database**- содержит строки соединения с одной или несколькими БД
|
|
173
|
-
**defaults**- содержит значения по умолчанию
|
|
170
|
+
* **timers** - определяет интервалы для таймеров системы
|
|
171
|
+
* **logging** - позволяет задать настройки логирования
|
|
172
|
+
* **database**- содержит строки соединения с одной или несколькими БД
|
|
173
|
+
* **defaults**- содержит значения по умолчанию
|
|
174
174
|
|
|
175
175
|
#### Значения по умолчанию
|
|
176
176
|
|
|
177
|
-
**defaults.name** - имя, подставляемое в лог как имя сервиса
|
|
178
|
-
**defaults.database** - имя соединения БД по умолчанию
|
|
179
|
-
**defaults.plugin_path** - путь к каталогу плагинов
|
|
180
|
-
**defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
|
|
177
|
+
* **defaults.name** - имя, подставляемое в лог как имя сервиса
|
|
178
|
+
* **defaults.database** - имя соединения БД по умолчанию
|
|
179
|
+
* **defaults.plugin_path** - путь к каталогу плагинов
|
|
180
|
+
* **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
|
|
181
181
|
|
|
182
182
|
## Управление таймерами
|
|
183
183
|
|
|
@@ -209,7 +209,7 @@ callbac должен быть функцией вида:
|
|
|
209
209
|
>
|
|
210
210
|
> ...
|
|
211
211
|
|
|
212
|
-
в параметр **name** передается
|
|
212
|
+
в параметр **name** передается имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
|
|
213
213
|
|
|
214
214
|
Предусмотрены следующие типы интервалов работы таймера:
|
|
215
215
|
|
|
@@ -219,7 +219,7 @@ callbac должен быть функцией вида:
|
|
|
219
219
|
* TimerInterval.HOUR
|
|
220
220
|
* TimerInterval.DAY
|
|
221
221
|
|
|
222
|
-
Для управления таймерами, также,
|
|
222
|
+
Для управления таймерами, также, используются методы:
|
|
223
223
|
|
|
224
224
|
* **start**(immediately_start=True) - запускает таймер, если он остановлен. Если immediately_start=False, то таймер ждет свой
|
|
225
225
|
интервал и только потом запускает callback, иначе callback будет запущен сразу после вызова start()
|
|
@@ -277,7 +277,7 @@ if __name__ == '__main__':
|
|
|
277
277
|
- code: ERROR # код для вызова из функции raise_error
|
|
278
278
|
http: 444 # код для возврата для HTTP. можно не указывать
|
|
279
279
|
msg: В {place} у объекта {name} случилось {what} # Сообщение в которое будут подставлены kwargs из raise_error
|
|
280
|
-
class: Error #
|
|
280
|
+
class: Error # задаёт класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было не указывать)
|
|
281
281
|
- code: OTHER_ERROR
|
|
282
282
|
class: Exception
|
|
283
283
|
msg: Еще ошибка
|
|
@@ -373,6 +373,7 @@ logging:
|
|
|
373
373
|
## Доступ к БД
|
|
374
374
|
|
|
375
375
|
Библиотека поддерживает хранение настроек соединений и выполнение команд SQL на этих соединениях с БД.
|
|
376
|
+
|
|
376
377
|
Из коробки реализованы драйвер Postgresql, Sqlite и Valkey (Redis). Также реализован драйвер Mysql но для его работы дополнительно надо установить зависимость mysql-connector-python.
|
|
377
378
|
|
|
378
379
|
Можно описывать драйвера к другим БД. Для того чтобы использовать собственный драйвер, можно добавить класс драйвера
|
|
@@ -422,7 +423,7 @@ database: postgresql://localhost:5432/postgres?user=postgres&password=postgres
|
|
|
422
423
|
```toml
|
|
423
424
|
[database]
|
|
424
425
|
test = "postgresql://localhost:5432/test?user=postgres&password=postgres"
|
|
425
|
-
mydb = "postgresql://localhost:5432/mydb
|
|
426
|
+
mydb = "postgresql://postgres:postgres@localhost:5432/mydb"
|
|
426
427
|
|
|
427
428
|
[defaults]
|
|
428
429
|
database = "test"
|
|
@@ -445,7 +446,7 @@ database = "test"
|
|
|
445
446
|
который ограничит максимальное количество таких соединений. Т.е. по достижении данного числа соединений система
|
|
446
447
|
не станет выполнять очередную команду до тех пор, пока не освободится одно из текущих соединений с БД.
|
|
447
448
|
|
|
448
|
-
Для некоторых драйверов, например, для встроенного драйвера
|
|
449
|
+
Для некоторых драйверов, например, для встроенного драйвера postgresql строка сооединения с БД
|
|
449
450
|
может иметь альтернативную структуру:
|
|
450
451
|
|
|
451
452
|
<имя_драйвера>**://**<имя пользователя>**:**<пароль>**@**<адрес сервера>**:**<номер порта>**/**<имя БД>**?**<параметры соединения>**{**дополнительные параметры**}**
|
|
@@ -616,6 +617,7 @@ inner join t2 on t2.t_id=t.id and t2.name=$name
|
|
|
616
617
|
where t.date < now()::date;
|
|
617
618
|
```
|
|
618
619
|
система автоматически создает подстроку со значением параметра и, при необходимости, заключает это значение в кавычки.
|
|
620
|
+
|
|
619
621
|
|**Тип python**|**Тип БД**|**В кавычках**|
|
|
620
622
|
|--------|---------|-----|
|
|
621
623
|
| None | NULL | [ ] |
|
|
@@ -685,6 +687,7 @@ async def sql(query:str, *args, **kwargs):
|
|
|
685
687
|
|
|
686
688
|
Опции, это специальные параметры, которые влияют на выполнение запроса в целом.
|
|
687
689
|
Передавать опции можно только в конце списка args, после позиционных параметров, либо вместо них.
|
|
690
|
+
|
|
688
691
|
В библиотеке реализованы следующие опции:
|
|
689
692
|
* DB - служит для передачи соединения в функцию sql. Передается как DB("строка соединения").
|
|
690
693
|
* NOTICE - то же, что DB, но запросы с такой опцией возвращают как результат список сообщений нотификации
|
|
@@ -153,17 +153,17 @@ create table config(
|
|
|
153
153
|
|
|
154
154
|
нресколько имен ключей файла конфигурации зарезервированы и являются специальными:
|
|
155
155
|
|
|
156
|
-
**timers** - определяет интервалы для таймеров системы
|
|
157
|
-
**logging** - позволяет задать настройки логирования
|
|
158
|
-
**database**- содержит строки соединения с одной или несколькими БД
|
|
159
|
-
**defaults**- содержит значения по умолчанию
|
|
156
|
+
* **timers** - определяет интервалы для таймеров системы
|
|
157
|
+
* **logging** - позволяет задать настройки логирования
|
|
158
|
+
* **database**- содержит строки соединения с одной или несколькими БД
|
|
159
|
+
* **defaults**- содержит значения по умолчанию
|
|
160
160
|
|
|
161
161
|
#### Значения по умолчанию
|
|
162
162
|
|
|
163
|
-
**defaults.name** - имя, подставляемое в лог как имя сервиса
|
|
164
|
-
**defaults.database** - имя соединения БД по умолчанию
|
|
165
|
-
**defaults.plugin_path** - путь к каталогу плагинов
|
|
166
|
-
**defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
|
|
163
|
+
* **defaults.name** - имя, подставляемое в лог как имя сервиса
|
|
164
|
+
* **defaults.database** - имя соединения БД по умолчанию
|
|
165
|
+
* **defaults.plugin_path** - путь к каталогу плагинов
|
|
166
|
+
* **defaults.db_driver_path** - путь к драйверам БД (по умолчанию ab_engine/db)
|
|
167
167
|
|
|
168
168
|
## Управление таймерами
|
|
169
169
|
|
|
@@ -195,7 +195,7 @@ callbac должен быть функцией вида:
|
|
|
195
195
|
>
|
|
196
196
|
> ...
|
|
197
197
|
|
|
198
|
-
в параметр **name** передается
|
|
198
|
+
в параметр **name** передается имя таймера, в **prev_time** предыдущее время запуска, первый раз **prev_time = None**
|
|
199
199
|
|
|
200
200
|
Предусмотрены следующие типы интервалов работы таймера:
|
|
201
201
|
|
|
@@ -205,7 +205,7 @@ callbac должен быть функцией вида:
|
|
|
205
205
|
* TimerInterval.HOUR
|
|
206
206
|
* TimerInterval.DAY
|
|
207
207
|
|
|
208
|
-
Для управления таймерами, также,
|
|
208
|
+
Для управления таймерами, также, используются методы:
|
|
209
209
|
|
|
210
210
|
* **start**(immediately_start=True) - запускает таймер, если он остановлен. Если immediately_start=False, то таймер ждет свой
|
|
211
211
|
интервал и только потом запускает callback, иначе callback будет запущен сразу после вызова start()
|
|
@@ -263,7 +263,7 @@ if __name__ == '__main__':
|
|
|
263
263
|
- code: ERROR # код для вызова из функции raise_error
|
|
264
264
|
http: 444 # код для возврата для HTTP. можно не указывать
|
|
265
265
|
msg: В {place} у объекта {name} случилось {what} # Сообщение в которое будут подставлены kwargs из raise_error
|
|
266
|
-
class: Error #
|
|
266
|
+
class: Error # задаёт класс исключения. По умолчанию это Error из библиотеки (т.е. Error можно было не указывать)
|
|
267
267
|
- code: OTHER_ERROR
|
|
268
268
|
class: Exception
|
|
269
269
|
msg: Еще ошибка
|
|
@@ -359,6 +359,7 @@ logging:
|
|
|
359
359
|
## Доступ к БД
|
|
360
360
|
|
|
361
361
|
Библиотека поддерживает хранение настроек соединений и выполнение команд SQL на этих соединениях с БД.
|
|
362
|
+
|
|
362
363
|
Из коробки реализованы драйвер Postgresql, Sqlite и Valkey (Redis). Также реализован драйвер Mysql но для его работы дополнительно надо установить зависимость mysql-connector-python.
|
|
363
364
|
|
|
364
365
|
Можно описывать драйвера к другим БД. Для того чтобы использовать собственный драйвер, можно добавить класс драйвера
|
|
@@ -408,7 +409,7 @@ database: postgresql://localhost:5432/postgres?user=postgres&password=postgres
|
|
|
408
409
|
```toml
|
|
409
410
|
[database]
|
|
410
411
|
test = "postgresql://localhost:5432/test?user=postgres&password=postgres"
|
|
411
|
-
mydb = "postgresql://localhost:5432/mydb
|
|
412
|
+
mydb = "postgresql://postgres:postgres@localhost:5432/mydb"
|
|
412
413
|
|
|
413
414
|
[defaults]
|
|
414
415
|
database = "test"
|
|
@@ -431,7 +432,7 @@ database = "test"
|
|
|
431
432
|
который ограничит максимальное количество таких соединений. Т.е. по достижении данного числа соединений система
|
|
432
433
|
не станет выполнять очередную команду до тех пор, пока не освободится одно из текущих соединений с БД.
|
|
433
434
|
|
|
434
|
-
Для некоторых драйверов, например, для встроенного драйвера
|
|
435
|
+
Для некоторых драйверов, например, для встроенного драйвера postgresql строка сооединения с БД
|
|
435
436
|
может иметь альтернативную структуру:
|
|
436
437
|
|
|
437
438
|
<имя_драйвера>**://**<имя пользователя>**:**<пароль>**@**<адрес сервера>**:**<номер порта>**/**<имя БД>**?**<параметры соединения>**{**дополнительные параметры**}**
|
|
@@ -602,6 +603,7 @@ inner join t2 on t2.t_id=t.id and t2.name=$name
|
|
|
602
603
|
where t.date < now()::date;
|
|
603
604
|
```
|
|
604
605
|
система автоматически создает подстроку со значением параметра и, при необходимости, заключает это значение в кавычки.
|
|
606
|
+
|
|
605
607
|
|**Тип python**|**Тип БД**|**В кавычках**|
|
|
606
608
|
|--------|---------|-----|
|
|
607
609
|
| None | NULL | [ ] |
|
|
@@ -671,6 +673,7 @@ async def sql(query:str, *args, **kwargs):
|
|
|
671
673
|
|
|
672
674
|
Опции, это специальные параметры, которые влияют на выполнение запроса в целом.
|
|
673
675
|
Передавать опции можно только в конце списка args, после позиционных параметров, либо вместо них.
|
|
676
|
+
|
|
674
677
|
В библиотеке реализованы следующие опции:
|
|
675
678
|
* DB - служит для передачи соединения в функцию sql. Передается как DB("строка соединения").
|
|
676
679
|
* NOTICE - то же, что DB, но запросы с такой опцией возвращают как результат список сообщений нотификации
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|