pybiolib 1.2.1304__tar.gz → 1.2.1308__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.
Files changed (164) hide show
  1. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/PKG-INFO +1 -1
  2. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/push_application.py +56 -7
  3. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/pyproject.toml +1 -1
  4. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/LICENSE +0 -0
  5. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/PYPI_README.md +0 -0
  6. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/__init__.py +0 -0
  7. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_data_record/data_record.py +0 -0
  8. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/__init__.py +0 -0
  9. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/add_copilot_prompts.py +0 -0
  10. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/add_gui_files.py +0 -0
  11. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/data_record/__init__.py +0 -0
  12. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/data_record/data_record.py +0 -0
  13. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/data_record/push_data.py +0 -0
  14. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/data_record/remote_storage_endpoint.py +0 -0
  15. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/errors.py +0 -0
  16. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/file_utils.py +0 -0
  17. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/fuse_mount/__init__.py +0 -0
  18. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/fuse_mount/experiment_fuse_mount.py +0 -0
  19. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/http_client.py +0 -0
  20. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/lfs/__init__.py +0 -0
  21. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/lfs/cache.py +0 -0
  22. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/libs/__init__.py +0 -0
  23. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/libs/fusepy/__init__.py +0 -0
  24. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/runtime.py +0 -0
  25. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/string_utils.py +0 -0
  26. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/__init__.py +0 -0
  27. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/copilot_template/.github/instructions/general-app-knowledge.instructions.md +0 -0
  28. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/copilot_template/.github/instructions/style-general.instructions.md +0 -0
  29. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/copilot_template/.github/instructions/style-python.instructions.md +0 -0
  30. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/copilot_template/.github/instructions/style-react-ts.instructions.md +0 -0
  31. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/copilot_template/.github/prompts/biolib_app_inputs.prompt.md +0 -0
  32. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/copilot_template/.github/prompts/biolib_onboard_repo.prompt.md +0 -0
  33. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/copilot_template/.github/prompts/biolib_run_apps.prompt.md +0 -0
  34. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/.yarnrc.yml +0 -0
  35. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/App.tsx +0 -0
  36. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/Dockerfile +0 -0
  37. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/index.css +0 -0
  38. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/index.html +0 -0
  39. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/index.tsx +0 -0
  40. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/package.json +0 -0
  41. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/tsconfig.json +0 -0
  42. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/gui_template/vite.config.mts +0 -0
  43. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/init_template/.biolib/config.yml +0 -0
  44. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/init_template/.github/workflows/biolib.yml +0 -0
  45. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/init_template/.gitignore +0 -0
  46. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/init_template/Dockerfile +0 -0
  47. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/init_template/requirements.txt +0 -0
  48. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/init_template/run.py +0 -0
  49. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/init_template/run.sh +0 -0
  50. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/templates/templates.py +0 -0
  51. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/tree_utils.py +0 -0
  52. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/__init__.py +0 -0
  53. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/account.py +0 -0
  54. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/account_member.py +0 -0
  55. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/app.py +0 -0
  56. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/data_record.py +0 -0
  57. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/experiment.py +0 -0
  58. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/file_node.py +0 -0
  59. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/push.py +0 -0
  60. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/resource.py +0 -0
  61. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/resource_permission.py +0 -0
  62. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/resource_version.py +0 -0
  63. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/result.py +0 -0
  64. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/typing.py +0 -0
  65. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/types/user.py +0 -0
  66. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/utils/__init__.py +0 -0
  67. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/utils/job_url.py +0 -0
  68. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_internal/utils/multinode.py +0 -0
  69. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_runtime/runtime.py +0 -0
  70. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/_session/session.py +0 -0
  71. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/api/__init__.py +0 -0
  72. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/api/client.py +0 -0
  73. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/app/__init__.py +0 -0
  74. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/app/app.py +0 -0
  75. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/app/search_apps.py +0 -0
  76. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/__init__.py +0 -0
  77. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/api_client.py +0 -0
  78. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/app_types.py +0 -0
  79. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/auth.py +0 -0
  80. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/biolib_app_api.py +0 -0
  81. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/biolib_job_api.py +0 -0
  82. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/common_types.py +0 -0
  83. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/job_types.py +0 -0
  84. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/lfs_types.py +0 -0
  85. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_api_client/user_state.py +0 -0
  86. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/__init__.py +0 -0
  87. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/base_bbf_package.py +0 -0
  88. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/file_in_container.py +0 -0
  89. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/module_input.py +0 -0
  90. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/module_output_v2.py +0 -0
  91. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/remote_endpoints.py +0 -0
  92. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/remote_stream_seeker.py +0 -0
  93. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/saved_job.py +0 -0
  94. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/stdout_and_stderr.py +0 -0
  95. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/system_exception.py +0 -0
  96. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/system_status_update.py +0 -0
  97. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_binary_format/utils.py +0 -0
  98. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_docker_client/__init__.py +0 -0
  99. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_download_container.py +0 -0
  100. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_errors.py +0 -0
  101. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/biolib_logging.py +0 -0
  102. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/__init__.py +0 -0
  103. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/auth.py +0 -0
  104. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/data_record.py +0 -0
  105. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/download_container.py +0 -0
  106. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/init.py +0 -0
  107. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/lfs.py +0 -0
  108. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/push.py +0 -0
  109. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/run.py +0 -0
  110. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/runtime.py +0 -0
  111. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/sdk.py +0 -0
  112. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/cli/start.py +0 -0
  113. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/.gitignore +0 -0
  114. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/__init__.py +0 -0
  115. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/cloud_utils/__init__.py +0 -0
  116. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/cloud_utils/cloud_utils.py +0 -0
  117. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/__init__.py +0 -0
  118. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/cache_state.py +0 -0
  119. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/cache_types.py +0 -0
  120. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/docker_image_cache.py +0 -0
  121. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/executors/__init__.py +0 -0
  122. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/executors/docker_executor.py +0 -0
  123. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/executors/docker_types.py +0 -0
  124. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/executors/tars/__init__.py +0 -0
  125. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/executors/types.py +0 -0
  126. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py +0 -0
  127. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/job_max_runtime_timer_thread.py +0 -0
  128. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/job_storage.py +0 -0
  129. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/job_worker.py +0 -0
  130. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/large_file_system.py +0 -0
  131. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/mappings.py +0 -0
  132. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/utilization_reporter_thread.py +0 -0
  133. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/job_worker/utils.py +0 -0
  134. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/remote_host_proxy.py +0 -0
  135. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/socker_listener_thread.py +0 -0
  136. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/socket_sender_thread.py +0 -0
  137. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/utils.py +0 -0
  138. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/__init__.py +0 -0
  139. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/compute_node_results_proxy.py +0 -0
  140. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/gunicorn_flask_application.py +0 -0
  141. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/proxy_utils.py +0 -0
  142. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/webserver.py +0 -0
  143. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/webserver_types.py +0 -0
  144. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/webserver_utils.py +0 -0
  145. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/compute_node/webserver/worker_thread.py +0 -0
  146. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/experiments/__init__.py +0 -0
  147. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/experiments/experiment.py +0 -0
  148. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/jobs/__init__.py +0 -0
  149. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/jobs/job.py +0 -0
  150. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/jobs/job_result.py +0 -0
  151. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/jobs/types.py +0 -0
  152. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/py.typed +0 -0
  153. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/runtime/__init__.py +0 -0
  154. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/sdk/__init__.py +0 -0
  155. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/tables.py +0 -0
  156. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/typing_utils.py +0 -0
  157. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/user/__init__.py +0 -0
  158. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/user/sign_in.py +0 -0
  159. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/utils/__init__.py +0 -0
  160. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/utils/app_uri.py +0 -0
  161. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/utils/cache_state.py +0 -0
  162. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/utils/multipart_uploader.py +0 -0
  163. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/utils/seq_util.py +0 -0
  164. {pybiolib-1.2.1304 → pybiolib-1.2.1308}/biolib/utils/zip/remote_zip.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybiolib
3
- Version: 1.2.1304
3
+ Version: 1.2.1308
4
4
  Summary: BioLib Python Client
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -21,7 +21,7 @@ from biolib.biolib_api_client.biolib_app_api import BiolibAppApi
21
21
  from biolib.biolib_docker_client import BiolibDockerClient
22
22
  from biolib.biolib_errors import BioLibError
23
23
  from biolib.biolib_logging import logger
24
- from biolib.typing_utils import Iterable, Optional, Set, TypedDict
24
+ from biolib.typing_utils import Dict, Iterable, Optional, Set, TypedDict
25
25
  from biolib.utils.app_uri import parse_app_uri
26
26
 
27
27
  REGEX_MARKDOWN_INLINE_IMAGE = re.compile(r'!\[(?P<alt>.*)\]\((?P<src>.*)\)')
@@ -109,8 +109,10 @@ def _process_docker_status_updates_with_progress_bar(status_updates: Iterable[Do
109
109
 
110
110
 
111
111
  def _process_docker_status_updates_with_logging(status_updates: Iterable[DockerStatusUpdate], action: str) -> None:
112
- layer_progress = {}
113
- layer_status = {}
112
+ layer_progress: Dict[str, float] = {}
113
+ layer_status: Dict[str, str] = {}
114
+ layer_details: Dict[str, Dict[str, int]] = {}
115
+ layer_bytes_at_last_log: Dict[str, int] = {}
114
116
  last_log_time = time.time()
115
117
 
116
118
  logger.info(f'{action} Docker image...')
@@ -128,6 +130,7 @@ def _process_docker_status_updates_with_logging(status_updates: Iterable[DockerS
128
130
  percentage = (current / total * 100) if total > 0 else 0
129
131
  layer_progress[layer_id] = percentage
130
132
  layer_status[layer_id] = f'{action.lower()}'
133
+ layer_details[layer_id] = {'current': current, 'total': total}
131
134
  elif update.get('status') == 'Layer already exists':
132
135
  layer_progress[layer_id] = 100
133
136
  layer_status[layer_id] = 'already exists'
@@ -146,16 +149,33 @@ def _process_docker_status_updates_with_logging(status_updates: Iterable[DockerS
146
149
  logger.info(f'{action} Docker image - {status}')
147
150
 
148
151
  if current_time - last_log_time >= 10.0:
149
- _log_progress_summary(action, layer_progress, layer_status)
152
+ _log_progress_summary(
153
+ action,
154
+ layer_progress,
155
+ layer_status,
156
+ layer_details,
157
+ layer_bytes_at_last_log,
158
+ current_time - last_log_time,
159
+ )
160
+ layer_bytes_at_last_log = {lid: details['current'] for lid, details in layer_details.items()}
150
161
  last_log_time = current_time
151
162
 
152
- _log_progress_summary(action, layer_progress, layer_status)
163
+ _log_progress_summary(
164
+ action, layer_progress, layer_status, layer_details, layer_bytes_at_last_log, time.time() - last_log_time
165
+ )
153
166
  if action == 'Pushing':
154
167
  logger.info('Pushing final image manifest...')
155
168
  logger.info(f'{action} Docker image completed')
156
169
 
157
170
 
158
- def _log_progress_summary(action: str, layer_progress: dict, layer_status: dict) -> None:
171
+ def _log_progress_summary(
172
+ action: str,
173
+ layer_progress: Dict[str, float],
174
+ layer_status: Dict[str, str],
175
+ layer_details: Dict[str, Dict[str, int]],
176
+ layer_bytes_at_last_log: Dict[str, int],
177
+ time_delta: float,
178
+ ) -> None:
159
179
  if not layer_progress and not layer_status:
160
180
  return
161
181
 
@@ -174,7 +194,36 @@ def _log_progress_summary(action: str, layer_progress: dict, layer_status: dict)
174
194
  if status in ['preparing', 'waiting', 'pushing', 'uploading'] and layer_progress.get(layer_id, 0) < 100
175
195
  ]
176
196
 
177
- if active_layers:
197
+ if active_layers and layer_details:
198
+ total_bytes_transferred = 0
199
+ layer_info_parts = []
200
+
201
+ for layer_id in active_layers[:5]:
202
+ if layer_id in layer_details:
203
+ details = layer_details[layer_id]
204
+ current = details['current']
205
+ total = details['total']
206
+ percentage = layer_progress.get(layer_id, 0)
207
+
208
+ bytes_since_last = current - layer_bytes_at_last_log.get(layer_id, 0)
209
+ total_bytes_transferred += bytes_since_last
210
+
211
+ current_mb = current / (1024 * 1024)
212
+ total_mb = total / (1024 * 1024)
213
+ layer_info_parts.append(f'{layer_id}: {current_mb:.1f}/{total_mb:.1f} MB ({percentage:.1f}%)')
214
+
215
+ speed_info = ''
216
+ if time_delta > 0 and total_bytes_transferred > 0:
217
+ speed_mbps = (total_bytes_transferred / (1024 * 1024)) / time_delta
218
+ speed_info = f' @ {speed_mbps:.2f} MB/s'
219
+
220
+ more_layers_info = ''
221
+ if len(active_layers) > 5:
222
+ more_layers_info = f' (+ {len(active_layers) - 5} more)'
223
+
224
+ if layer_info_parts:
225
+ logger.info(f'Active layers: {", ".join(layer_info_parts)}{speed_info}{more_layers_info}')
226
+ elif active_layers:
178
227
  logger.info(f'Active layers: {", ".join(active_layers[:5])}{"..." if len(active_layers) > 5 else ""}')
179
228
 
180
229
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pybiolib"
3
- version = "1.2.1304"
3
+ version = "1.2.1308"
4
4
  description = "BioLib Python Client"
5
5
  readme = "PYPI_README.md"
6
6
  license = "MIT"
File without changes
File without changes
File without changes