Skip to content

Commit b2f67a4

Browse files
author
Ilyas Gasanov
committed
[DOP-22145] Add file_name_template field
1 parent 31eaeab commit b2f67a4

File tree

7 files changed

+311
-100
lines changed

7 files changed

+311
-100
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add `file_name_template` field to `target_params`

syncmaster/schemas/v1/transfers/file/base.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ReadFileTransferTarget(BaseModel):
3333
...,
3434
discriminator="type",
3535
)
36+
file_name_template: str
3637
options: dict[str, Any]
3738

3839

@@ -61,6 +62,10 @@ class CreateFileTransferTarget(BaseModel):
6162
...,
6263
discriminator="type",
6364
)
65+
file_name_template: str = Field(
66+
default="{run_created_at}_{index}.{extension}",
67+
description="Template for file naming with required placeholders 'index' and 'extension'",
68+
)
6469
options: dict[str, Any] = Field(default_factory=dict)
6570

6671
class Config:
@@ -72,3 +77,20 @@ def _directory_path_is_valid_path(cls, value):
7277
if not PurePosixPath(value).is_absolute():
7378
raise ValueError("Directory path must be absolute")
7479
return value
80+
81+
@field_validator("file_name_template")
82+
@classmethod
83+
def validate_file_name_template(cls, value):
84+
required_keys = {"index", "extension"}
85+
placeholders = {key for key in required_keys if f"{{{key}}}" in value}
86+
87+
missing_keys = sorted(required_keys - placeholders)
88+
if missing_keys:
89+
raise ValueError(f"Missing required placeholders: {', '.join(missing_keys)}")
90+
91+
try:
92+
value.format(index="", extension="", run_created_at="", run_id="")
93+
except KeyError as e:
94+
raise ValueError(f"Invalid placeholder: {e}")
95+
96+
return value

0 commit comments

Comments
 (0)