ergon-framework-python 0.1.0__py3-none-any.whl

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.
Files changed (82) hide show
  1. ergon/__init__.py +13 -0
  2. ergon/bootstrap/src/__project__/__init__.py +0 -0
  3. ergon/bootstrap/src/__project__/_observability/docker-compose.telemetry.yml +124 -0
  4. ergon/bootstrap/src/__project__/_observability/grafana.yaml +17 -0
  5. ergon/bootstrap/src/__project__/_observability/loki.yaml +48 -0
  6. ergon/bootstrap/src/__project__/_observability/otel-collector-config.yaml +53 -0
  7. ergon/bootstrap/src/__project__/_observability/prometheus.yaml +11 -0
  8. ergon/bootstrap/src/__project__/_observability/tempo.yaml +24 -0
  9. ergon/bootstrap/src/__project__/connectors/__init__.py +0 -0
  10. ergon/bootstrap/src/__project__/main.py +9 -0
  11. ergon/bootstrap/src/__project__/tasks/__init__.py +0 -0
  12. ergon/bootstrap/src/__project__/tasks/constants.py +13 -0
  13. ergon/bootstrap/src/__project__/tasks/example_task/__init__.py +0 -0
  14. ergon/bootstrap/src/__project__/tasks/example_task/config.py +4 -0
  15. ergon/bootstrap/src/__project__/tasks/example_task/exceptions.py +4 -0
  16. ergon/bootstrap/src/__project__/tasks/example_task/helpers.py +4 -0
  17. ergon/bootstrap/src/__project__/tasks/example_task/schemas.py +5 -0
  18. ergon/bootstrap/src/__project__/tasks/example_task/task.py +1 -0
  19. ergon/bootstrap/src/__project__/tasks/exceptions.py +0 -0
  20. ergon/bootstrap/src/__project__/tasks/helpers.py +0 -0
  21. ergon/bootstrap/src/__project__/tasks/schemas.py +0 -0
  22. ergon/bootstrap/src/__project__/tasks/settings.py +5 -0
  23. ergon/cli.py +174 -0
  24. ergon/connector/__init__.py +64 -0
  25. ergon/connector/connector.py +97 -0
  26. ergon/connector/excel/__init__.py +18 -0
  27. ergon/connector/excel/connector.py +175 -0
  28. ergon/connector/excel/models.py +24 -0
  29. ergon/connector/excel/service.py +98 -0
  30. ergon/connector/pipefy/__init__.py +21 -0
  31. ergon/connector/pipefy/async_connector.py +48 -0
  32. ergon/connector/pipefy/async_service.py +907 -0
  33. ergon/connector/pipefy/connector.py +36 -0
  34. ergon/connector/pipefy/models.py +48 -0
  35. ergon/connector/pipefy/service.py +1016 -0
  36. ergon/connector/pipefy/version.py +1 -0
  37. ergon/connector/postgres/__init__.py +11 -0
  38. ergon/connector/postgres/async_connector.py +119 -0
  39. ergon/connector/postgres/async_service.py +116 -0
  40. ergon/connector/postgres/models.py +34 -0
  41. ergon/connector/rabbitmq/__init__.py +25 -0
  42. ergon/connector/rabbitmq/async_connector.py +120 -0
  43. ergon/connector/rabbitmq/async_service.py +417 -0
  44. ergon/connector/rabbitmq/connector.py +54 -0
  45. ergon/connector/rabbitmq/helper.py +14 -0
  46. ergon/connector/rabbitmq/models.py +92 -0
  47. ergon/connector/rabbitmq/service.py +199 -0
  48. ergon/connector/sqs/__init__.py +15 -0
  49. ergon/connector/sqs/async_connector.py +120 -0
  50. ergon/connector/sqs/async_service.py +246 -0
  51. ergon/connector/sqs/connector.py +120 -0
  52. ergon/connector/sqs/models.py +36 -0
  53. ergon/connector/sqs/service.py +219 -0
  54. ergon/connector/transaction.py +14 -0
  55. ergon/py.typed +0 -0
  56. ergon/service/__init__.py +5 -0
  57. ergon/service/service.py +17 -0
  58. ergon/task/__init__.py +13 -0
  59. ergon/task/base.py +222 -0
  60. ergon/task/exceptions.py +217 -0
  61. ergon/task/helpers.py +691 -0
  62. ergon/task/manager.py +85 -0
  63. ergon/task/mixins/__init__.py +13 -0
  64. ergon/task/mixins/consumer.py +858 -0
  65. ergon/task/mixins/metrics.py +457 -0
  66. ergon/task/mixins/producer.py +486 -0
  67. ergon/task/policies.py +229 -0
  68. ergon/task/runner.py +386 -0
  69. ergon/task/utils.py +64 -0
  70. ergon/telemetry/__init__.py +7 -0
  71. ergon/telemetry/_resource.py +13 -0
  72. ergon/telemetry/logging.py +370 -0
  73. ergon/telemetry/metrics.py +101 -0
  74. ergon/telemetry/tracing.py +152 -0
  75. ergon/utils/__init__.py +5 -0
  76. ergon/utils/env.py +26 -0
  77. ergon_framework_python-0.1.0.dist-info/METADATA +449 -0
  78. ergon_framework_python-0.1.0.dist-info/RECORD +82 -0
  79. ergon_framework_python-0.1.0.dist-info/WHEEL +5 -0
  80. ergon_framework_python-0.1.0.dist-info/entry_points.txt +2 -0
  81. ergon_framework_python-0.1.0.dist-info/licenses/LICENSE +21 -0
  82. ergon_framework_python-0.1.0.dist-info/top_level.txt +1 -0
ergon/task/manager.py ADDED
@@ -0,0 +1,85 @@
1
+ import logging
2
+ import sys
3
+ from typing import Dict, List
4
+
5
+ from ..connector import Transaction
6
+ from .base import BaseAsyncTask, BaseTask, TaskConfig
7
+ from .runner import run_task
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ class TaskManager:
13
+ """
14
+ Global registry and orchestrator for Ergon tasks.
15
+ Supports both synchronous (BaseTask) and asynchronous (BaseAsyncTask).
16
+ """
17
+
18
+ def __init__(self):
19
+ self._registry: Dict[str, TaskConfig] = {}
20
+
21
+ # -------------------------------------------------------------
22
+ # REGISTER TASK
23
+ # -------------------------------------------------------------
24
+ def register(self, config: TaskConfig) -> None:
25
+ """
26
+ Register a task by its name inside TaskConfig.
27
+ """
28
+
29
+ # Validate task inheritance
30
+ if not issubclass(config.task, (BaseTask, BaseAsyncTask)): # type: ignore[arg-type]
31
+ raise TypeError(f"Task '{config.name}' must inherit from BaseTask or BaseAsyncTask. Got: {config.task}")
32
+
33
+ # Duplicate check
34
+ if config.name in self._registry:
35
+ logger.warning(f"Task name '{config.name}' already registered.")
36
+
37
+ self._registry[config.name] = config
38
+
39
+ # -------------------------------------------------------------
40
+ # RUN TASK BY NAME
41
+ # -------------------------------------------------------------
42
+ def run(self, name: str, debug: bool = False, *args, **kwargs) -> None:
43
+ if name not in self._registry:
44
+ raise ValueError(f"Task '{name}' is not registered.")
45
+
46
+ config = self._registry[name]
47
+ sys.exit(run_task(config=config, debug=debug, mode="task", *args, **kwargs))
48
+
49
+ def process_transaction(self, task: str, policy: str, transaction: Transaction, *args, **kwargs):
50
+ if task not in self._registry:
51
+ raise ValueError(f"Task '{task}' is not registered.")
52
+ config = self._registry[task]
53
+ sys.exit(
54
+ run_task(
55
+ config=config, debug=True, mode="transaction", transaction=transaction, policy=policy, *args, **kwargs
56
+ )
57
+ )
58
+
59
+ def process_transaction_by_id(self, task: str, policy: str, transaction_id: str, *args, **kwargs) -> None:
60
+ if task not in self._registry:
61
+ raise ValueError(f"Task '{task}' is not registered.")
62
+ config = self._registry[task]
63
+ sys.exit(
64
+ run_task(
65
+ config=config,
66
+ debug=True,
67
+ mode="transaction",
68
+ transaction_id=transaction_id,
69
+ policy=policy,
70
+ *args,
71
+ **kwargs,
72
+ )
73
+ )
74
+
75
+ # -------------------------------------------------------------
76
+ # LIST / GET
77
+ # -------------------------------------------------------------
78
+ def list_tasks(self) -> List[str]:
79
+ return list(self._registry.keys())
80
+
81
+ def get(self, name: str) -> TaskConfig | None:
82
+ return self._registry.get(name)
83
+
84
+
85
+ manager = TaskManager()
@@ -0,0 +1,13 @@
1
+ from . import metrics
2
+ from .consumer import AsyncConsumerTask, AsyncHybridTask, ConsumerTask, HybridTask
3
+ from .producer import AsyncProducerTask, ProducerTask
4
+
5
+ __all__ = [
6
+ "ConsumerTask",
7
+ "ProducerTask",
8
+ "AsyncConsumerTask",
9
+ "AsyncProducerTask",
10
+ "HybridTask",
11
+ "AsyncHybridTask",
12
+ "metrics",
13
+ ]