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.
- ergon/__init__.py +13 -0
- ergon/bootstrap/src/__project__/__init__.py +0 -0
- ergon/bootstrap/src/__project__/_observability/docker-compose.telemetry.yml +124 -0
- ergon/bootstrap/src/__project__/_observability/grafana.yaml +17 -0
- ergon/bootstrap/src/__project__/_observability/loki.yaml +48 -0
- ergon/bootstrap/src/__project__/_observability/otel-collector-config.yaml +53 -0
- ergon/bootstrap/src/__project__/_observability/prometheus.yaml +11 -0
- ergon/bootstrap/src/__project__/_observability/tempo.yaml +24 -0
- ergon/bootstrap/src/__project__/connectors/__init__.py +0 -0
- ergon/bootstrap/src/__project__/main.py +9 -0
- ergon/bootstrap/src/__project__/tasks/__init__.py +0 -0
- ergon/bootstrap/src/__project__/tasks/constants.py +13 -0
- ergon/bootstrap/src/__project__/tasks/example_task/__init__.py +0 -0
- ergon/bootstrap/src/__project__/tasks/example_task/config.py +4 -0
- ergon/bootstrap/src/__project__/tasks/example_task/exceptions.py +4 -0
- ergon/bootstrap/src/__project__/tasks/example_task/helpers.py +4 -0
- ergon/bootstrap/src/__project__/tasks/example_task/schemas.py +5 -0
- ergon/bootstrap/src/__project__/tasks/example_task/task.py +1 -0
- ergon/bootstrap/src/__project__/tasks/exceptions.py +0 -0
- ergon/bootstrap/src/__project__/tasks/helpers.py +0 -0
- ergon/bootstrap/src/__project__/tasks/schemas.py +0 -0
- ergon/bootstrap/src/__project__/tasks/settings.py +5 -0
- ergon/cli.py +174 -0
- ergon/connector/__init__.py +64 -0
- ergon/connector/connector.py +97 -0
- ergon/connector/excel/__init__.py +18 -0
- ergon/connector/excel/connector.py +175 -0
- ergon/connector/excel/models.py +24 -0
- ergon/connector/excel/service.py +98 -0
- ergon/connector/pipefy/__init__.py +21 -0
- ergon/connector/pipefy/async_connector.py +48 -0
- ergon/connector/pipefy/async_service.py +907 -0
- ergon/connector/pipefy/connector.py +36 -0
- ergon/connector/pipefy/models.py +48 -0
- ergon/connector/pipefy/service.py +1016 -0
- ergon/connector/pipefy/version.py +1 -0
- ergon/connector/postgres/__init__.py +11 -0
- ergon/connector/postgres/async_connector.py +119 -0
- ergon/connector/postgres/async_service.py +116 -0
- ergon/connector/postgres/models.py +34 -0
- ergon/connector/rabbitmq/__init__.py +25 -0
- ergon/connector/rabbitmq/async_connector.py +120 -0
- ergon/connector/rabbitmq/async_service.py +417 -0
- ergon/connector/rabbitmq/connector.py +54 -0
- ergon/connector/rabbitmq/helper.py +14 -0
- ergon/connector/rabbitmq/models.py +92 -0
- ergon/connector/rabbitmq/service.py +199 -0
- ergon/connector/sqs/__init__.py +15 -0
- ergon/connector/sqs/async_connector.py +120 -0
- ergon/connector/sqs/async_service.py +246 -0
- ergon/connector/sqs/connector.py +120 -0
- ergon/connector/sqs/models.py +36 -0
- ergon/connector/sqs/service.py +219 -0
- ergon/connector/transaction.py +14 -0
- ergon/py.typed +0 -0
- ergon/service/__init__.py +5 -0
- ergon/service/service.py +17 -0
- ergon/task/__init__.py +13 -0
- ergon/task/base.py +222 -0
- ergon/task/exceptions.py +217 -0
- ergon/task/helpers.py +691 -0
- ergon/task/manager.py +85 -0
- ergon/task/mixins/__init__.py +13 -0
- ergon/task/mixins/consumer.py +858 -0
- ergon/task/mixins/metrics.py +457 -0
- ergon/task/mixins/producer.py +486 -0
- ergon/task/policies.py +229 -0
- ergon/task/runner.py +386 -0
- ergon/task/utils.py +64 -0
- ergon/telemetry/__init__.py +7 -0
- ergon/telemetry/_resource.py +13 -0
- ergon/telemetry/logging.py +370 -0
- ergon/telemetry/metrics.py +101 -0
- ergon/telemetry/tracing.py +152 -0
- ergon/utils/__init__.py +5 -0
- ergon/utils/env.py +26 -0
- ergon_framework_python-0.1.0.dist-info/METADATA +449 -0
- ergon_framework_python-0.1.0.dist-info/RECORD +82 -0
- ergon_framework_python-0.1.0.dist-info/WHEEL +5 -0
- ergon_framework_python-0.1.0.dist-info/entry_points.txt +2 -0
- ergon_framework_python-0.1.0.dist-info/licenses/LICENSE +21 -0
- ergon_framework_python-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from ..connector import Connector
|
|
4
|
+
from ..transaction import Transaction
|
|
5
|
+
from .models import PipefyClient
|
|
6
|
+
from .service import PipefyService
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PipefyConnector(Connector):
|
|
10
|
+
service: PipefyService
|
|
11
|
+
|
|
12
|
+
def __init__(self, client: PipefyClient, *args, **kwargs):
|
|
13
|
+
self.service = PipefyService(client)
|
|
14
|
+
|
|
15
|
+
def fetch_transactions(
|
|
16
|
+
self, batch_size: int = 1, phase_id: Optional[str] = None, field_filters=None, **kwargs
|
|
17
|
+
) -> List[Transaction]:
|
|
18
|
+
if not phase_id:
|
|
19
|
+
raise ValueError("PipefyConnector.fetch requires a phase_id")
|
|
20
|
+
|
|
21
|
+
cards = self.service.get_next_card(
|
|
22
|
+
phase_id=phase_id, field_filters=field_filters, batch_size=batch_size, **kwargs
|
|
23
|
+
)
|
|
24
|
+
if not cards:
|
|
25
|
+
return []
|
|
26
|
+
|
|
27
|
+
return [Transaction(id=card.get("id"), payload=card) for card in cards]
|
|
28
|
+
|
|
29
|
+
def dispatch_transactions(self, transactions: List[Transaction], *args, **kwargs):
|
|
30
|
+
for transaction in transactions:
|
|
31
|
+
self.service.create_card(transaction.payload)
|
|
32
|
+
return True
|
|
33
|
+
|
|
34
|
+
def fetch_transaction_by_id(self, transaction_id: str, *args, **kwargs) -> Transaction:
|
|
35
|
+
transaction = self.service.get_card_by_id(transaction_id)
|
|
36
|
+
return Transaction(id=transaction.get("id"), payload=transaction)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Any, List, Optional
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class PipefyClient(BaseModel):
|
|
9
|
+
client_id: str = Field(description="The client ID of the Pipefy API")
|
|
10
|
+
client_secret: str = Field(description="The client secret of the Pipefy API")
|
|
11
|
+
endpoint: str = Field(default="https://api.pipefy.com/graphql", description="The endpoint of the Pipefy API")
|
|
12
|
+
oauth_token_url: str = Field(
|
|
13
|
+
default="https://app.pipefy.com/oauth/token", description="The URL to get the OAuth token"
|
|
14
|
+
)
|
|
15
|
+
timeout_sec: int = Field(default=10, description="The timeout in seconds for the Pipefy API requests")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CreateCardInput(BaseModel):
|
|
19
|
+
pipe_id: str = Field(description="The ID of the pipe to create the card in")
|
|
20
|
+
title: Optional[str] = Field(default=None, description="The title of the card")
|
|
21
|
+
fields_attributes: Optional[List[dict[str, Any]]] = Field(
|
|
22
|
+
default=None, description="Array of inputs to fill card's fields"
|
|
23
|
+
)
|
|
24
|
+
assignee_ids: Optional[List[str]] = Field(default=None, description="The assignee IDs")
|
|
25
|
+
label_ids: Optional[List[str]] = Field(default=None, description="The label IDs")
|
|
26
|
+
parent_ids: Optional[List[str]] = Field(default=None, description="The parent-card IDs")
|
|
27
|
+
phase_id: Optional[str] = Field(default=None, description="The phase ID")
|
|
28
|
+
due_date: Optional[datetime] = Field(default=None, description="The card due date")
|
|
29
|
+
attachments: Optional[List[str]] = Field(default=None, description="The card attachments")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class FieldFilterOperator(Enum):
|
|
33
|
+
EQUAL = "equal"
|
|
34
|
+
NOT_EQUAL = "not_equal"
|
|
35
|
+
GREATER_THAN = "greater_than"
|
|
36
|
+
LESS_THAN = "less_than"
|
|
37
|
+
GREATER_THAN_OR_EQUAL = "greater_than_or_equal"
|
|
38
|
+
LESS_THAN_OR_EQUAL = "less_than_or_equal"
|
|
39
|
+
CONTAINS = "contains"
|
|
40
|
+
NOT_CONTAINS = "not_contains"
|
|
41
|
+
STARTS_WITH = "starts_with"
|
|
42
|
+
ENDS_WITH = "ends_with"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class FieldFilter(BaseModel):
|
|
46
|
+
field: str
|
|
47
|
+
operator: FieldFilterOperator
|
|
48
|
+
value: Any
|