Ykeremy/downloaded filename prefix (#814)
This commit is contained in:
@@ -84,14 +84,33 @@ def get_path_for_workflow_download_directory(workflow_run_id: str) -> Path:
|
||||
return Path(f"{REPO_ROOT_DIR}/downloads/{workflow_run_id}/")
|
||||
|
||||
|
||||
def get_number_of_files_in_directory(directory: Path, recursive: bool = False) -> int:
|
||||
count = 0
|
||||
def list_files_in_directory(directory: Path, recursive: bool = False) -> list[str]:
|
||||
listed_files: list[str] = []
|
||||
for root, dirs, files in os.walk(directory):
|
||||
listed_files.extend([os.path.join(root, file) for file in files])
|
||||
if not recursive:
|
||||
count += len(files)
|
||||
break
|
||||
count += len(files)
|
||||
return count
|
||||
|
||||
return listed_files
|
||||
|
||||
|
||||
def get_number_of_files_in_directory(directory: Path, recursive: bool = False) -> int:
|
||||
return len(list_files_in_directory(directory, recursive))
|
||||
|
||||
|
||||
def sanitize_filename(filename: str) -> str:
|
||||
return "".join(c for c in filename if c.isalnum() or c in ["-", "_", "."])
|
||||
|
||||
|
||||
def rename_file(file_path: str, new_file_name: str) -> str:
|
||||
try:
|
||||
new_file_name = sanitize_filename(new_file_name)
|
||||
new_file_path = os.path.join(os.path.dirname(file_path), new_file_name)
|
||||
os.rename(file_path, new_file_path)
|
||||
return new_file_path
|
||||
except Exception:
|
||||
LOG.exception(f"Failed to rename file {file_path} to {new_file_name}")
|
||||
return file_path
|
||||
|
||||
|
||||
def calculate_sha256(file_path: str) -> str:
|
||||
|
||||
@@ -176,6 +176,7 @@ class TaskBlock(Block):
|
||||
max_steps_per_run: int | None = None
|
||||
parameters: list[PARAMETER_TYPE] = []
|
||||
complete_on_download: bool = False
|
||||
download_suffix: str | None = None
|
||||
totp_verification_url: str | None = None
|
||||
totp_identifier: str | None = None
|
||||
|
||||
@@ -249,6 +250,16 @@ class TaskBlock(Block):
|
||||
)
|
||||
self.url = task_url_parameter_value
|
||||
|
||||
if self.download_suffix and workflow_run_context.has_parameter(self.download_suffix):
|
||||
download_suffix_parameter_value = workflow_run_context.get_value(self.download_suffix)
|
||||
if download_suffix_parameter_value:
|
||||
LOG.info(
|
||||
"Download prefix is parameterized, using parameter value",
|
||||
download_suffix_parameter_value=download_suffix_parameter_value,
|
||||
download_suffix_parameter_key=self.download_suffix,
|
||||
)
|
||||
self.download_suffix = download_suffix_parameter_value
|
||||
|
||||
# TODO (kerem) we should always retry on terminated. We should make a distinction between retriable and
|
||||
# non-retryable terminations
|
||||
while will_retry:
|
||||
@@ -306,7 +317,7 @@ class TaskBlock(Block):
|
||||
task=task,
|
||||
step=step,
|
||||
workflow_run=workflow_run,
|
||||
complete_on_download=self.complete_on_download,
|
||||
task_block=self,
|
||||
)
|
||||
except Exception as e:
|
||||
# Make sure the task is marked as failed in the database before raising the exception
|
||||
@@ -472,7 +483,10 @@ class ForLoopBlock(Block):
|
||||
workflow_run_context.set_value(context_parameter.key, context_parameter.value)
|
||||
block_outputs = []
|
||||
for block_idx, loop_block in enumerate(self.loop_blocks):
|
||||
original_loop_block = loop_block
|
||||
loop_block = loop_block.copy()
|
||||
block_output = await loop_block.execute_safe(workflow_run_id=workflow_run_id)
|
||||
loop_block = original_loop_block
|
||||
block_outputs.append(block_output)
|
||||
if not block_output.success and not loop_block.continue_on_failure:
|
||||
LOG.info(
|
||||
|
||||
@@ -111,6 +111,7 @@ class TaskBlockYAML(BlockYAML):
|
||||
max_steps_per_run: int | None = None
|
||||
parameter_keys: list[str] | None = None
|
||||
complete_on_download: bool = False
|
||||
download_suffix: str | None = None
|
||||
totp_verification_url: str | None = None
|
||||
totp_identifier: str | None = None
|
||||
|
||||
|
||||
@@ -1048,6 +1048,7 @@ class WorkflowService:
|
||||
max_steps_per_run=block_yaml.max_steps_per_run,
|
||||
max_retries=block_yaml.max_retries,
|
||||
complete_on_download=block_yaml.complete_on_download,
|
||||
download_suffix=block_yaml.download_suffix,
|
||||
continue_on_failure=block_yaml.continue_on_failure,
|
||||
totp_verification_url=block_yaml.totp_verification_url,
|
||||
totp_identifier=block_yaml.totp_identifier,
|
||||
|
||||
Reference in New Issue
Block a user