queueflow 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.
- queueflow/__init__.py +80 -0
- queueflow/api/__init__.py +11 -0
- queueflow/api/cron_api.py +1808 -0
- queueflow/api/dlq_api.py +996 -0
- queueflow/api/health_api.py +527 -0
- queueflow/api/jobs_api.py +1830 -0
- queueflow/api/system_api.py +523 -0
- queueflow/api/worker_api.py +1229 -0
- queueflow/api/workflows_api.py +1804 -0
- queueflow/api_client.py +797 -0
- queueflow/api_response.py +21 -0
- queueflow/configuration.py +579 -0
- queueflow/exceptions.py +199 -0
- queueflow/facade.py +255 -0
- queueflow/models/__init__.py +57 -0
- queueflow/models/backoff_strategy.py +38 -0
- queueflow/models/complete_job_request.py +89 -0
- queueflow/models/create_batch_jobs_request.py +95 -0
- queueflow/models/create_batch_jobs_response.py +90 -0
- queueflow/models/create_cron_request.py +111 -0
- queueflow/models/create_cron_response.py +87 -0
- queueflow/models/create_job_request.py +108 -0
- queueflow/models/create_job_response.py +87 -0
- queueflow/models/create_workflow_request.py +101 -0
- queueflow/models/create_workflow_response.py +87 -0
- queueflow/models/cron_schedule.py +134 -0
- queueflow/models/dead_letter.py +136 -0
- queueflow/models/error_body.py +90 -0
- queueflow/models/fail_job_request.py +91 -0
- queueflow/models/health_status.py +92 -0
- queueflow/models/heartbeat_request.py +90 -0
- queueflow/models/heartbeat_response.py +88 -0
- queueflow/models/job.py +172 -0
- queueflow/models/job_config.py +106 -0
- queueflow/models/job_config_request.py +143 -0
- queueflow/models/job_status.py +41 -0
- queueflow/models/lease_jobs_request.py +107 -0
- queueflow/models/lease_jobs_response.py +95 -0
- queueflow/models/leased_job.py +93 -0
- queueflow/models/list_crons_response.py +115 -0
- queueflow/models/list_dead_letters_response.py +115 -0
- queueflow/models/list_jobs_response.py +115 -0
- queueflow/models/list_workflows_response.py +115 -0
- queueflow/models/on_failure.py +38 -0
- queueflow/models/on_success.py +36 -0
- queueflow/models/ready_status.py +87 -0
- queueflow/models/replay_dead_letter_response.py +87 -0
- queueflow/models/stats_snapshot.py +102 -0
- queueflow/models/step_status.py +41 -0
- queueflow/models/tasks_response.py +87 -0
- queueflow/models/workflow.py +130 -0
- queueflow/models/workflow_diagram_response.py +89 -0
- queueflow/models/workflow_status.py +41 -0
- queueflow/models/workflow_step.py +112 -0
- queueflow/models/workflow_step_state.py +97 -0
- queueflow/models/workflow_step_states_response.py +95 -0
- queueflow/py.typed +0 -0
- queueflow/rest.py +257 -0
- queueflow-0.1.0.dist-info/METADATA +26 -0
- queueflow-0.1.0.dist-info/RECORD +62 -0
- queueflow-0.1.0.dist-info/WHEEL +5 -0
- queueflow-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
QueueFlow API
|
|
5
|
+
|
|
6
|
+
REST API for QueueFlow, a PostgreSQL-native distributed job queue and workflow engine.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
|
|
25
|
+
class CreateWorkflowResponse(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
CreateWorkflowResponse
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
workflow_id: StrictStr
|
|
30
|
+
__properties: ClassVar[List[str]] = ["workflow_id"]
|
|
31
|
+
|
|
32
|
+
model_config = ConfigDict(
|
|
33
|
+
populate_by_name=True,
|
|
34
|
+
validate_assignment=True,
|
|
35
|
+
protected_namespaces=(),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def to_str(self) -> str:
|
|
40
|
+
"""Returns the string representation of the model using alias"""
|
|
41
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
42
|
+
|
|
43
|
+
def to_json(self) -> str:
|
|
44
|
+
"""Returns the JSON representation of the model using alias"""
|
|
45
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
46
|
+
return json.dumps(self.to_dict())
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
50
|
+
"""Create an instance of CreateWorkflowResponse from a JSON string"""
|
|
51
|
+
return cls.from_dict(json.loads(json_str))
|
|
52
|
+
|
|
53
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
54
|
+
"""Return the dictionary representation of the model using alias.
|
|
55
|
+
|
|
56
|
+
This has the following differences from calling pydantic's
|
|
57
|
+
`self.model_dump(by_alias=True)`:
|
|
58
|
+
|
|
59
|
+
* `None` is only added to the output dict for nullable fields that
|
|
60
|
+
were set at model initialization. Other fields with value `None`
|
|
61
|
+
are ignored.
|
|
62
|
+
"""
|
|
63
|
+
excluded_fields: Set[str] = set([
|
|
64
|
+
])
|
|
65
|
+
|
|
66
|
+
_dict = self.model_dump(
|
|
67
|
+
by_alias=True,
|
|
68
|
+
exclude=excluded_fields,
|
|
69
|
+
exclude_none=True,
|
|
70
|
+
)
|
|
71
|
+
return _dict
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
75
|
+
"""Create an instance of CreateWorkflowResponse from a dict"""
|
|
76
|
+
if obj is None:
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
if not isinstance(obj, dict):
|
|
80
|
+
return cls.model_validate(obj)
|
|
81
|
+
|
|
82
|
+
_obj = cls.model_validate({
|
|
83
|
+
"workflow_id": obj.get("workflow_id")
|
|
84
|
+
})
|
|
85
|
+
return _obj
|
|
86
|
+
|
|
87
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
QueueFlow API
|
|
5
|
+
|
|
6
|
+
REST API for QueueFlow, a PostgreSQL-native distributed job queue and workflow engine.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
|
|
22
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
+
from queueflow.models.job_config import JobConfig
|
|
24
|
+
from typing import Optional, Set
|
|
25
|
+
from typing_extensions import Self
|
|
26
|
+
|
|
27
|
+
class CronSchedule(BaseModel):
|
|
28
|
+
"""
|
|
29
|
+
A recurring enqueue schedule. Expressions are standard 5-field crontab (`minute hour day-of-month month day-of-week`), evaluated in **UTC**; a 6/7-field form with leading seconds is also accepted.
|
|
30
|
+
""" # noqa: E501
|
|
31
|
+
config: Optional[JobConfig] = None
|
|
32
|
+
created_at: datetime
|
|
33
|
+
cron_expr: StrictStr
|
|
34
|
+
enabled: StrictBool
|
|
35
|
+
id: StrictStr
|
|
36
|
+
last_enqueued_at: Optional[datetime] = None
|
|
37
|
+
name: StrictStr = Field(description="Unique per tenant.")
|
|
38
|
+
next_run_at: datetime = Field(description="The next instant this schedule fires. Missed occurrences (server down) collapse into at most one catch-up firing.")
|
|
39
|
+
payload: Optional[Dict[str, Any]] = None
|
|
40
|
+
queue_name: Optional[StrictStr] = Field(default=None, description="Queue for the enqueued jobs (the engine default when absent).")
|
|
41
|
+
task_name: StrictStr
|
|
42
|
+
tenant_id: Optional[StrictStr] = None
|
|
43
|
+
__properties: ClassVar[List[str]] = ["config", "created_at", "cron_expr", "enabled", "id", "last_enqueued_at", "name", "next_run_at", "payload", "queue_name", "task_name", "tenant_id"]
|
|
44
|
+
|
|
45
|
+
model_config = ConfigDict(
|
|
46
|
+
populate_by_name=True,
|
|
47
|
+
validate_assignment=True,
|
|
48
|
+
protected_namespaces=(),
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def to_str(self) -> str:
|
|
53
|
+
"""Returns the string representation of the model using alias"""
|
|
54
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
55
|
+
|
|
56
|
+
def to_json(self) -> str:
|
|
57
|
+
"""Returns the JSON representation of the model using alias"""
|
|
58
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
59
|
+
return json.dumps(self.to_dict())
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
63
|
+
"""Create an instance of CronSchedule from a JSON string"""
|
|
64
|
+
return cls.from_dict(json.loads(json_str))
|
|
65
|
+
|
|
66
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
67
|
+
"""Return the dictionary representation of the model using alias.
|
|
68
|
+
|
|
69
|
+
This has the following differences from calling pydantic's
|
|
70
|
+
`self.model_dump(by_alias=True)`:
|
|
71
|
+
|
|
72
|
+
* `None` is only added to the output dict for nullable fields that
|
|
73
|
+
were set at model initialization. Other fields with value `None`
|
|
74
|
+
are ignored.
|
|
75
|
+
"""
|
|
76
|
+
excluded_fields: Set[str] = set([
|
|
77
|
+
])
|
|
78
|
+
|
|
79
|
+
_dict = self.model_dump(
|
|
80
|
+
by_alias=True,
|
|
81
|
+
exclude=excluded_fields,
|
|
82
|
+
exclude_none=True,
|
|
83
|
+
)
|
|
84
|
+
# override the default output from pydantic by calling `to_dict()` of config
|
|
85
|
+
if self.config:
|
|
86
|
+
_dict['config'] = self.config.to_dict()
|
|
87
|
+
# set to None if config (nullable) is None
|
|
88
|
+
# and model_fields_set contains the field
|
|
89
|
+
if self.config is None and "config" in self.model_fields_set:
|
|
90
|
+
_dict['config'] = None
|
|
91
|
+
|
|
92
|
+
# set to None if last_enqueued_at (nullable) is None
|
|
93
|
+
# and model_fields_set contains the field
|
|
94
|
+
if self.last_enqueued_at is None and "last_enqueued_at" in self.model_fields_set:
|
|
95
|
+
_dict['last_enqueued_at'] = None
|
|
96
|
+
|
|
97
|
+
# set to None if queue_name (nullable) is None
|
|
98
|
+
# and model_fields_set contains the field
|
|
99
|
+
if self.queue_name is None and "queue_name" in self.model_fields_set:
|
|
100
|
+
_dict['queue_name'] = None
|
|
101
|
+
|
|
102
|
+
# set to None if tenant_id (nullable) is None
|
|
103
|
+
# and model_fields_set contains the field
|
|
104
|
+
if self.tenant_id is None and "tenant_id" in self.model_fields_set:
|
|
105
|
+
_dict['tenant_id'] = None
|
|
106
|
+
|
|
107
|
+
return _dict
|
|
108
|
+
|
|
109
|
+
@classmethod
|
|
110
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
111
|
+
"""Create an instance of CronSchedule from a dict"""
|
|
112
|
+
if obj is None:
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
if not isinstance(obj, dict):
|
|
116
|
+
return cls.model_validate(obj)
|
|
117
|
+
|
|
118
|
+
_obj = cls.model_validate({
|
|
119
|
+
"config": JobConfig.from_dict(obj["config"]) if obj.get("config") is not None else None,
|
|
120
|
+
"created_at": obj.get("created_at"),
|
|
121
|
+
"cron_expr": obj.get("cron_expr"),
|
|
122
|
+
"enabled": obj.get("enabled"),
|
|
123
|
+
"id": obj.get("id"),
|
|
124
|
+
"last_enqueued_at": obj.get("last_enqueued_at"),
|
|
125
|
+
"name": obj.get("name"),
|
|
126
|
+
"next_run_at": obj.get("next_run_at"),
|
|
127
|
+
"payload": obj.get("payload"),
|
|
128
|
+
"queue_name": obj.get("queue_name"),
|
|
129
|
+
"task_name": obj.get("task_name"),
|
|
130
|
+
"tenant_id": obj.get("tenant_id")
|
|
131
|
+
})
|
|
132
|
+
return _obj
|
|
133
|
+
|
|
134
|
+
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
QueueFlow API
|
|
5
|
+
|
|
6
|
+
REST API for QueueFlow, a PostgreSQL-native distributed job queue and workflow engine.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
|
|
22
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
+
from typing import Optional, Set
|
|
24
|
+
from typing_extensions import Self
|
|
25
|
+
|
|
26
|
+
class DeadLetter(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
A dead-lettered job: a terminal failure recorded for inspection and replay. The original job row remains (subject to retention); this entry captures why it died and, once replayed, which fresh job took its place.
|
|
29
|
+
""" # noqa: E501
|
|
30
|
+
created_at: datetime
|
|
31
|
+
error_message: Optional[StrictStr] = None
|
|
32
|
+
id: StrictInt
|
|
33
|
+
job_id: StrictStr
|
|
34
|
+
queue_name: Optional[StrictStr] = None
|
|
35
|
+
reason: StrictStr = Field(description="Why the job dead-lettered: `max_attempts_exceeded`, `non_retryable`, or `handler_not_found`.")
|
|
36
|
+
replay_job_id: Optional[StrictStr] = Field(default=None, description="The fresh job created by the replay.")
|
|
37
|
+
replayed_at: Optional[datetime] = Field(default=None, description="Set once this entry has been replayed; a dead letter replays at most once.")
|
|
38
|
+
task_name: Optional[StrictStr] = None
|
|
39
|
+
tenant_id: Optional[StrictStr] = None
|
|
40
|
+
__properties: ClassVar[List[str]] = ["created_at", "error_message", "id", "job_id", "queue_name", "reason", "replay_job_id", "replayed_at", "task_name", "tenant_id"]
|
|
41
|
+
|
|
42
|
+
model_config = ConfigDict(
|
|
43
|
+
populate_by_name=True,
|
|
44
|
+
validate_assignment=True,
|
|
45
|
+
protected_namespaces=(),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def to_str(self) -> str:
|
|
50
|
+
"""Returns the string representation of the model using alias"""
|
|
51
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
52
|
+
|
|
53
|
+
def to_json(self) -> str:
|
|
54
|
+
"""Returns the JSON representation of the model using alias"""
|
|
55
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
56
|
+
return json.dumps(self.to_dict())
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
60
|
+
"""Create an instance of DeadLetter from a JSON string"""
|
|
61
|
+
return cls.from_dict(json.loads(json_str))
|
|
62
|
+
|
|
63
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
64
|
+
"""Return the dictionary representation of the model using alias.
|
|
65
|
+
|
|
66
|
+
This has the following differences from calling pydantic's
|
|
67
|
+
`self.model_dump(by_alias=True)`:
|
|
68
|
+
|
|
69
|
+
* `None` is only added to the output dict for nullable fields that
|
|
70
|
+
were set at model initialization. Other fields with value `None`
|
|
71
|
+
are ignored.
|
|
72
|
+
"""
|
|
73
|
+
excluded_fields: Set[str] = set([
|
|
74
|
+
])
|
|
75
|
+
|
|
76
|
+
_dict = self.model_dump(
|
|
77
|
+
by_alias=True,
|
|
78
|
+
exclude=excluded_fields,
|
|
79
|
+
exclude_none=True,
|
|
80
|
+
)
|
|
81
|
+
# set to None if error_message (nullable) is None
|
|
82
|
+
# and model_fields_set contains the field
|
|
83
|
+
if self.error_message is None and "error_message" in self.model_fields_set:
|
|
84
|
+
_dict['error_message'] = None
|
|
85
|
+
|
|
86
|
+
# set to None if queue_name (nullable) is None
|
|
87
|
+
# and model_fields_set contains the field
|
|
88
|
+
if self.queue_name is None and "queue_name" in self.model_fields_set:
|
|
89
|
+
_dict['queue_name'] = None
|
|
90
|
+
|
|
91
|
+
# set to None if replay_job_id (nullable) is None
|
|
92
|
+
# and model_fields_set contains the field
|
|
93
|
+
if self.replay_job_id is None and "replay_job_id" in self.model_fields_set:
|
|
94
|
+
_dict['replay_job_id'] = None
|
|
95
|
+
|
|
96
|
+
# set to None if replayed_at (nullable) is None
|
|
97
|
+
# and model_fields_set contains the field
|
|
98
|
+
if self.replayed_at is None and "replayed_at" in self.model_fields_set:
|
|
99
|
+
_dict['replayed_at'] = None
|
|
100
|
+
|
|
101
|
+
# set to None if task_name (nullable) is None
|
|
102
|
+
# and model_fields_set contains the field
|
|
103
|
+
if self.task_name is None and "task_name" in self.model_fields_set:
|
|
104
|
+
_dict['task_name'] = None
|
|
105
|
+
|
|
106
|
+
# set to None if tenant_id (nullable) is None
|
|
107
|
+
# and model_fields_set contains the field
|
|
108
|
+
if self.tenant_id is None and "tenant_id" in self.model_fields_set:
|
|
109
|
+
_dict['tenant_id'] = None
|
|
110
|
+
|
|
111
|
+
return _dict
|
|
112
|
+
|
|
113
|
+
@classmethod
|
|
114
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
115
|
+
"""Create an instance of DeadLetter from a dict"""
|
|
116
|
+
if obj is None:
|
|
117
|
+
return None
|
|
118
|
+
|
|
119
|
+
if not isinstance(obj, dict):
|
|
120
|
+
return cls.model_validate(obj)
|
|
121
|
+
|
|
122
|
+
_obj = cls.model_validate({
|
|
123
|
+
"created_at": obj.get("created_at"),
|
|
124
|
+
"error_message": obj.get("error_message"),
|
|
125
|
+
"id": obj.get("id"),
|
|
126
|
+
"job_id": obj.get("job_id"),
|
|
127
|
+
"queue_name": obj.get("queue_name"),
|
|
128
|
+
"reason": obj.get("reason"),
|
|
129
|
+
"replay_job_id": obj.get("replay_job_id"),
|
|
130
|
+
"replayed_at": obj.get("replayed_at"),
|
|
131
|
+
"task_name": obj.get("task_name"),
|
|
132
|
+
"tenant_id": obj.get("tenant_id")
|
|
133
|
+
})
|
|
134
|
+
return _obj
|
|
135
|
+
|
|
136
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
QueueFlow API
|
|
5
|
+
|
|
6
|
+
REST API for QueueFlow, a PostgreSQL-native distributed job queue and workflow engine.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, StrictStr
|
|
22
|
+
from typing import Any, ClassVar, Dict, List
|
|
23
|
+
from typing import Optional, Set
|
|
24
|
+
from typing_extensions import Self
|
|
25
|
+
|
|
26
|
+
class ErrorBody(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
ErrorBody
|
|
29
|
+
""" # noqa: E501
|
|
30
|
+
error: StrictStr
|
|
31
|
+
timestamp: datetime
|
|
32
|
+
__properties: ClassVar[List[str]] = ["error", "timestamp"]
|
|
33
|
+
|
|
34
|
+
model_config = ConfigDict(
|
|
35
|
+
populate_by_name=True,
|
|
36
|
+
validate_assignment=True,
|
|
37
|
+
protected_namespaces=(),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def to_str(self) -> str:
|
|
42
|
+
"""Returns the string representation of the model using alias"""
|
|
43
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
44
|
+
|
|
45
|
+
def to_json(self) -> str:
|
|
46
|
+
"""Returns the JSON representation of the model using alias"""
|
|
47
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
48
|
+
return json.dumps(self.to_dict())
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
52
|
+
"""Create an instance of ErrorBody from a JSON string"""
|
|
53
|
+
return cls.from_dict(json.loads(json_str))
|
|
54
|
+
|
|
55
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
56
|
+
"""Return the dictionary representation of the model using alias.
|
|
57
|
+
|
|
58
|
+
This has the following differences from calling pydantic's
|
|
59
|
+
`self.model_dump(by_alias=True)`:
|
|
60
|
+
|
|
61
|
+
* `None` is only added to the output dict for nullable fields that
|
|
62
|
+
were set at model initialization. Other fields with value `None`
|
|
63
|
+
are ignored.
|
|
64
|
+
"""
|
|
65
|
+
excluded_fields: Set[str] = set([
|
|
66
|
+
])
|
|
67
|
+
|
|
68
|
+
_dict = self.model_dump(
|
|
69
|
+
by_alias=True,
|
|
70
|
+
exclude=excluded_fields,
|
|
71
|
+
exclude_none=True,
|
|
72
|
+
)
|
|
73
|
+
return _dict
|
|
74
|
+
|
|
75
|
+
@classmethod
|
|
76
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
77
|
+
"""Create an instance of ErrorBody from a dict"""
|
|
78
|
+
if obj is None:
|
|
79
|
+
return None
|
|
80
|
+
|
|
81
|
+
if not isinstance(obj, dict):
|
|
82
|
+
return cls.model_validate(obj)
|
|
83
|
+
|
|
84
|
+
_obj = cls.model_validate({
|
|
85
|
+
"error": obj.get("error"),
|
|
86
|
+
"timestamp": obj.get("timestamp")
|
|
87
|
+
})
|
|
88
|
+
return _obj
|
|
89
|
+
|
|
90
|
+
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
QueueFlow API
|
|
5
|
+
|
|
6
|
+
REST API for QueueFlow, a PostgreSQL-native distributed job queue and workflow engine.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
|
|
25
|
+
class FailJobRequest(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
Body for `POST /api/v1/jobs/{id}/fail`.
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
error: StrictStr = Field(description="Human-readable failure reason.")
|
|
30
|
+
lease_token: StrictStr = Field(description="The lease token returned by the lease call.")
|
|
31
|
+
retryable: Optional[StrictBool] = Field(default=None, description="Whether the engine may retry (subject to the job's max_retries). Defaults to true; send false for permanent failures (e.g. bad input).")
|
|
32
|
+
__properties: ClassVar[List[str]] = ["error", "lease_token", "retryable"]
|
|
33
|
+
|
|
34
|
+
model_config = ConfigDict(
|
|
35
|
+
populate_by_name=True,
|
|
36
|
+
validate_assignment=True,
|
|
37
|
+
protected_namespaces=(),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def to_str(self) -> str:
|
|
42
|
+
"""Returns the string representation of the model using alias"""
|
|
43
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
44
|
+
|
|
45
|
+
def to_json(self) -> str:
|
|
46
|
+
"""Returns the JSON representation of the model using alias"""
|
|
47
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
48
|
+
return json.dumps(self.to_dict())
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
52
|
+
"""Create an instance of FailJobRequest from a JSON string"""
|
|
53
|
+
return cls.from_dict(json.loads(json_str))
|
|
54
|
+
|
|
55
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
56
|
+
"""Return the dictionary representation of the model using alias.
|
|
57
|
+
|
|
58
|
+
This has the following differences from calling pydantic's
|
|
59
|
+
`self.model_dump(by_alias=True)`:
|
|
60
|
+
|
|
61
|
+
* `None` is only added to the output dict for nullable fields that
|
|
62
|
+
were set at model initialization. Other fields with value `None`
|
|
63
|
+
are ignored.
|
|
64
|
+
"""
|
|
65
|
+
excluded_fields: Set[str] = set([
|
|
66
|
+
])
|
|
67
|
+
|
|
68
|
+
_dict = self.model_dump(
|
|
69
|
+
by_alias=True,
|
|
70
|
+
exclude=excluded_fields,
|
|
71
|
+
exclude_none=True,
|
|
72
|
+
)
|
|
73
|
+
return _dict
|
|
74
|
+
|
|
75
|
+
@classmethod
|
|
76
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
77
|
+
"""Create an instance of FailJobRequest from a dict"""
|
|
78
|
+
if obj is None:
|
|
79
|
+
return None
|
|
80
|
+
|
|
81
|
+
if not isinstance(obj, dict):
|
|
82
|
+
return cls.model_validate(obj)
|
|
83
|
+
|
|
84
|
+
_obj = cls.model_validate({
|
|
85
|
+
"error": obj.get("error"),
|
|
86
|
+
"lease_token": obj.get("lease_token"),
|
|
87
|
+
"retryable": obj.get("retryable")
|
|
88
|
+
})
|
|
89
|
+
return _obj
|
|
90
|
+
|
|
91
|
+
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
QueueFlow API
|
|
5
|
+
|
|
6
|
+
REST API for QueueFlow, a PostgreSQL-native distributed job queue and workflow engine.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, StrictStr
|
|
22
|
+
from typing import Any, ClassVar, Dict, List
|
|
23
|
+
from typing import Optional, Set
|
|
24
|
+
from typing_extensions import Self
|
|
25
|
+
|
|
26
|
+
class HealthStatus(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
HealthStatus
|
|
29
|
+
""" # noqa: E501
|
|
30
|
+
status: StrictStr
|
|
31
|
+
timestamp: datetime
|
|
32
|
+
version: StrictStr
|
|
33
|
+
__properties: ClassVar[List[str]] = ["status", "timestamp", "version"]
|
|
34
|
+
|
|
35
|
+
model_config = ConfigDict(
|
|
36
|
+
populate_by_name=True,
|
|
37
|
+
validate_assignment=True,
|
|
38
|
+
protected_namespaces=(),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def to_str(self) -> str:
|
|
43
|
+
"""Returns the string representation of the model using alias"""
|
|
44
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
45
|
+
|
|
46
|
+
def to_json(self) -> str:
|
|
47
|
+
"""Returns the JSON representation of the model using alias"""
|
|
48
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
49
|
+
return json.dumps(self.to_dict())
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
53
|
+
"""Create an instance of HealthStatus from a JSON string"""
|
|
54
|
+
return cls.from_dict(json.loads(json_str))
|
|
55
|
+
|
|
56
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
57
|
+
"""Return the dictionary representation of the model using alias.
|
|
58
|
+
|
|
59
|
+
This has the following differences from calling pydantic's
|
|
60
|
+
`self.model_dump(by_alias=True)`:
|
|
61
|
+
|
|
62
|
+
* `None` is only added to the output dict for nullable fields that
|
|
63
|
+
were set at model initialization. Other fields with value `None`
|
|
64
|
+
are ignored.
|
|
65
|
+
"""
|
|
66
|
+
excluded_fields: Set[str] = set([
|
|
67
|
+
])
|
|
68
|
+
|
|
69
|
+
_dict = self.model_dump(
|
|
70
|
+
by_alias=True,
|
|
71
|
+
exclude=excluded_fields,
|
|
72
|
+
exclude_none=True,
|
|
73
|
+
)
|
|
74
|
+
return _dict
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
78
|
+
"""Create an instance of HealthStatus from a dict"""
|
|
79
|
+
if obj is None:
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
if not isinstance(obj, dict):
|
|
83
|
+
return cls.model_validate(obj)
|
|
84
|
+
|
|
85
|
+
_obj = cls.model_validate({
|
|
86
|
+
"status": obj.get("status"),
|
|
87
|
+
"timestamp": obj.get("timestamp"),
|
|
88
|
+
"version": obj.get("version")
|
|
89
|
+
})
|
|
90
|
+
return _obj
|
|
91
|
+
|
|
92
|
+
|