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.
@@ -1,8 +1,9 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: chutils
3
- Version: 2.0.0
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
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/)
24
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
25
+ [![Python](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/)
26
+ [![PyPI version](https://badge.fury.io/py/chutils.svg)](https://badge.fury.io/py/chutils)
23
27
 
24
- Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией, логированием и
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
- - **✨ Ноль конфигурации:** Библиотека **автоматически** находит корень вашего проекта и файл конфигурации (`config.yml`
41
- или `config.ini`).
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. Создайте в корне вашего проекта файл `config.yml`.
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
- my_awesome_app/
76
- ├── main.py
77
- └── config.yml
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
- **Содержимое `config.yml`:**
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
- 2. Используйте `chutils` в вашем коде `main.py`:
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
- if not secrets.get_secret(f"{db_user}_password"):
107
- logger.info("Пароль для БД не найден. Сохраняем новый пароль...")
108
- secrets.save_secret(f"{db_user}_password", "MySuperSecretDbPassword123!")
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
- # 3. Легко получаем значения из конфига и секреты из хранилища.
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"Подключаемся к базе данных по адресу {db_host} от имени {db_user}...")
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
- 3. Запустите ваш скрипт. Вы увидите логи в консоли, а в проекте появится папка `logs` с файлом лога. Пароль от БД будет
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)`: Сохранить значение. **Важно: работает только для `.ini` файлов** для
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
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/)
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
+ [![Python](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/)
5
+ [![PyPI version](https://badge.fury.io/py/chutils.svg)](https://badge.fury.io/py/chutils)
4
6
 
5
- Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией, логированием и
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
- - **✨ Ноль конфигурации:** Библиотека **автоматически** находит корень вашего проекта и файл конфигурации (`config.yml`
22
- или `config.ini`).
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. Создайте в корне вашего проекта файл `config.yml`.
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
- my_awesome_app/
57
- ├── main.py
58
- └── config.yml
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
- **Содержимое `config.yml`:**
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
- 2. Используйте `chutils` в вашем коде `main.py`:
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
- if not secrets.get_secret(f"{db_user}_password"):
88
- logger.info("Пароль для БД не найден. Сохраняем новый пароль...")
89
- secrets.save_secret(f"{db_user}_password", "MySuperSecretDbPassword123!")
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
- # 3. Легко получаем значения из конфига и секреты из хранилища.
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"Подключаемся к базе данных по адресу {db_host} от имени {db_user}...")
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
- 3. Запустите ваш скрипт. Вы увидите логи в консоли, а в проекте появится папка `logs` с файлом лога. Пароль от БД будет
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)`: Сохранить значение. **Важно: работает только для `.ini` файлов** для
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
+ ]