chutils 2.0.0__tar.gz → 2.1.0__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.
- {chutils-2.0.0 → chutils-2.1.0}/PKG-INFO +124 -53
- {chutils-2.0.0 → chutils-2.1.0}/README.md +119 -51
- chutils-2.1.0/pyproject.toml +31 -0
- chutils-2.1.0/src/chutils/config.py +440 -0
- chutils-2.1.0/src/chutils/decorators.py +16 -0
- {chutils-2.0.0 → chutils-2.1.0}/src/chutils/logger.py +226 -203
- {chutils-2.0.0 → chutils-2.1.0}/src/chutils/secret_manager.py +166 -138
- chutils-2.0.0/pyproject.toml +0 -28
- chutils-2.0.0/src/chutils/config.py +0 -277
- {chutils-2.0.0 → chutils-2.1.0}/LICENSE +0 -0
- {chutils-2.0.0 → chutils-2.1.0}/src/chutils/__init__.py +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: chutils
|
|
3
|
-
Version: 2.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 2.1.0
|
|
4
|
+
Summary: Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией и логированием в новых проектах.
|
|
5
5
|
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Author: Sergo
|
|
7
8
|
Author-email: sergeiivanov636@gmail.com
|
|
8
9
|
Requires-Python: >=3.9
|
|
@@ -13,16 +14,21 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
13
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
18
|
Requires-Dist: keyring (>=25.6.0,<26.0.0)
|
|
17
19
|
Requires-Dist: pyyaml (>=6.0.3,<7.0.0)
|
|
18
20
|
Description-Content-Type: text/markdown
|
|
19
21
|
|
|
20
|
-
# chutils
|
|
22
|
+
# chutils: Рутина — в прошлом!
|
|
21
23
|
|
|
22
|
-
[](https://opensource.org/licenses/MIT)
|
|
24
|
+
[](https://opensource.org/licenses/MIT)
|
|
25
|
+
[](https://www.python.org/downloads/)
|
|
26
|
+
[](https://badge.fury.io/py/chutils)
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
**chutils** — это набор простых утилит для Python, который избавляет от повторяющейся настройки конфигурации,
|
|
29
|
+
логирования и секретов в ваших проектах.
|
|
30
|
+
|
|
31
|
+
Начните новый проект и сразу сфокусируйтесь на главном, а не на рутине.
|
|
26
32
|
|
|
27
33
|
## Проблема
|
|
28
34
|
|
|
@@ -30,15 +36,15 @@ Description-Content-Type: text/markdown
|
|
|
30
36
|
|
|
31
37
|
- Как удобно читать настройки из файла конфигурации?
|
|
32
38
|
- Как настроить логирование, чтобы сообщения писались и в консоль, и в файл с ежедневной ротацией?
|
|
33
|
-
- Как безопасно хранить API
|
|
34
|
-
- Как
|
|
39
|
+
- Как безопасно хранить API-ключи, не прописывая их в коде?
|
|
40
|
+
- Как сделать, чтобы всё это работало "из коробки", без прописывания путей?
|
|
35
41
|
|
|
36
|
-
**chutils**
|
|
42
|
+
**chutils** предлагает готовые решения для всех этих проблем.
|
|
37
43
|
|
|
38
44
|
## Ключевые возможности
|
|
39
45
|
|
|
40
|
-
- **✨ Ноль конфигурации:** Библиотека **автоматически** находит корень вашего проекта и файл
|
|
41
|
-
|
|
46
|
+
- **✨ Ноль конфигурации:** Библиотека **автоматически** находит корень вашего проекта и файл `config.yml` или
|
|
47
|
+
`config.ini`.
|
|
42
48
|
- **⚙️ Гибкая конфигурация:** Поддержка `YAML` и `INI` форматов. Простые функции для получения типизированных данных.
|
|
43
49
|
- **✍️ Продвинутый логгер:** Функция `setup_logger()` "из коробки" настраивает логирование в консоль и в ротируемые
|
|
44
50
|
файлы. Возвращает кастомный логгер с дополнительными уровнями отладки (`devdebug`, `mediumdebug`).
|
|
@@ -66,18 +72,101 @@ cd chutils
|
|
|
66
72
|
pip install -e .
|
|
67
73
|
```
|
|
68
74
|
|
|
75
|
+
## Примеры использования
|
|
76
|
+
|
|
77
|
+
В папке [`/examples`](./examples/) вы найдете готовые к запуску скрипты, демонстрирующие ключевые возможности
|
|
78
|
+
библиотеки. Каждый пример сфокусирован на одной конкретной задаче.
|
|
79
|
+
|
|
69
80
|
## Быстрый старт
|
|
70
81
|
|
|
71
|
-
1.
|
|
82
|
+
### 1. Работа с конфигурацией
|
|
83
|
+
|
|
84
|
+
1. Создайте файл `config.yml` в корне вашего проекта:
|
|
72
85
|
|
|
73
|
-
|
|
86
|
+
```yaml
|
|
87
|
+
# config.yml
|
|
88
|
+
Database:
|
|
89
|
+
host: localhost
|
|
90
|
+
port: 5432
|
|
91
|
+
user: my_user
|
|
74
92
|
```
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
93
|
+
|
|
94
|
+
2. Получайте значения в вашем коде:
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
# main.py
|
|
98
|
+
from chutils import get_config_value, get_config_int
|
|
99
|
+
|
|
100
|
+
db_host = get_config_value("Database", "host", fallback="127.0.0.1")
|
|
101
|
+
db_port = get_config_int("Database", "port", fallback=5433)
|
|
102
|
+
|
|
103
|
+
print(f"Подключаемся к БД по адресу: {db_host}:{db_port}")
|
|
104
|
+
# Вывод: Подключаемся к БД по адресу: localhost:5432
|
|
78
105
|
```
|
|
106
|
+
`chutils` автоматически найдет `config.yml` и прочитает из него данные.
|
|
107
|
+
|
|
108
|
+
### 2. Настройка логирования
|
|
109
|
+
|
|
110
|
+
1. Добавьте секцию `Logging` в ваш `config.yml` (опционально):
|
|
79
111
|
|
|
80
|
-
|
|
112
|
+
```yaml
|
|
113
|
+
# config.yml
|
|
114
|
+
Logging:
|
|
115
|
+
log_level: DEBUG
|
|
116
|
+
log_file_name: my_app.log
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
2. Используйте логгер:
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
# main.py
|
|
123
|
+
from chutils import setup_logger, ChutilsLogger
|
|
124
|
+
|
|
125
|
+
# Настраиваем логгер. Он сам прочитает настройки из конфига.
|
|
126
|
+
logger: ChutilsLogger = setup_logger()
|
|
127
|
+
|
|
128
|
+
logger.info("Приложение запущено.")
|
|
129
|
+
logger.debug("Это отладочное сообщение.")
|
|
130
|
+
# Вывод в консоли и запись в файл logs/my_app.log
|
|
131
|
+
```
|
|
132
|
+
Папка `logs` будет создана автоматически.
|
|
133
|
+
|
|
134
|
+
### 3. Управление секретами
|
|
135
|
+
|
|
136
|
+
1. Инициализируйте `SecretManager` и сохраните ваш секрет. **Это нужно сделать один раз.**
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
# setup_secrets.py
|
|
140
|
+
from chutils import SecretManager
|
|
141
|
+
|
|
142
|
+
secrets = SecretManager("my_awesome_app")
|
|
143
|
+
secrets.save_secret("db_password", "MySuperSecretDbPassword123!")
|
|
144
|
+
print("Пароль от БД сохранен в системном хранилище!")
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
2. Получайте секрет в основном коде, не "светя" им:
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
# main.py
|
|
151
|
+
from chutils import SecretManager, get_config_value
|
|
152
|
+
|
|
153
|
+
secrets = SecretManager("my_awesome_app")
|
|
154
|
+
db_user = get_config_value("Database", "user")
|
|
155
|
+
|
|
156
|
+
# Получаем пароль из безопасного хранилища
|
|
157
|
+
db_password = secrets.get_secret("db_password")
|
|
158
|
+
|
|
159
|
+
if db_password:
|
|
160
|
+
print(f"Получен пароль для пользователя {db_user}.")
|
|
161
|
+
else:
|
|
162
|
+
print("Пароль не найден!")
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Комплексный пример
|
|
166
|
+
|
|
167
|
+
Этот пример показывает, как все компоненты `chutils` работают вместе.
|
|
168
|
+
|
|
169
|
+
1. **Файл `config.yml`:**
|
|
81
170
|
```yaml
|
|
82
171
|
API:
|
|
83
172
|
base_url: https://api.example.com
|
|
@@ -86,10 +175,12 @@ pip install -e .
|
|
|
86
175
|
host: localhost
|
|
87
176
|
port: 5432
|
|
88
177
|
user: my_user
|
|
89
|
-
```
|
|
90
178
|
|
|
91
|
-
|
|
179
|
+
Logging:
|
|
180
|
+
log_level: INFO
|
|
181
|
+
```
|
|
92
182
|
|
|
183
|
+
2. **Код `main.py`:**
|
|
93
184
|
```python
|
|
94
185
|
# main.py
|
|
95
186
|
from chutils import get_config_value, setup_logger, SecretManager, ChutilsLogger
|
|
@@ -101,15 +192,17 @@ pip install -e .
|
|
|
101
192
|
secrets = SecretManager("my_awesome_app")
|
|
102
193
|
|
|
103
194
|
def setup_credentials():
|
|
104
|
-
"""Функция для первоначального сохранения
|
|
195
|
+
"""Функция для первоначального сохранения пароля, если его нет."""
|
|
105
196
|
db_user = get_config_value("Database", "user")
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
197
|
+
password_key = f"{db_user}_password"
|
|
198
|
+
|
|
199
|
+
if not secrets.get_secret(password_key):
|
|
200
|
+
logger.info("Пароль для БД не найден. Сохраняем новый...")
|
|
201
|
+
secrets.save_secret(password_key, "MySuperSecretDbPassword123!")
|
|
109
202
|
logger.info("Пароль для БД сохранен в системном хранилище.")
|
|
110
203
|
|
|
111
204
|
def connect_to_db():
|
|
112
|
-
|
|
205
|
+
"""Пример подключения к БД с использованием конфига и секретов."""
|
|
113
206
|
db_host = get_config_value("Database", "host")
|
|
114
207
|
db_user = get_config_value("Database", "user")
|
|
115
208
|
db_password = secrets.get_secret(f"{db_user}_password")
|
|
@@ -118,7 +211,7 @@ pip install -e .
|
|
|
118
211
|
logger.error("Не удалось получить пароль для БД!")
|
|
119
212
|
return
|
|
120
213
|
|
|
121
|
-
logger.info(f"Подключаемся к
|
|
214
|
+
logger.info(f"Подключаемся к {db_host} от имени {db_user}...")
|
|
122
215
|
# ... логика подключения ...
|
|
123
216
|
logger.info("Успешно подключились!")
|
|
124
217
|
|
|
@@ -132,10 +225,7 @@ pip install -e .
|
|
|
132
225
|
main()
|
|
133
226
|
```
|
|
134
227
|
|
|
135
|
-
|
|
136
|
-
надежно сохранен в системном хранилище.
|
|
137
|
-
|
|
138
|
-
## API и Использование
|
|
228
|
+
## API
|
|
139
229
|
|
|
140
230
|
### Работа с конфигурацией (`chutils.config`)
|
|
141
231
|
|
|
@@ -144,8 +234,8 @@ pip install -e .
|
|
|
144
234
|
- `get_config_boolean(section, key, fallback=False)`: Получить булево значение.
|
|
145
235
|
- `get_config_list(section, key, fallback=[])`: Получить список.
|
|
146
236
|
- `get_config_section(section)`: Получить всю секцию как словарь.
|
|
147
|
-
- `save_config_value(section, key, value)`: Сохранить значение.
|
|
148
|
-
|
|
237
|
+
- `save_config_value(section, key, value)`: Сохранить значение. Работает для `.yml` и `.ini`.
|
|
238
|
+
**Важно**: при сохранении в `.yml` комментарии и форматирование будут утеряны. При сохранении в `.ini` - сохраняются.
|
|
149
239
|
|
|
150
240
|
### Настройка логирования (`chutils.logger`)
|
|
151
241
|
|
|
@@ -163,7 +253,7 @@ pip install -e .
|
|
|
163
253
|
### Ручная инициализация (`chutils.init`)
|
|
164
254
|
|
|
165
255
|
В 99% случаев вам это **не понадобится**. Но если автоматика не справилась, вы можете один раз указать путь к проекту
|
|
166
|
-
|
|
256
|
+
вручную в самом начале работы приложения:
|
|
167
257
|
|
|
168
258
|
```python
|
|
169
259
|
import chutils
|
|
@@ -171,26 +261,7 @@ import chutils
|
|
|
171
261
|
chutils.init(base_dir="/path/to/my/project/root")
|
|
172
262
|
```
|
|
173
263
|
|
|
174
|
-
### Пример файла `config.yml`
|
|
175
|
-
|
|
176
|
-
`chutils` использует секцию `Logging` для настройки логгера.
|
|
177
|
-
|
|
178
|
-
```yaml
|
|
179
|
-
API:
|
|
180
|
-
token: your_secret_token_here
|
|
181
|
-
|
|
182
|
-
Database:
|
|
183
|
-
host: localhost
|
|
184
|
-
|
|
185
|
-
Logging:
|
|
186
|
-
# Уровни: DEVDEBUG, DEBUG, MEDIUMDEBUG, INFO, WARNING, ERROR, CRITICAL
|
|
187
|
-
log_level: DEBUG
|
|
188
|
-
# Имя файла для логов
|
|
189
|
-
log_file_name: my_app.log
|
|
190
|
-
# Сколько дней хранить файлы логов
|
|
191
|
-
log_backup_count: 7
|
|
192
|
-
```
|
|
193
|
-
|
|
194
264
|
## Лицензия
|
|
195
265
|
|
|
196
266
|
Проект распространяется под лицензией MIT.
|
|
267
|
+
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
# chutils
|
|
1
|
+
# chutils: Рутина — в прошлом!
|
|
2
2
|
|
|
3
|
-
[](https://opensource.org/licenses/MIT)
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
[](https://www.python.org/downloads/)
|
|
5
|
+
[](https://badge.fury.io/py/chutils)
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
**chutils** — это набор простых утилит для Python, который избавляет от повторяющейся настройки конфигурации,
|
|
8
|
+
логирования и секретов в ваших проектах.
|
|
9
|
+
|
|
10
|
+
Начните новый проект и сразу сфокусируйтесь на главном, а не на рутине.
|
|
7
11
|
|
|
8
12
|
## Проблема
|
|
9
13
|
|
|
@@ -11,15 +15,15 @@
|
|
|
11
15
|
|
|
12
16
|
- Как удобно читать настройки из файла конфигурации?
|
|
13
17
|
- Как настроить логирование, чтобы сообщения писались и в консоль, и в файл с ежедневной ротацией?
|
|
14
|
-
- Как безопасно хранить API
|
|
15
|
-
- Как
|
|
18
|
+
- Как безопасно хранить API-ключи, не прописывая их в коде?
|
|
19
|
+
- Как сделать, чтобы всё это работало "из коробки", без прописывания путей?
|
|
16
20
|
|
|
17
|
-
**chutils**
|
|
21
|
+
**chutils** предлагает готовые решения для всех этих проблем.
|
|
18
22
|
|
|
19
23
|
## Ключевые возможности
|
|
20
24
|
|
|
21
|
-
- **✨ Ноль конфигурации:** Библиотека **автоматически** находит корень вашего проекта и файл
|
|
22
|
-
|
|
25
|
+
- **✨ Ноль конфигурации:** Библиотека **автоматически** находит корень вашего проекта и файл `config.yml` или
|
|
26
|
+
`config.ini`.
|
|
23
27
|
- **⚙️ Гибкая конфигурация:** Поддержка `YAML` и `INI` форматов. Простые функции для получения типизированных данных.
|
|
24
28
|
- **✍️ Продвинутый логгер:** Функция `setup_logger()` "из коробки" настраивает логирование в консоль и в ротируемые
|
|
25
29
|
файлы. Возвращает кастомный логгер с дополнительными уровнями отладки (`devdebug`, `mediumdebug`).
|
|
@@ -47,18 +51,101 @@ cd chutils
|
|
|
47
51
|
pip install -e .
|
|
48
52
|
```
|
|
49
53
|
|
|
54
|
+
## Примеры использования
|
|
55
|
+
|
|
56
|
+
В папке [`/examples`](./examples/) вы найдете готовые к запуску скрипты, демонстрирующие ключевые возможности
|
|
57
|
+
библиотеки. Каждый пример сфокусирован на одной конкретной задаче.
|
|
58
|
+
|
|
50
59
|
## Быстрый старт
|
|
51
60
|
|
|
52
|
-
1.
|
|
61
|
+
### 1. Работа с конфигурацией
|
|
62
|
+
|
|
63
|
+
1. Создайте файл `config.yml` в корне вашего проекта:
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
# config.yml
|
|
67
|
+
Database:
|
|
68
|
+
host: localhost
|
|
69
|
+
port: 5432
|
|
70
|
+
user: my_user
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
2. Получайте значения в вашем коде:
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
# main.py
|
|
77
|
+
from chutils import get_config_value, get_config_int
|
|
78
|
+
|
|
79
|
+
db_host = get_config_value("Database", "host", fallback="127.0.0.1")
|
|
80
|
+
db_port = get_config_int("Database", "port", fallback=5433)
|
|
81
|
+
|
|
82
|
+
print(f"Подключаемся к БД по адресу: {db_host}:{db_port}")
|
|
83
|
+
# Вывод: Подключаемся к БД по адресу: localhost:5432
|
|
84
|
+
```
|
|
85
|
+
`chutils` автоматически найдет `config.yml` и прочитает из него данные.
|
|
86
|
+
|
|
87
|
+
### 2. Настройка логирования
|
|
88
|
+
|
|
89
|
+
1. Добавьте секцию `Logging` в ваш `config.yml` (опционально):
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
# config.yml
|
|
93
|
+
Logging:
|
|
94
|
+
log_level: DEBUG
|
|
95
|
+
log_file_name: my_app.log
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
2. Используйте логгер:
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
# main.py
|
|
102
|
+
from chutils import setup_logger, ChutilsLogger
|
|
103
|
+
|
|
104
|
+
# Настраиваем логгер. Он сам прочитает настройки из конфига.
|
|
105
|
+
logger: ChutilsLogger = setup_logger()
|
|
106
|
+
|
|
107
|
+
logger.info("Приложение запущено.")
|
|
108
|
+
logger.debug("Это отладочное сообщение.")
|
|
109
|
+
# Вывод в консоли и запись в файл logs/my_app.log
|
|
110
|
+
```
|
|
111
|
+
Папка `logs` будет создана автоматически.
|
|
112
|
+
|
|
113
|
+
### 3. Управление секретами
|
|
114
|
+
|
|
115
|
+
1. Инициализируйте `SecretManager` и сохраните ваш секрет. **Это нужно сделать один раз.**
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
# setup_secrets.py
|
|
119
|
+
from chutils import SecretManager
|
|
53
120
|
|
|
54
|
-
|
|
121
|
+
secrets = SecretManager("my_awesome_app")
|
|
122
|
+
secrets.save_secret("db_password", "MySuperSecretDbPassword123!")
|
|
123
|
+
print("Пароль от БД сохранен в системном хранилище!")
|
|
55
124
|
```
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
125
|
+
|
|
126
|
+
2. Получайте секрет в основном коде, не "светя" им:
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
# main.py
|
|
130
|
+
from chutils import SecretManager, get_config_value
|
|
131
|
+
|
|
132
|
+
secrets = SecretManager("my_awesome_app")
|
|
133
|
+
db_user = get_config_value("Database", "user")
|
|
134
|
+
|
|
135
|
+
# Получаем пароль из безопасного хранилища
|
|
136
|
+
db_password = secrets.get_secret("db_password")
|
|
137
|
+
|
|
138
|
+
if db_password:
|
|
139
|
+
print(f"Получен пароль для пользователя {db_user}.")
|
|
140
|
+
else:
|
|
141
|
+
print("Пароль не найден!")
|
|
59
142
|
```
|
|
60
143
|
|
|
61
|
-
|
|
144
|
+
## Комплексный пример
|
|
145
|
+
|
|
146
|
+
Этот пример показывает, как все компоненты `chutils` работают вместе.
|
|
147
|
+
|
|
148
|
+
1. **Файл `config.yml`:**
|
|
62
149
|
```yaml
|
|
63
150
|
API:
|
|
64
151
|
base_url: https://api.example.com
|
|
@@ -67,10 +154,12 @@ pip install -e .
|
|
|
67
154
|
host: localhost
|
|
68
155
|
port: 5432
|
|
69
156
|
user: my_user
|
|
70
|
-
```
|
|
71
157
|
|
|
72
|
-
|
|
158
|
+
Logging:
|
|
159
|
+
log_level: INFO
|
|
160
|
+
```
|
|
73
161
|
|
|
162
|
+
2. **Код `main.py`:**
|
|
74
163
|
```python
|
|
75
164
|
# main.py
|
|
76
165
|
from chutils import get_config_value, setup_logger, SecretManager, ChutilsLogger
|
|
@@ -82,15 +171,17 @@ pip install -e .
|
|
|
82
171
|
secrets = SecretManager("my_awesome_app")
|
|
83
172
|
|
|
84
173
|
def setup_credentials():
|
|
85
|
-
"""Функция для первоначального сохранения
|
|
174
|
+
"""Функция для первоначального сохранения пароля, если его нет."""
|
|
86
175
|
db_user = get_config_value("Database", "user")
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
176
|
+
password_key = f"{db_user}_password"
|
|
177
|
+
|
|
178
|
+
if not secrets.get_secret(password_key):
|
|
179
|
+
logger.info("Пароль для БД не найден. Сохраняем новый...")
|
|
180
|
+
secrets.save_secret(password_key, "MySuperSecretDbPassword123!")
|
|
90
181
|
logger.info("Пароль для БД сохранен в системном хранилище.")
|
|
91
182
|
|
|
92
183
|
def connect_to_db():
|
|
93
|
-
|
|
184
|
+
"""Пример подключения к БД с использованием конфига и секретов."""
|
|
94
185
|
db_host = get_config_value("Database", "host")
|
|
95
186
|
db_user = get_config_value("Database", "user")
|
|
96
187
|
db_password = secrets.get_secret(f"{db_user}_password")
|
|
@@ -99,7 +190,7 @@ pip install -e .
|
|
|
99
190
|
logger.error("Не удалось получить пароль для БД!")
|
|
100
191
|
return
|
|
101
192
|
|
|
102
|
-
logger.info(f"Подключаемся к
|
|
193
|
+
logger.info(f"Подключаемся к {db_host} от имени {db_user}...")
|
|
103
194
|
# ... логика подключения ...
|
|
104
195
|
logger.info("Успешно подключились!")
|
|
105
196
|
|
|
@@ -113,10 +204,7 @@ pip install -e .
|
|
|
113
204
|
main()
|
|
114
205
|
```
|
|
115
206
|
|
|
116
|
-
|
|
117
|
-
надежно сохранен в системном хранилище.
|
|
118
|
-
|
|
119
|
-
## API и Использование
|
|
207
|
+
## API
|
|
120
208
|
|
|
121
209
|
### Работа с конфигурацией (`chutils.config`)
|
|
122
210
|
|
|
@@ -125,8 +213,8 @@ pip install -e .
|
|
|
125
213
|
- `get_config_boolean(section, key, fallback=False)`: Получить булево значение.
|
|
126
214
|
- `get_config_list(section, key, fallback=[])`: Получить список.
|
|
127
215
|
- `get_config_section(section)`: Получить всю секцию как словарь.
|
|
128
|
-
- `save_config_value(section, key, value)`: Сохранить значение.
|
|
129
|
-
|
|
216
|
+
- `save_config_value(section, key, value)`: Сохранить значение. Работает для `.yml` и `.ini`.
|
|
217
|
+
**Важно**: при сохранении в `.yml` комментарии и форматирование будут утеряны. При сохранении в `.ini` - сохраняются.
|
|
130
218
|
|
|
131
219
|
### Настройка логирования (`chutils.logger`)
|
|
132
220
|
|
|
@@ -144,7 +232,7 @@ pip install -e .
|
|
|
144
232
|
### Ручная инициализация (`chutils.init`)
|
|
145
233
|
|
|
146
234
|
В 99% случаев вам это **не понадобится**. Но если автоматика не справилась, вы можете один раз указать путь к проекту
|
|
147
|
-
|
|
235
|
+
вручную в самом начале работы приложения:
|
|
148
236
|
|
|
149
237
|
```python
|
|
150
238
|
import chutils
|
|
@@ -152,26 +240,6 @@ import chutils
|
|
|
152
240
|
chutils.init(base_dir="/path/to/my/project/root")
|
|
153
241
|
```
|
|
154
242
|
|
|
155
|
-
### Пример файла `config.yml`
|
|
156
|
-
|
|
157
|
-
`chutils` использует секцию `Logging` для настройки логгера.
|
|
158
|
-
|
|
159
|
-
```yaml
|
|
160
|
-
API:
|
|
161
|
-
token: your_secret_token_here
|
|
162
|
-
|
|
163
|
-
Database:
|
|
164
|
-
host: localhost
|
|
165
|
-
|
|
166
|
-
Logging:
|
|
167
|
-
# Уровни: DEVDEBUG, DEBUG, MEDIUMDEBUG, INFO, WARNING, ERROR, CRITICAL
|
|
168
|
-
log_level: DEBUG
|
|
169
|
-
# Имя файла для логов
|
|
170
|
-
log_file_name: my_app.log
|
|
171
|
-
# Сколько дней хранить файлы логов
|
|
172
|
-
log_backup_count: 7
|
|
173
|
-
```
|
|
174
|
-
|
|
175
243
|
## Лицензия
|
|
176
244
|
|
|
177
|
-
Проект распространяется под лицензией MIT.
|
|
245
|
+
Проект распространяется под лицензией MIT.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
[tool.poetry]
|
|
2
|
+
name = "chutils"
|
|
3
|
+
version = "2.1.0"
|
|
4
|
+
description = "Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией и логированием в новых проектах."
|
|
5
|
+
authors = ["Sergo <sergeiivanov636@gmail.com>"]
|
|
6
|
+
license = "MIT"
|
|
7
|
+
readme = "README.md"
|
|
8
|
+
packages = [{ include = "chutils", from = "src" }]
|
|
9
|
+
|
|
10
|
+
[tool.poetry.dependencies]
|
|
11
|
+
python = ">=3.9"
|
|
12
|
+
keyring = "^25.6.0"
|
|
13
|
+
pyyaml = "^6.0.3"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
[tool.poetry.group.dev.dependencies]
|
|
17
|
+
pytest = "^8.4.2"
|
|
18
|
+
pytest-mock = "^3.15.1"
|
|
19
|
+
pyfakefs = "^5.10.0"
|
|
20
|
+
mkdocs = "^1.6.1"
|
|
21
|
+
mkdocs-material = "^9.6.22"
|
|
22
|
+
mkdocstrings = {extras = ["python"], version = "^0.30.1"}
|
|
23
|
+
|
|
24
|
+
[build-system]
|
|
25
|
+
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
|
26
|
+
build-backend = "poetry.core.masonry.api"
|
|
27
|
+
|
|
28
|
+
[tool.pytest.ini_options]
|
|
29
|
+
pythonpath = [
|
|
30
|
+
"src"
|
|
31
|
+
]
|