utg-base 1.6.1__tar.gz → 1.7.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.
- {utg_base-1.6.1 → utg_base-1.7.0}/PKG-INFO +3 -3
- {utg_base-1.6.1 → utg_base-1.7.0}/pyproject.toml +2 -2
- utg_base-1.7.0/src/utg_base/utils/thread.py +67 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/README.md +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/base.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/pagination.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/permissions.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/routers.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/serializers.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/spectacular.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/api/views.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/authentications/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/authentications/microservice_authentication.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/authentications/models.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/apps.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/filters/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/filters/task_result.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/management/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/management/commands/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/management/commands/migrate_tasks.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/serializers/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/serializers/periodic_task.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/serializers/task_result.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/urls.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/views/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/views/periodic_task.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/celery/views/task_result.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/constants/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/constants/available_languages.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/env.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/logging.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/middleware/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/middleware/debug.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/middleware/locale.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/models/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/models/jwt_user.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/models/timestamp.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/references_api/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/references_api/admin.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/references_api/apps.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/references_api/migrations/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/references_api/models.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/references_api/urls.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/references_api/utils.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/services/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/services/base_api.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/utils/__init__.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/utils/data.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/utils/date.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/utils/dict_util.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/utils/response_processors.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/utils/sql.py +0 -0
- {utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/utils/translation.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: utg-base
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.0
|
|
4
4
|
Summary: UTG Base Package
|
|
5
|
-
Author:
|
|
6
|
-
Author-email:
|
|
5
|
+
Author: Olimboy
|
|
6
|
+
Author-email: shavkatov.olimboy@mail.ru
|
|
7
7
|
Requires-Python: >=3.14,<4.0
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
9
|
Requires-Dist: celery (>=5.5.3,<6.0.0)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "utg-base"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.7.0"
|
|
4
4
|
description = "UTG Base Package"
|
|
5
|
-
authors = ["Rovshen <rovshenashirov1619@gmail.com>"]
|
|
5
|
+
authors = ["Olimboy <shavkatov.olimboy@mail.ru>", "Rovshen <rovshenashirov1619@gmail.com>"]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
|
|
8
8
|
[tool.poetry.dependencies]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import multiprocessing
|
|
2
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
3
|
+
from typing import Callable, Any, Iterable, Tuple, Dict, Union
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ThreadPoolException(Exception):
|
|
7
|
+
"""Exception to wrap the error in each task."""
|
|
8
|
+
|
|
9
|
+
def __init__(self, func: str, exception: Exception):
|
|
10
|
+
self.func = func
|
|
11
|
+
self.exception = exception
|
|
12
|
+
super().__init__(f"Exception in {func}: {exception}")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def parallel_execute(
|
|
16
|
+
*tasks: Union[
|
|
17
|
+
Callable, # func
|
|
18
|
+
Tuple[Callable, Iterable], # (func, args)
|
|
19
|
+
Tuple[Callable, Iterable, Dict[str, Any]] # (func, args, kwargs)
|
|
20
|
+
],
|
|
21
|
+
max_workers: int = None
|
|
22
|
+
) -> list[Any]:
|
|
23
|
+
"""
|
|
24
|
+
Executes multiple functions in parallel.
|
|
25
|
+
Each can be without arguments or with args/kwargs.
|
|
26
|
+
|
|
27
|
+
Example:
|
|
28
|
+
parallel_execute(func1, func2)
|
|
29
|
+
parallel_execute((func1, (1, 2)), (func2, (), {"x": 5}))
|
|
30
|
+
|
|
31
|
+
The sequence is preserved.
|
|
32
|
+
|
|
33
|
+
:return: Result list or ThreadPoolException objects
|
|
34
|
+
"""
|
|
35
|
+
if not tasks:
|
|
36
|
+
return []
|
|
37
|
+
|
|
38
|
+
cpu_count = multiprocessing.cpu_count()
|
|
39
|
+
max_workers = max_workers or min(cpu_count * 10, len(tasks))
|
|
40
|
+
results = [None] * len(tasks)
|
|
41
|
+
|
|
42
|
+
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
|
43
|
+
futures = {}
|
|
44
|
+
|
|
45
|
+
for i, task in enumerate(tasks):
|
|
46
|
+
# Task unpacking
|
|
47
|
+
if callable(task):
|
|
48
|
+
func, args, kwargs = task, (), {}
|
|
49
|
+
elif isinstance(task, tuple):
|
|
50
|
+
func = task[0]
|
|
51
|
+
args = task[1] if len(task) > 1 else ()
|
|
52
|
+
kwargs = task[2] if len(task) > 2 else {}
|
|
53
|
+
else:
|
|
54
|
+
raise ValueError(f"Invalid task format: {task}")
|
|
55
|
+
|
|
56
|
+
futures[executor.submit(func, *args, **kwargs)] = i
|
|
57
|
+
|
|
58
|
+
for future in as_completed(futures):
|
|
59
|
+
idx = futures[future]
|
|
60
|
+
func = tasks[idx][0] if isinstance(tasks[idx], tuple) else tasks[idx]
|
|
61
|
+
func_name = getattr(func, "__name__", str(func))
|
|
62
|
+
try:
|
|
63
|
+
results[idx] = future.result()
|
|
64
|
+
except Exception as e:
|
|
65
|
+
results[idx] = ThreadPoolException(func=func_name, exception=e)
|
|
66
|
+
|
|
67
|
+
return results
|
|
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
|
{utg_base-1.6.1 → utg_base-1.7.0}/src/utg_base/authentications/microservice_authentication.py
RENAMED
|
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
|
|
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
|