EOF-413-LH 1.0.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.
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.4
2
+ Name: EOF_413_LH
3
+ Version: 1.0.0
4
+ Summary: HTTP-клиент с логированием на основе LLS
5
+ Home-page: https://github.com/EOF-413/LibraryHttp
6
+ Author: EOF-413
7
+ Author-email: org.animea@mail.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.6
10
+ Classifier: Programming Language :: Python :: 3.7
11
+ Classifier: Programming Language :: Python :: 3.8
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Requires-Python: >=3.6
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: EOF_413_LLS>=1.1.0
22
+ Dynamic: author
23
+ Dynamic: author-email
24
+ Dynamic: classifier
25
+ Dynamic: description
26
+ Dynamic: description-content-type
27
+ Dynamic: home-page
28
+ Dynamic: license-file
29
+ Dynamic: requires-dist
30
+ Dynamic: requires-python
31
+ Dynamic: summary
32
+
33
+ # LibraryHttp (LH)
34
+
35
+ **LH** - это универсальная библиотека для выполнения HTTP запросов с поддержкой повторных попыток и логирования.
36
+
37
+ ## Особенности
38
+
39
+ - Поддержка GET запросов
40
+ - Поддержка скачивания файлов
41
+ - Автоматические повторные попытки при ошибках
42
+ - Прогресс-бар для скачивания
43
+ - Интеграция с LibraryLogSystem (LLS)
44
+ - Настраиваемый User-Agent
45
+ - Настраиваемые таймауты и задержки
46
+
47
+ ## Установка
48
+
49
+ ```python
50
+ from modules import Http
51
+ ```
52
+
53
+ ## Использование
54
+
55
+ ### GET запрос
56
+
57
+ ```python
58
+ from modules import Http
59
+ ```
60
+
61
+ # Простой GET запрос
62
+
63
+ ```python
64
+ response = Http.get('https://api.example.com/data')
65
+ ```
66
+
67
+ # GET запрос с таймаутом
68
+
69
+ ```python
70
+ response = Http.get('https://api.example.com/data', timeout=10)
71
+ ```
72
+
73
+ # GET запрос с JSON
74
+
75
+ ```python
76
+ data = Http.get_json('https://api.example.com/data')
77
+ ```
78
+
79
+ ### Скачивание файлов
80
+
81
+ ```python
82
+ from modules import Http
83
+ ```
84
+
85
+ # Скачивание с прогрессом
86
+
87
+ ```python
88
+ def progress(percent):
89
+ print(f"Загружено: {percent}%")
90
+
91
+ Http.download(
92
+ 'https://example.com/file.zip',
93
+ 'downloads/file.zip',
94
+ progress_callback=progress
95
+ )
96
+ ```
97
+
98
+ # Скачивание без прогресса
99
+
100
+ ```python
101
+ Http.download('https://example.com/file.zip', 'downloads/file.zip')
102
+ ```
103
+
104
+ ### Настройка параметров
105
+
106
+ # GET запрос с кастомными параметрами
107
+
108
+ ```python
109
+ response = Http.get(
110
+ url='https://api.example.com/data',
111
+ timeout=30,
112
+ attempts=5,
113
+ backoff=2.0
114
+ )
115
+ ```
116
+
117
+ ## API
118
+
119
+ ### Http.get()
120
+
121
+ ```python
122
+ Http.get(url, timeout=15, attempts=3, backoff=1.5)
123
+ ```
124
+
125
+ Выполняет GET запрос.
126
+
127
+ Параметры:
128
+
129
+ ```python
130
+ - url (str): URL запроса
131
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
132
+ - attempts (int): Количество попыток (по умолчанию: 3)
133
+ - backoff (float): Множитель задержки между попытками (по умолчанию: 1.5)
134
+ ```
135
+
136
+ Возвращает:
137
+
138
+ ```python
139
+ - bytes: Содержимое ответа
140
+ ```
141
+
142
+ Исключения:
143
+
144
+ ```sql
145
+ - urllib.error.HTTPError: Ошибка HTTP
146
+ - urllib.error.URLError: Ошибка сети
147
+ ```
148
+
149
+ ### Http.get_json()
150
+
151
+ ```python
152
+ Http.get_json(url, timeout=15)
153
+ ```
154
+
155
+ Выполняет GET запрос и возвращает JSON.
156
+
157
+ Параметры:
158
+
159
+ ```python
160
+ - url (str): URL запроса
161
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
162
+ ```
163
+
164
+ Возвращает:
165
+
166
+ ```python
167
+ - dict/list: Парсенный JSON
168
+ ```
169
+
170
+ ### Http.download()
171
+
172
+ ```python
173
+ Http.download(url, dest_path, progress_callback=None, timeout=15, attempts=3, backoff=1.5)
174
+ ```
175
+
176
+ Скачивает файл по URL.
177
+
178
+ Параметры:
179
+
180
+ ```python
181
+ - url (str): URL файла
182
+ - dest_path (str): Путь для сохранения
183
+ - progress_callback (callable): Функция для отслеживания прогресса (получает процент)
184
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
185
+ - attempts (int): Количество попыток (по умолчанию: 3)
186
+ - backoff (float): Множитель задержки между попытками (по умолчанию: 1.5)
187
+ ```
188
+
189
+ ## Логирование
190
+
191
+ Библиотека автоматически логирует все запросы и ошибки через LLS:
192
+
193
+ ```log
194
+ [25.07.2026 21:59:18] [DEBUG] [client.py] [get] [25] -> Попытка 1/3 не удалась для https://api.example.com: Connection refused. Повтор через 1.5 с.
195
+ [25.07.2026 21:59:18] [INFO] [client.py] [get] [30] -> Запрос выполнен успешно
196
+ ```
197
+
198
+ ## Зависимости
199
+ [LibraryLogSystem (LLS)](https://github.com/EOF-413/LibraryLogSystem)
200
+
@@ -0,0 +1,10 @@
1
+ LICENSE
2
+ README.md
3
+ setup.py
4
+ EOF_413_LH.egg-info/PKG-INFO
5
+ EOF_413_LH.egg-info/SOURCES.txt
6
+ EOF_413_LH.egg-info/dependency_links.txt
7
+ EOF_413_LH.egg-info/requires.txt
8
+ EOF_413_LH.egg-info/top_level.txt
9
+ LH/__init__.py
10
+ LH/client.py
@@ -0,0 +1 @@
1
+ EOF_413_LLS>=1.1.0
@@ -0,0 +1,5 @@
1
+ from .client import Http
2
+
3
+ __all__ = [
4
+ 'Http'
5
+ ]
@@ -0,0 +1,75 @@
1
+ import time
2
+ import json
3
+ import urllib.request
4
+ import urllib.error
5
+
6
+ from LLS import log_init
7
+
8
+ log = log_init('modules/http')
9
+
10
+ USER_AGENT = 'AMT-BotManager/1.0'
11
+
12
+ DEFAULT_TIMEOUT = 15
13
+ DEFAULT_ATTEMPTS = 3
14
+ DEFAULT_BACKOFF = 1.5
15
+
16
+
17
+ class Http:
18
+ @staticmethod
19
+ def get(url, timeout=DEFAULT_TIMEOUT, attempts=DEFAULT_ATTEMPTS, backoff=DEFAULT_BACKOFF):
20
+ request = urllib.request.Request(url, headers={'User-Agent': USER_AGENT})
21
+ last_error = None
22
+
23
+ for attempt in range(1, attempts + 1):
24
+ try:
25
+ with urllib.request.urlopen(request, timeout=timeout) as response:
26
+ return response.read()
27
+ except urllib.error.HTTPError:
28
+ raise
29
+ except (urllib.error.URLError, ConnectionError, OSError) as e:
30
+ last_error = e
31
+ if attempt < attempts:
32
+ log.debug(f"Попытка {attempt}/{attempts} не удалась для {url}: {e}. Повтор через {backoff * attempt:.1f} с.")
33
+ time.sleep(backoff * attempt)
34
+ continue
35
+
36
+ raise urllib.error.URLError(last_error)
37
+
38
+ @staticmethod
39
+ def get_json(url, timeout=DEFAULT_TIMEOUT):
40
+ raw = Http.get(url, timeout=timeout)
41
+ return json.loads(raw.decode('utf-8'))
42
+
43
+ @staticmethod
44
+ def download(url, dest_path, progress_callback=None, timeout=DEFAULT_TIMEOUT, attempts=DEFAULT_ATTEMPTS, backoff=DEFAULT_BACKOFF):
45
+ request = urllib.request.Request(url, headers={'User-Agent': USER_AGENT})
46
+ last_error = None
47
+
48
+ for attempt in range(1, attempts + 1):
49
+ try:
50
+ with urllib.request.urlopen(request, timeout=timeout) as response:
51
+ total_size = int(response.headers.get('Content-Length', 0) or 0)
52
+ downloaded = 0
53
+ with open(dest_path, 'wb') as f:
54
+ while True:
55
+ chunk = response.read(65536)
56
+ if not chunk:
57
+ break
58
+ f.write(chunk)
59
+ downloaded += len(chunk)
60
+ if progress_callback is not None:
61
+ if total_size > 0:
62
+ progress_callback(min(100, int(downloaded * 100 / total_size)))
63
+ else:
64
+ progress_callback(-1)
65
+ return
66
+ except urllib.error.HTTPError:
67
+ raise
68
+ except (urllib.error.URLError, ConnectionError, OSError) as e:
69
+ last_error = e
70
+ if attempt < attempts:
71
+ log.debug(f"Попытка {attempt}/{attempts} скачивания не удалась для {url}: {e}. Повтор через {backoff * attempt:.1f} с.")
72
+ time.sleep(backoff * attempt)
73
+ continue
74
+
75
+ raise urllib.error.URLError(last_error)
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 EOF-413
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.4
2
+ Name: EOF_413_LH
3
+ Version: 1.0.0
4
+ Summary: HTTP-клиент с логированием на основе LLS
5
+ Home-page: https://github.com/EOF-413/LibraryHttp
6
+ Author: EOF-413
7
+ Author-email: org.animea@mail.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.6
10
+ Classifier: Programming Language :: Python :: 3.7
11
+ Classifier: Programming Language :: Python :: 3.8
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Requires-Python: >=3.6
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: EOF_413_LLS>=1.1.0
22
+ Dynamic: author
23
+ Dynamic: author-email
24
+ Dynamic: classifier
25
+ Dynamic: description
26
+ Dynamic: description-content-type
27
+ Dynamic: home-page
28
+ Dynamic: license-file
29
+ Dynamic: requires-dist
30
+ Dynamic: requires-python
31
+ Dynamic: summary
32
+
33
+ # LibraryHttp (LH)
34
+
35
+ **LH** - это универсальная библиотека для выполнения HTTP запросов с поддержкой повторных попыток и логирования.
36
+
37
+ ## Особенности
38
+
39
+ - Поддержка GET запросов
40
+ - Поддержка скачивания файлов
41
+ - Автоматические повторные попытки при ошибках
42
+ - Прогресс-бар для скачивания
43
+ - Интеграция с LibraryLogSystem (LLS)
44
+ - Настраиваемый User-Agent
45
+ - Настраиваемые таймауты и задержки
46
+
47
+ ## Установка
48
+
49
+ ```python
50
+ from modules import Http
51
+ ```
52
+
53
+ ## Использование
54
+
55
+ ### GET запрос
56
+
57
+ ```python
58
+ from modules import Http
59
+ ```
60
+
61
+ # Простой GET запрос
62
+
63
+ ```python
64
+ response = Http.get('https://api.example.com/data')
65
+ ```
66
+
67
+ # GET запрос с таймаутом
68
+
69
+ ```python
70
+ response = Http.get('https://api.example.com/data', timeout=10)
71
+ ```
72
+
73
+ # GET запрос с JSON
74
+
75
+ ```python
76
+ data = Http.get_json('https://api.example.com/data')
77
+ ```
78
+
79
+ ### Скачивание файлов
80
+
81
+ ```python
82
+ from modules import Http
83
+ ```
84
+
85
+ # Скачивание с прогрессом
86
+
87
+ ```python
88
+ def progress(percent):
89
+ print(f"Загружено: {percent}%")
90
+
91
+ Http.download(
92
+ 'https://example.com/file.zip',
93
+ 'downloads/file.zip',
94
+ progress_callback=progress
95
+ )
96
+ ```
97
+
98
+ # Скачивание без прогресса
99
+
100
+ ```python
101
+ Http.download('https://example.com/file.zip', 'downloads/file.zip')
102
+ ```
103
+
104
+ ### Настройка параметров
105
+
106
+ # GET запрос с кастомными параметрами
107
+
108
+ ```python
109
+ response = Http.get(
110
+ url='https://api.example.com/data',
111
+ timeout=30,
112
+ attempts=5,
113
+ backoff=2.0
114
+ )
115
+ ```
116
+
117
+ ## API
118
+
119
+ ### Http.get()
120
+
121
+ ```python
122
+ Http.get(url, timeout=15, attempts=3, backoff=1.5)
123
+ ```
124
+
125
+ Выполняет GET запрос.
126
+
127
+ Параметры:
128
+
129
+ ```python
130
+ - url (str): URL запроса
131
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
132
+ - attempts (int): Количество попыток (по умолчанию: 3)
133
+ - backoff (float): Множитель задержки между попытками (по умолчанию: 1.5)
134
+ ```
135
+
136
+ Возвращает:
137
+
138
+ ```python
139
+ - bytes: Содержимое ответа
140
+ ```
141
+
142
+ Исключения:
143
+
144
+ ```sql
145
+ - urllib.error.HTTPError: Ошибка HTTP
146
+ - urllib.error.URLError: Ошибка сети
147
+ ```
148
+
149
+ ### Http.get_json()
150
+
151
+ ```python
152
+ Http.get_json(url, timeout=15)
153
+ ```
154
+
155
+ Выполняет GET запрос и возвращает JSON.
156
+
157
+ Параметры:
158
+
159
+ ```python
160
+ - url (str): URL запроса
161
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
162
+ ```
163
+
164
+ Возвращает:
165
+
166
+ ```python
167
+ - dict/list: Парсенный JSON
168
+ ```
169
+
170
+ ### Http.download()
171
+
172
+ ```python
173
+ Http.download(url, dest_path, progress_callback=None, timeout=15, attempts=3, backoff=1.5)
174
+ ```
175
+
176
+ Скачивает файл по URL.
177
+
178
+ Параметры:
179
+
180
+ ```python
181
+ - url (str): URL файла
182
+ - dest_path (str): Путь для сохранения
183
+ - progress_callback (callable): Функция для отслеживания прогресса (получает процент)
184
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
185
+ - attempts (int): Количество попыток (по умолчанию: 3)
186
+ - backoff (float): Множитель задержки между попытками (по умолчанию: 1.5)
187
+ ```
188
+
189
+ ## Логирование
190
+
191
+ Библиотека автоматически логирует все запросы и ошибки через LLS:
192
+
193
+ ```log
194
+ [25.07.2026 21:59:18] [DEBUG] [client.py] [get] [25] -> Попытка 1/3 не удалась для https://api.example.com: Connection refused. Повтор через 1.5 с.
195
+ [25.07.2026 21:59:18] [INFO] [client.py] [get] [30] -> Запрос выполнен успешно
196
+ ```
197
+
198
+ ## Зависимости
199
+ [LibraryLogSystem (LLS)](https://github.com/EOF-413/LibraryLogSystem)
200
+
@@ -0,0 +1,168 @@
1
+ # LibraryHttp (LH)
2
+
3
+ **LH** - это универсальная библиотека для выполнения HTTP запросов с поддержкой повторных попыток и логирования.
4
+
5
+ ## Особенности
6
+
7
+ - Поддержка GET запросов
8
+ - Поддержка скачивания файлов
9
+ - Автоматические повторные попытки при ошибках
10
+ - Прогресс-бар для скачивания
11
+ - Интеграция с LibraryLogSystem (LLS)
12
+ - Настраиваемый User-Agent
13
+ - Настраиваемые таймауты и задержки
14
+
15
+ ## Установка
16
+
17
+ ```python
18
+ from modules import Http
19
+ ```
20
+
21
+ ## Использование
22
+
23
+ ### GET запрос
24
+
25
+ ```python
26
+ from modules import Http
27
+ ```
28
+
29
+ # Простой GET запрос
30
+
31
+ ```python
32
+ response = Http.get('https://api.example.com/data')
33
+ ```
34
+
35
+ # GET запрос с таймаутом
36
+
37
+ ```python
38
+ response = Http.get('https://api.example.com/data', timeout=10)
39
+ ```
40
+
41
+ # GET запрос с JSON
42
+
43
+ ```python
44
+ data = Http.get_json('https://api.example.com/data')
45
+ ```
46
+
47
+ ### Скачивание файлов
48
+
49
+ ```python
50
+ from modules import Http
51
+ ```
52
+
53
+ # Скачивание с прогрессом
54
+
55
+ ```python
56
+ def progress(percent):
57
+ print(f"Загружено: {percent}%")
58
+
59
+ Http.download(
60
+ 'https://example.com/file.zip',
61
+ 'downloads/file.zip',
62
+ progress_callback=progress
63
+ )
64
+ ```
65
+
66
+ # Скачивание без прогресса
67
+
68
+ ```python
69
+ Http.download('https://example.com/file.zip', 'downloads/file.zip')
70
+ ```
71
+
72
+ ### Настройка параметров
73
+
74
+ # GET запрос с кастомными параметрами
75
+
76
+ ```python
77
+ response = Http.get(
78
+ url='https://api.example.com/data',
79
+ timeout=30,
80
+ attempts=5,
81
+ backoff=2.0
82
+ )
83
+ ```
84
+
85
+ ## API
86
+
87
+ ### Http.get()
88
+
89
+ ```python
90
+ Http.get(url, timeout=15, attempts=3, backoff=1.5)
91
+ ```
92
+
93
+ Выполняет GET запрос.
94
+
95
+ Параметры:
96
+
97
+ ```python
98
+ - url (str): URL запроса
99
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
100
+ - attempts (int): Количество попыток (по умолчанию: 3)
101
+ - backoff (float): Множитель задержки между попытками (по умолчанию: 1.5)
102
+ ```
103
+
104
+ Возвращает:
105
+
106
+ ```python
107
+ - bytes: Содержимое ответа
108
+ ```
109
+
110
+ Исключения:
111
+
112
+ ```sql
113
+ - urllib.error.HTTPError: Ошибка HTTP
114
+ - urllib.error.URLError: Ошибка сети
115
+ ```
116
+
117
+ ### Http.get_json()
118
+
119
+ ```python
120
+ Http.get_json(url, timeout=15)
121
+ ```
122
+
123
+ Выполняет GET запрос и возвращает JSON.
124
+
125
+ Параметры:
126
+
127
+ ```python
128
+ - url (str): URL запроса
129
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
130
+ ```
131
+
132
+ Возвращает:
133
+
134
+ ```python
135
+ - dict/list: Парсенный JSON
136
+ ```
137
+
138
+ ### Http.download()
139
+
140
+ ```python
141
+ Http.download(url, dest_path, progress_callback=None, timeout=15, attempts=3, backoff=1.5)
142
+ ```
143
+
144
+ Скачивает файл по URL.
145
+
146
+ Параметры:
147
+
148
+ ```python
149
+ - url (str): URL файла
150
+ - dest_path (str): Путь для сохранения
151
+ - progress_callback (callable): Функция для отслеживания прогресса (получает процент)
152
+ - timeout (int): Таймаут в секундах (по умолчанию: 15)
153
+ - attempts (int): Количество попыток (по умолчанию: 3)
154
+ - backoff (float): Множитель задержки между попытками (по умолчанию: 1.5)
155
+ ```
156
+
157
+ ## Логирование
158
+
159
+ Библиотека автоматически логирует все запросы и ошибки через LLS:
160
+
161
+ ```log
162
+ [25.07.2026 21:59:18] [DEBUG] [client.py] [get] [25] -> Попытка 1/3 не удалась для https://api.example.com: Connection refused. Повтор через 1.5 с.
163
+ [25.07.2026 21:59:18] [INFO] [client.py] [get] [30] -> Запрос выполнен успешно
164
+ ```
165
+
166
+ ## Зависимости
167
+ [LibraryLogSystem (LLS)](https://github.com/EOF-413/LibraryLogSystem)
168
+
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,32 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ with open('README.md', encoding='utf-8') as f:
4
+ long_description = f.read()
5
+
6
+ setup(
7
+ name='EOF_413_LH',
8
+ version='1.0.0',
9
+ author='EOF-413',
10
+ author_email='org.animea@mail.com',
11
+ description='HTTP-клиент с логированием на основе LLS',
12
+ long_description=long_description,
13
+ long_description_content_type='text/markdown',
14
+ url='https://github.com/EOF-413/LibraryHttp',
15
+ packages=find_packages(),
16
+ classifiers=[
17
+ 'Programming Language :: Python :: 3',
18
+ 'Programming Language :: Python :: 3.6',
19
+ 'Programming Language :: Python :: 3.7',
20
+ 'Programming Language :: Python :: 3.8',
21
+ 'Programming Language :: Python :: 3.9',
22
+ 'Programming Language :: Python :: 3.10',
23
+ 'Programming Language :: Python :: 3.11',
24
+ 'Operating System :: OS Independent',
25
+ 'Intended Audience :: Developers',
26
+ 'Topic :: Software Development :: Libraries :: Python Modules',
27
+ ],
28
+ python_requires='>=3.6',
29
+ install_requires=[
30
+ 'EOF_413_LLS>=1.1.0',
31
+ ],
32
+ )