dotflow 0.15.0.dev4__py3-none-any.whl → 0.15.0.dev6__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.
dotflow/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Dotflow __init__ module."""
2
2
 
3
- __version__ = "0.15.0.dev4"
3
+ __version__ = "0.15.0.dev6"
4
4
  __description__ = "🎲 Dotflow turns an idea into flow!"
5
5
 
6
6
  from .core.action import Action as action
@@ -93,20 +93,28 @@ class SerializerTask(BaseModel):
93
93
  )
94
94
  @classmethod
95
95
  def context_validator(cls, value: Any) -> Any:
96
- if value and value.storage:
97
- return cls._serialize_context(value)
98
- return None
96
+ if value is None:
97
+ return None
98
+ if not isinstance(value, Context):
99
+ return None
100
+ if value.storage is None:
101
+ return None
102
+ return cls._serialize_context(value)
99
103
 
100
104
  @classmethod
101
105
  def _serialize_context(cls, ctx: Context) -> Any:
102
106
  """Serialize a Context to its storage value."""
103
- if isinstance(ctx.storage, list):
107
+ if isinstance(ctx.storage, (list, tuple)):
104
108
  contexts = {}
105
- for item in ctx.storage:
109
+ for index, item in enumerate(ctx.storage):
106
110
  if isinstance(item, Context):
107
- contexts[item.task_id] = cls._serialize_context(item)
111
+ if item.task_id is not None:
112
+ key = item.task_id
113
+ else:
114
+ key = f"ctx:{index}"
115
+ contexts[key] = cls._serialize_context(item)
108
116
  else:
109
- contexts[item.task_id] = cls._format_storage(item)
117
+ contexts[f"raw:{index}"] = cls._format_raw(item)
110
118
  return contexts
111
119
  return cls._format_storage(ctx)
112
120
 
@@ -117,3 +125,11 @@ class SerializerTask(BaseModel):
117
125
  return json.dumps(ctx.storage)
118
126
  except TypeError:
119
127
  return str(ctx.storage)
128
+
129
+ @staticmethod
130
+ def _format_raw(value: Any) -> Any:
131
+ """Format a raw (non-Context) value as JSON string."""
132
+ try:
133
+ return json.dumps(value)
134
+ except TypeError:
135
+ return str(value)
dotflow/core/task.py CHANGED
@@ -308,7 +308,7 @@ class TaskBuilder:
308
308
  self.queue: list[Callable] = []
309
309
  self.workflow_id = workflow_id
310
310
  self.config = config
311
- self._next_id = 0
311
+ self._next_id = 1
312
312
 
313
313
  def add(
314
314
  self,
@@ -1,112 +1,23 @@
1
- """ServerDefault
2
-
3
- Default implementation that communicates with a
4
- dotflow-api server.
5
-
6
- Args:
7
- base_url (str): Base URL of the API.
8
- user_token (str): API token (X-User-Token header).
9
- timeout (float): HTTP request timeout in seconds.
10
- """
1
+ """ServerDefault — no-op server provider."""
11
2
 
12
3
  from __future__ import annotations
13
4
 
14
5
  from typing import Any
15
6
 
16
- from requests import patch as http_patch
17
- from requests import post as http_post
18
-
19
7
  from dotflow.abc.server import Server
20
- from dotflow.logging import logger
21
8
 
22
9
 
23
10
  class ServerDefault(Server):
24
- """Default Server implementation (HTTP client)."""
25
-
26
- def __init__(
27
- self,
28
- base_url: str = "",
29
- user_token: str = "",
30
- timeout: float = 5.0,
31
- ) -> None:
32
- self.base_url = base_url.rstrip("/")
33
- self.user_token = user_token
34
- self.timeout = timeout
35
- self.enabled = bool(self.base_url and self.user_token)
36
-
37
- def _headers(self) -> dict[str, str]:
38
- return {
39
- "Content-Type": "application/json",
40
- "X-User-Token": self.user_token,
41
- }
42
-
43
- def _request(self, method, url, payload=None):
44
- try:
45
- response = method(
46
- url=url,
47
- headers=self._headers(),
48
- json=payload or {},
49
- timeout=self.timeout,
50
- )
51
- response.raise_for_status()
52
- except Exception as error:
53
- logger.error(
54
- "Server %s failed: %s",
55
- url,
56
- str(error),
57
- )
11
+ """Default Server implementation (no-op)."""
58
12
 
59
13
  def create_workflow(self, workflow: Any) -> None:
60
- """Create workflow record (synchronous)."""
61
- if not self.enabled:
62
- return
63
-
64
- self._request(
65
- http_post,
66
- f"{self.base_url}/workflows",
67
- {
68
- "id": f"{workflow}",
69
- "execution_mode": "sequential",
70
- "keep_going": False,
71
- },
72
- )
14
+ pass
73
15
 
74
16
  def update_workflow(self, workflow: Any, status: str = "") -> None:
75
- """Update workflow status (synchronous)."""
76
- if not self.enabled:
77
- return
78
-
79
- self._request(
80
- http_patch,
81
- f"{self.base_url}/workflows/{workflow}",
82
- {"status": status},
83
- )
17
+ pass
84
18
 
85
19
  def create_task(self, task: Any) -> None:
86
- """Create a task under a workflow (synchronous)."""
87
- if not self.enabled:
88
- return
89
-
90
- payload = {
91
- "id": task.task_id,
92
- "initial_context": (task.initial_context.storage),
93
- "group_name": (task.group_name or "default"),
94
- }
95
-
96
- self._request(
97
- http_post,
98
- f"{self.base_url}/workflows/{task.workflow_id}/tasks",
99
- payload,
100
- )
20
+ pass
101
21
 
102
22
  def update_task(self, task: Any) -> None:
103
- """Update task data (synchronous)."""
104
- if not self.enabled:
105
- return
106
-
107
- self._request(
108
- http_patch,
109
- f"{self.base_url}/workflows/"
110
- f"{task.workflow_id}/tasks/{task.task_id}",
111
- task.result(),
112
- )
23
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dotflow
3
- Version: 0.15.0.dev4
3
+ Version: 0.15.0.dev6
4
4
  Summary: 🎲 Dotflow turns an idea into flow! Lightweight Python library for execution pipelines with retry, parallel, cron and async support.
5
5
  License: MIT License
6
6
 
@@ -90,7 +90,7 @@ Description-Content-Type: text/markdown
90
90
  [![Downloads](https://img.shields.io/pypi/dm/dotflow?style=flat-square)](https://pypi.org/project/dotflow/)
91
91
  [![Stars](https://img.shields.io/github/stars/dotflow-io?label=Stars&style=flat-square)](https://github.com/dotflow-io/dotflow)
92
92
 
93
- [Website](https://dotflow.io) · [Documentation](https://dotflow-io.github.io/dotflow/) · [PyPI](https://pypi.org/project/dotflow/)
93
+ [Website](https://www.cloud.dotflow.io) · [Documentation](https://dotflow-io.github.io/dotflow/) · [PyPI](https://pypi.org/project/dotflow/)
94
94
 
95
95
  </div>
96
96
 
@@ -1,4 +1,4 @@
1
- dotflow/__init__.py,sha256=7FaxjSH_bEqIIOq4Gh8csGDIzfhv17RXEqdaC7h9Cqo,351
1
+ dotflow/__init__.py,sha256=U1261f8QEJvbdet2fmKSSDNLk9UPLbU9hoo69-BwogA,351
2
2
  dotflow/abc/__init__.py,sha256=UIk84jCJYoHAk4In_eVXAaFAnNE63lI3dVP5qunyBJs,32
3
3
  dotflow/abc/file.py,sha256=QEDIS-AXaW3GK5q5ckhNdoC5A3p8oOFE7VyNGSvx540,296
4
4
  dotflow/abc/flow.py,sha256=j6m9u13UXgBCIhgrUwzvBBYHTDul_DfERD4DWA1BQBw,1436
@@ -72,10 +72,10 @@ dotflow/core/engine.py,sha256=kqDW-fsh4H_TRfeupCHfgRzBY4_JJcSiMx7shzXF-ug,9045
72
72
  dotflow/core/exception.py,sha256=wxNLcDE3n2HjRsSioNo86Fd9V4K7oZZDL-FD0mcZxDg,2242
73
73
  dotflow/core/module.py,sha256=5-19cKMa-BW3TVD1XVxiB_mPLTaeTIHfvVAvkkK3lmU,760
74
74
  dotflow/core/serializers/__init__.py,sha256=2b2vyCuXmvS8N_K-ePuCrWC9yvMqLPBMeORjAWS5U70,35
75
- dotflow/core/serializers/task.py,sha256=jAC00MZUsTH56h4pW1BhteBjy70VHGIcxsvFHd_DUcA,3764
75
+ dotflow/core/serializers/task.py,sha256=DlKatju4tmhmv6O7U2vejaBiIVyCczwI2Klr1C82Iuw,4286
76
76
  dotflow/core/serializers/transport.py,sha256=gRlMTmyJrZrOS6fq7MUVtBqoerQrs2TJJyozGn6OfDk,489
77
77
  dotflow/core/serializers/workflow.py,sha256=ZoytQHb1wWa4kxyqfuwx_QwVdwJf6ocjUEszfnaB3w0,349
78
- dotflow/core/task.py,sha256=_DiWF-pThDNLR_gEeTJU3rECsksMy8uE2ZiDMn5MSho,10825
78
+ dotflow/core/task.py,sha256=mVqfiBXS1eclK7hSJnUvvtNp7qEYuCBdLpcVxAgWSX0,10825
79
79
  dotflow/core/types/__init__.py,sha256=8PX9QQrZ08beDSoSZb4SJDI257CY5hbfY9lctO3OaT4,405
80
80
  dotflow/core/types/execution.py,sha256=GxgdznWYOI8nGIrgSaJ5E9XvJtX8UnARgjJIGYz-lEM,487
81
81
  dotflow/core/types/overlap.py,sha256=suC2sX62y9j9CksNq09RVoziiSA205FzjcmhaQGxWL8,805
@@ -96,7 +96,7 @@ dotflow/providers/notify_discord.py,sha256=9cOt3YwJzuZzpNQlMLdc3sfJ5hfFRBBAmpNoU
96
96
  dotflow/providers/notify_telegram.py,sha256=xiyeqVSo_xQg3FR3_Q6Dnx2Qk8Sih2J7tkIVxkFSefk,3230
97
97
  dotflow/providers/scheduler_cron.py,sha256=wRXI5g0fDrYkBgD5zAMa5T8xxjU9v1SjDNpmsQD8nwA,8245
98
98
  dotflow/providers/scheduler_default.py,sha256=mkgMz5D6mROTDDY5juGXV4IgEDRPM0yW8_NJWDVfRTQ,258
99
- dotflow/providers/server_default.py,sha256=QwTo7zgbjAr9Qy7o1hMrAW8DEYpUriW_pYqKQZs229Y,3006
99
+ dotflow/providers/server_default.py,sha256=RRJMwN2oyyS_gHPif2fPJRGNsmTw2e3BmXVuQMYSR2M,500
100
100
  dotflow/providers/storage_default.py,sha256=ijE6cN0TlmTn8J5TiNvq_xakoK3JmciqI7qJWxesEBM,568
101
101
  dotflow/providers/storage_file.py,sha256=N4BPiDWWDOUbh5suzWvYzX6ZUtjhrfdZgSqwBPDW__I,2154
102
102
  dotflow/providers/storage_gcs.py,sha256=LgkS0zjlPElbvPhk7-uVKbNTnVn2OTtk8h5XltWIOH0,2484
@@ -110,8 +110,8 @@ dotflow/utils/__init__.py,sha256=AXiUm5p-FVG9SBWPxdG6jV0ft49EK6c40ME4aznPWQc,366
110
110
  dotflow/utils/basic_functions.py,sha256=S-maghYauG5QkMtHdm7qNcxBkKkSoE4akHSiI178Bwg,131
111
111
  dotflow/utils/error_handler.py,sha256=I8DY2AKR-WxKl8k7aUJPExS6wlzKVPy_u42ZJ9gYyts,272
112
112
  dotflow/utils/tools.py,sha256=RtC0D1SnaNCB02cT-l0Dw8Wl6uDSQSABoZH2kdD1PJQ,787
113
- dotflow-0.15.0.dev4.dist-info/METADATA,sha256=fLCLqvI0AQz3-iyFNP7npBCBs1q9bgATsq53msRy8ew,29485
114
- dotflow-0.15.0.dev4.dist-info/WHEEL,sha256=Vz2fHgx6HFtSwhs8KvkHLqH5Ea4w1_rner5uNVGCeIE,88
115
- dotflow-0.15.0.dev4.dist-info/entry_points.txt,sha256=3AW0pYKZpaMW6WZmN3t71X0FuwxQdivmQwe47_6yBp4,45
116
- dotflow-0.15.0.dev4.dist-info/licenses/LICENSE,sha256=UnmVHQt00UH2v7RBXqtIo_0D3vGBh0ujTdBKPKopAFk,1072
117
- dotflow-0.15.0.dev4.dist-info/RECORD,,
113
+ dotflow-0.15.0.dev6.dist-info/METADATA,sha256=7xYkUOdXqdNv-CYff3ejtpaAStxbTpDbGvpDq8WOsxM,29495
114
+ dotflow-0.15.0.dev6.dist-info/WHEEL,sha256=Vz2fHgx6HFtSwhs8KvkHLqH5Ea4w1_rner5uNVGCeIE,88
115
+ dotflow-0.15.0.dev6.dist-info/entry_points.txt,sha256=3AW0pYKZpaMW6WZmN3t71X0FuwxQdivmQwe47_6yBp4,45
116
+ dotflow-0.15.0.dev6.dist-info/licenses/LICENSE,sha256=UnmVHQt00UH2v7RBXqtIo_0D3vGBh0ujTdBKPKopAFk,1072
117
+ dotflow-0.15.0.dev6.dist-info/RECORD,,