pybiolib 1.2.561__tar.gz → 1.2.567__tar.gz
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.
- {pybiolib-1.2.561 → pybiolib-1.2.567}/PKG-INFO +1 -1
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/docker_executor.py +30 -25
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/types.py +0 -1
- {pybiolib-1.2.561 → pybiolib-1.2.567}/pyproject.toml +1 -1
- {pybiolib-1.2.561 → pybiolib-1.2.567}/LICENSE +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/PYPI_README.md +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_data_record/data_record.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/data_record/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/data_record/data_record.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/data_record/push_data.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/data_record/remote_storage_endpoint.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/file_utils.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/fuse_mount/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/fuse_mount/experiment_fuse_mount.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/http_client.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/lfs/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/lfs/cache.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/libs/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/libs/fusepy/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/push_application.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/runtime.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/app.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/data_record.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/experiment.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/file_node.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/resource.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/resource_version.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/types/typing.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/utils/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/utils/multinode.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_runtime/runtime.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/api/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/api/client.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/app/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/app/app.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/app/search_apps.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/api_client.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/app_types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/auth.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/biolib_app_api.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/biolib_job_api.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/common_types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/job_types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/lfs_types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_api_client/user_state.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/base_bbf_package.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/file_in_container.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/module_input.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/module_output_v2.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/remote_endpoints.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/remote_stream_seeker.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/saved_job.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/stdout_and_stderr.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/system_exception.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/system_status_update.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_binary_format/utils.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_docker_client/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_download_container.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_errors.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/biolib_logging.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/auth.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/data_record.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/download_container.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/init.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/lfs.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/push.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/run.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/runtime.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/cli/start.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/.gitignore +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/cloud_utils/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/cloud_utils/cloud_utils.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/cache_state.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/cache_types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/docker_image_cache.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/docker_types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/tars/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/job_max_runtime_timer_thread.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/job_storage.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/job_worker.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/large_file_system.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/mappings.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/utilization_reporter_thread.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/utils.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/remote_host_proxy.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/socker_listener_thread.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/socket_sender_thread.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/utils.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/webserver/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/webserver/gunicorn_flask_application.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/webserver/webserver.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/webserver/webserver_types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/webserver/webserver_utils.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/webserver/worker_thread.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/experiments/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/experiments/experiment.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/jobs/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/jobs/job.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/jobs/job_result.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/jobs/types.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/py.typed +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/runtime/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/sdk/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/tables.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/templates/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/templates/example_app.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/typing_utils.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/user/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/user/sign_in.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/utils/__init__.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/utils/app_uri.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/utils/cache_state.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/utils/multipart_uploader.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/utils/seq_util.py +0 -0
- {pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/utils/zip/remote_zip.py +0 -0
{pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/docker_executor.py
RENAMED
@@ -27,7 +27,7 @@ from biolib.compute_node import utils as compute_node_utils
|
|
27
27
|
from biolib.compute_node.cloud_utils import CloudUtils
|
28
28
|
from biolib.compute_node.job_worker.docker_image_cache import DockerImageCache
|
29
29
|
from biolib.compute_node.job_worker.executors.docker_types import DockerDiffKind
|
30
|
-
from biolib.compute_node.job_worker.executors.types import LocalExecutorOptions,
|
30
|
+
from biolib.compute_node.job_worker.executors.types import LocalExecutorOptions, MetadataToSaveOutput, StatusUpdate
|
31
31
|
from biolib.compute_node.job_worker.mappings import Mappings, path_without_first_folder
|
32
32
|
from biolib.compute_node.job_worker.utilization_reporter_thread import UtilizationReporterThread
|
33
33
|
from biolib.compute_node.job_worker.utils import ComputeProcessException
|
@@ -201,9 +201,6 @@ class DockerExecutor:
|
|
201
201
|
stream=True,
|
202
202
|
)
|
203
203
|
|
204
|
-
logger_no_user_data.debug(f'Running diff for Docker container for {job_uuid}')
|
205
|
-
pre_start_diff = self._container.diff()
|
206
|
-
|
207
204
|
logger_no_user_data.debug(f'Starting Docker container for {job_uuid}')
|
208
205
|
startup_error_string: Optional[str] = None
|
209
206
|
try:
|
@@ -218,7 +215,6 @@ class DockerExecutor:
|
|
218
215
|
self._metadata_for_save_output_on_cancel = MetadataToSaveOutput(
|
219
216
|
arguments=module_input['arguments'],
|
220
217
|
startup_error_string=startup_error_string,
|
221
|
-
pre_start_diff=pre_start_diff,
|
222
218
|
)
|
223
219
|
|
224
220
|
if self._options['job']['app_version'].get('stdout_render_type') != 'markdown':
|
@@ -264,7 +260,6 @@ class DockerExecutor:
|
|
264
260
|
module_output_path=self._options['module_output_path'],
|
265
261
|
stderr=full_stderr,
|
266
262
|
stdout=full_stdout,
|
267
|
-
pre_start_diff=metadata['pre_start_diff'],
|
268
263
|
)
|
269
264
|
|
270
265
|
def cleanup(self):
|
@@ -532,12 +527,11 @@ class DockerExecutor:
|
|
532
527
|
module_output_path: str,
|
533
528
|
stderr: bytes,
|
534
529
|
stdout: bytes,
|
535
|
-
pre_start_diff: List[Dict],
|
536
530
|
) -> None:
|
537
531
|
mapped_files: List[FileInContainer] = []
|
538
532
|
try:
|
539
533
|
mappings = Mappings(mappings_list=self._options['module']['output_files_mappings'], arguments=arguments)
|
540
|
-
changed_files: List[FileInContainer] = self._get_changed_files_in_docker_container(
|
534
|
+
changed_files: List[FileInContainer] = self._get_changed_files_in_docker_container()
|
541
535
|
|
542
536
|
for file in changed_files:
|
543
537
|
if file.is_file():
|
@@ -602,16 +596,35 @@ class DockerExecutor:
|
|
602
596
|
|
603
597
|
return None
|
604
598
|
|
605
|
-
def _get_changed_files_in_docker_container(self
|
599
|
+
def _get_changed_files_in_docker_container(self) -> List[FileInContainer]:
|
606
600
|
from_mappings = [mapping['from_path'] for mapping in self._options['module']['output_files_mappings']]
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
601
|
+
overlay_upper_dir_path = self._get_container_upper_dir_path()
|
602
|
+
|
603
|
+
if not overlay_upper_dir_path:
|
604
|
+
logger_no_user_data.debug(
|
605
|
+
'Docker UpperDir not available. Falling back to container.get_archive() for file extraction'
|
606
|
+
)
|
607
|
+
post_run_diff = self._container.diff()
|
608
|
+
run_diff_paths: List[str] = [
|
609
|
+
obj['Path']
|
610
|
+
for obj in post_run_diff
|
611
|
+
if obj['Kind'] in (DockerDiffKind.CHANGED.value, DockerDiffKind.ADDED.value)
|
612
|
+
]
|
613
|
+
else:
|
614
|
+
logger_no_user_data.debug(f'overlay_upper_dir_path={overlay_upper_dir_path}')
|
615
|
+
# Recursively find all files in overlay_upper_dir_path
|
616
|
+
run_diff_paths = []
|
617
|
+
for root, _, files in os.walk(overlay_upper_dir_path):
|
618
|
+
# Convert absolute paths to container paths
|
619
|
+
rel_path = os.path.relpath(root, overlay_upper_dir_path)
|
620
|
+
if rel_path == '.':
|
621
|
+
# Handle the root directory case
|
622
|
+
for file in files:
|
623
|
+
run_diff_paths.append(f'/{file}')
|
624
|
+
else:
|
625
|
+
# Handle subdirectories
|
626
|
+
for file in files:
|
627
|
+
run_diff_paths.append(f'/{rel_path}/{file}')
|
615
628
|
|
616
629
|
known_directories = set()
|
617
630
|
for path in run_diff_paths:
|
@@ -629,14 +642,6 @@ class DockerExecutor:
|
|
629
642
|
return True
|
630
643
|
return False
|
631
644
|
|
632
|
-
overlay_upper_dir_path = self._get_container_upper_dir_path()
|
633
|
-
if not overlay_upper_dir_path:
|
634
|
-
logger_no_user_data.debug(
|
635
|
-
'Docker UpperDir not available. Falling back to container.get_archive() for file extraction'
|
636
|
-
)
|
637
|
-
|
638
|
-
logger_no_user_data.debug(f'overlay_upper_dir_path={overlay_upper_dir_path}')
|
639
|
-
|
640
645
|
files_and_empty_dirs: List[FileInContainer] = []
|
641
646
|
for path in run_diff_paths:
|
642
647
|
if path not in known_directories and path_is_included_in_from_mappings(path):
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/_internal/data_record/remote_storage_endpoint.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/docker_types.py
RENAMED
File without changes
|
{pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/executors/tars/__init__.py
RENAMED
File without changes
|
File without changes
|
{pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/job_max_runtime_timer_thread.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/job_worker/utilization_reporter_thread.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pybiolib-1.2.561 → pybiolib-1.2.567}/biolib/compute_node/webserver/gunicorn_flask_application.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|