Skip to content

Commit f46370f

Browse files
committed
Support schedule releated params for create_project
1 parent 37d95f7 commit f46370f

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

tdworkflow/client.py

+20-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from .schedule import Schedule, ScheduleAttempt
2424
from .session import Session
2525
from .task import Task
26-
from .util import archive_files, to_iso8601
26+
from .util import archive_files, to_iso8601, to_iso_instant
2727
from .workflow import Workflow
2828

2929
logger = logging.getLogger(__name__)
@@ -102,7 +102,7 @@ class ProjectAPI:
102102
str,
103103
DefaultArg(DataType, "data"),
104104
DefaultArg(Dict[str, Any], "_json"),
105-
DefaultArg(Dict[str, str], "params"),
105+
DefaultArg(Dict[str, Union[str, List[str]]], "params"),
106106
],
107107
PutResponse,
108108
]
@@ -193,13 +193,19 @@ def create_project(
193193
self,
194194
project_name: str,
195195
target_dir: str,
196+
schedule_from: Optional[datetime],
197+
clear_schedules: Optional[List[str]] = None,
198+
clear_schedule_all: Optional[bool] = None,
196199
exclude_patterns: Optional[List[str]] = None,
197200
revision: Optional[str] = None,
198201
) -> Project:
199202
"""Create a new project
200203
201204
:param project_name: Project name
202205
:param target_dir: Target directory name
206+
:param schedule_from: Start scheduling of new workflows from the given time instead of current time
207+
:param clear_schedules: Clear schedules for the given workflow names
208+
:param clear_schedule_all: Clear all schedules
203209
:param exclude_patterns: Exclude file patterns. They are treated as regexp
204210
patterns.
205211
default: ["venv", ".venv", "__pycache__", ".egg-info",\
@@ -208,7 +214,16 @@ def create_project(
208214
:return:
209215
"""
210216
revision = revision or str(uuid.uuid4())
211-
params = {"project": project_name, "revision": revision}
217+
params: Dict[str, Union[str, List[str]]] = {
218+
"project": project_name,
219+
"revision": revision,
220+
}
221+
if schedule_from:
222+
params["schedule_from"] = to_iso_instant(schedule_from)
223+
if clear_schedules:
224+
params["clear_schedule"] = clear_schedules
225+
if clear_schedule_all:
226+
params["clear_schedule_all"] = "true"
212227

213228
default_excludes = [
214229
"venv",
@@ -452,7 +467,7 @@ class AttemptAPI:
452467
str,
453468
DefaultArg(DataType, "data"),
454469
DefaultArg(Dict[str, Any], "_json"),
455-
DefaultArg(Dict[str, str], "params"),
470+
DefaultArg(Dict[str, Union[str, List[str]]], "params"),
456471
],
457472
PutResponse,
458473
]
@@ -1038,7 +1053,7 @@ def put(
10381053
path: str,
10391054
data: Optional[DataType] = None,
10401055
_json: Optional[Dict[str, Any]] = None,
1041-
params: Optional[Dict[str, str]] = None,
1056+
params: Optional[Dict[str, Union[str, List[str]]]] = None,
10421057
) -> PutResponse:
10431058
"""PUT operator for REST API
10441059

tdworkflow/util.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def to_iso8601(dt: Optional[Union[str, datetime]]) -> str:
4848
if isinstance(dt, datetime):
4949
# Naive object
5050
if not dt.tzinfo:
51-
return dt.astimezone(timezone(timedelta(0), "UTC")).isoformat()
51+
return dt.astimezone(timezone.utc).isoformat()
5252
# Aware object
5353
else:
5454
return dt.isoformat()
@@ -58,3 +58,15 @@ def to_iso8601(dt: Optional[Union[str, datetime]]) -> str:
5858

5959
else:
6060
raise ValueError("Unexpected type")
61+
62+
63+
def to_iso_instant(dt: datetime) -> str:
64+
if isinstance(dt, datetime):
65+
return (
66+
dt.astimezone(timezone.utc)
67+
.isoformat(timespec="seconds")
68+
.replace("+00:00", "Z")
69+
)
70+
71+
else:
72+
raise ValueError("Unexpected type")
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
+hello:
2+
echo>: hello

0 commit comments

Comments
 (0)