pybiolib 1.2.223__tar.gz → 1.2.243__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 (124) hide show
  1. {pybiolib-1.2.223 → pybiolib-1.2.243}/PKG-INFO +1 -1
  2. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_runtime/runtime.py +11 -0
  3. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/biolib_app_api.py +21 -5
  4. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/job_types.py +2 -1
  5. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_errors.py +3 -0
  6. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/executors/docker_executor.py +27 -15
  7. {pybiolib-1.2.223 → pybiolib-1.2.243}/pyproject.toml +1 -1
  8. {pybiolib-1.2.223 → pybiolib-1.2.243}/LICENSE +0 -0
  9. {pybiolib-1.2.223 → pybiolib-1.2.243}/PYPI_README.md +0 -0
  10. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/__init__.py +0 -0
  11. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_data_record/data_record.py +0 -0
  12. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/__init__.py +0 -0
  13. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/data_record/__init__.py +0 -0
  14. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/data_record/data_record.py +0 -0
  15. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/data_record/push_data.py +0 -0
  16. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/data_record/remote_storage_endpoint.py +0 -0
  17. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/file_utils.py +0 -0
  18. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/fuse_mount/__init__.py +0 -0
  19. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/fuse_mount/experiment_fuse_mount.py +0 -0
  20. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/http_client.py +0 -0
  21. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/lfs/__init__.py +0 -0
  22. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/lfs/cache.py +0 -0
  23. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/libs/__init__.py +0 -0
  24. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/libs/fusepy/__init__.py +0 -0
  25. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/push_application.py +0 -0
  26. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/runtime.py +0 -0
  27. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/__init__.py +0 -0
  28. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/app.py +0 -0
  29. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/data_record.py +0 -0
  30. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/experiment.py +0 -0
  31. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/file_node.py +0 -0
  32. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/resource.py +0 -0
  33. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/resource_version.py +0 -0
  34. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/types/typing.py +0 -0
  35. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/utils/__init__.py +0 -0
  36. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/_internal/utils/multinode.py +0 -0
  37. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/api/__init__.py +0 -0
  38. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/api/client.py +0 -0
  39. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/app/__init__.py +0 -0
  40. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/app/app.py +0 -0
  41. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/app/search_apps.py +0 -0
  42. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/__init__.py +0 -0
  43. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/api_client.py +0 -0
  44. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/app_types.py +0 -0
  45. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/auth.py +0 -0
  46. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/biolib_job_api.py +0 -0
  47. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/common_types.py +0 -0
  48. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/lfs_types.py +0 -0
  49. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_api_client/user_state.py +0 -0
  50. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/__init__.py +0 -0
  51. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/base_bbf_package.py +0 -0
  52. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/file_in_container.py +0 -0
  53. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/module_input.py +0 -0
  54. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/module_output_v2.py +0 -0
  55. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/remote_endpoints.py +0 -0
  56. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/remote_stream_seeker.py +0 -0
  57. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/saved_job.py +0 -0
  58. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/stdout_and_stderr.py +0 -0
  59. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/system_exception.py +0 -0
  60. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/system_status_update.py +0 -0
  61. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_binary_format/utils.py +0 -0
  62. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_docker_client/__init__.py +0 -0
  63. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_download_container.py +0 -0
  64. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/biolib_logging.py +0 -0
  65. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/__init__.py +0 -0
  66. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/auth.py +0 -0
  67. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/data_record.py +0 -0
  68. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/download_container.py +0 -0
  69. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/init.py +0 -0
  70. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/lfs.py +0 -0
  71. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/push.py +0 -0
  72. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/run.py +0 -0
  73. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/runtime.py +0 -0
  74. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/cli/start.py +0 -0
  75. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/.gitignore +0 -0
  76. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/__init__.py +0 -0
  77. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/cloud_utils/__init__.py +0 -0
  78. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/cloud_utils/cloud_utils.py +0 -0
  79. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/__init__.py +0 -0
  80. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/cache_state.py +0 -0
  81. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/cache_types.py +0 -0
  82. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/docker_image_cache.py +0 -0
  83. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/executors/__init__.py +0 -0
  84. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/executors/docker_types.py +0 -0
  85. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/executors/tars/__init__.py +0 -0
  86. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/executors/types.py +0 -0
  87. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py +0 -0
  88. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/job_max_runtime_timer_thread.py +0 -0
  89. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/job_storage.py +0 -0
  90. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/job_worker.py +0 -0
  91. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/large_file_system.py +0 -0
  92. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/mappings.py +0 -0
  93. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/utilization_reporter_thread.py +0 -0
  94. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/job_worker/utils.py +0 -0
  95. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/remote_host_proxy.py +0 -0
  96. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/socker_listener_thread.py +0 -0
  97. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/socket_sender_thread.py +0 -0
  98. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/utils.py +0 -0
  99. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/webserver/__init__.py +0 -0
  100. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/webserver/gunicorn_flask_application.py +0 -0
  101. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/webserver/webserver.py +0 -0
  102. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/webserver/webserver_types.py +0 -0
  103. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/webserver/webserver_utils.py +0 -0
  104. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/compute_node/webserver/worker_thread.py +0 -0
  105. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/experiments/__init__.py +0 -0
  106. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/experiments/experiment.py +0 -0
  107. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/jobs/__init__.py +0 -0
  108. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/jobs/job.py +0 -0
  109. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/jobs/job_result.py +0 -0
  110. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/jobs/types.py +0 -0
  111. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/runtime/__init__.py +0 -0
  112. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/sdk/__init__.py +0 -0
  113. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/tables.py +0 -0
  114. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/templates/__init__.py +0 -0
  115. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/templates/example_app.py +0 -0
  116. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/typing_utils.py +0 -0
  117. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/user/__init__.py +0 -0
  118. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/user/sign_in.py +0 -0
  119. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/utils/__init__.py +0 -0
  120. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/utils/app_uri.py +0 -0
  121. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/utils/cache_state.py +0 -0
  122. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/utils/multipart_uploader.py +0 -0
  123. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/utils/seq_util.py +0 -0
  124. {pybiolib-1.2.223 → pybiolib-1.2.243}/biolib/utils/zip/remote_zip.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybiolib
3
- Version: 1.2.223
3
+ Version: 1.2.243
4
4
  Summary: BioLib Python Client
5
5
  Home-page: https://github.com/biolib
6
6
  License: MIT
@@ -48,6 +48,17 @@ class Runtime:
48
48
  except BaseException as error:
49
49
  raise BioLibRuntimeError(f'Unable to get system secret: {secret_name}') from error
50
50
 
51
+ @staticmethod
52
+ def get_temporary_client_secret(secret_name: str) -> bytes:
53
+ assert re.match(
54
+ '^[a-zA-Z0-9_-]*$', secret_name
55
+ ), 'Secret name can only contain alphanumeric characters and dashes or underscores '
56
+ try:
57
+ with open(f'/biolib/temporary-client-secrets/{secret_name}', 'rb') as file:
58
+ return file.read()
59
+ except BaseException as error:
60
+ raise BioLibRuntimeError(f'Unable to get secret: {secret_name}') from error
61
+
51
62
  @staticmethod
52
63
  def set_main_result_prefix(result_prefix: str) -> None:
53
64
  job_data = Runtime._get_job_data()
@@ -3,6 +3,7 @@ import os
3
3
  import random
4
4
  import re
5
5
  import subprocess
6
+ import urllib.parse
6
7
 
7
8
  import biolib.api
8
9
  from biolib import biolib_errors
@@ -10,6 +11,7 @@ from biolib._internal.http_client import HttpError
10
11
  from biolib.biolib_api_client import AppGetResponse
11
12
  from biolib.biolib_logging import logger
12
13
  from biolib.typing_utils import Optional
14
+ from biolib.utils import load_base_url_from_env
13
15
 
14
16
 
15
17
  def encode_multipart(data, files):
@@ -61,15 +63,29 @@ def _get_git_repository_url() -> str:
61
63
  except BaseException:
62
64
  return ''
63
65
 
66
+ def _get_app_uri_from_str(input_str: str) -> str:
67
+ parsed_base_url = urllib.parse.urlparse(load_base_url_from_env())
68
+ parsed_uri = urllib.parse.urlparse(input_str)
69
+ if parsed_uri.netloc != '' and parsed_base_url.netloc != parsed_uri.netloc:
70
+ raise biolib_errors.ValidationError(
71
+ f'Invalid URI. The hostname "{parsed_base_url.netloc}" is not recognized.'
72
+ )
73
+ elif parsed_uri.netloc != '' and parsed_uri.path[1] != '@':
74
+ uri = f'@{parsed_uri.netloc}{parsed_uri.path}'
75
+ elif parsed_uri.netloc == '' and parsed_uri.path.startswith (parsed_base_url.netloc):
76
+ uri = f'@{parsed_uri.path}'
77
+ else:
78
+ uri = parsed_uri.path
79
+ uri = uri.strip('/')
80
+ # Replace frontend version path with app_uri compatible version (if supplied)
81
+ uri = re.sub(r'/version/(?P<version>(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*))(/)?$', r':\g<version>', uri)
82
+ return uri
83
+
64
84
 
65
85
  class BiolibAppApi:
66
86
  @staticmethod
67
87
  def get_by_uri(uri: str) -> AppGetResponse:
68
- # Replace protocol with @ (if supplied)
69
- uri = re.sub(r'^http(s)?://', '@', uri)
70
- # Replace frontend version path with app_uri compatible version (if supplied)
71
- uri = re.sub(r'/version/(?P<version>(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*))(/)?$', r':\g<version>', uri)
72
-
88
+ uri = _get_app_uri_from_str(uri)
73
89
  try:
74
90
  response = biolib.api.client.get(path='/app/', params={'uri': uri})
75
91
  app_response: AppGetResponse = response.json()
@@ -2,7 +2,7 @@ from enum import Enum
2
2
 
3
3
  from biolib.biolib_api_client.app_types import AppVersionOnJob, RemoteHost
4
4
  from biolib.compute_node.webserver.webserver_types import ComputeNodeInfo
5
- from biolib.typing_utils import List, Optional, TypedDict
5
+ from biolib.typing_utils import Dict, List, Optional, TypedDict
6
6
 
7
7
 
8
8
  class JobState(Enum):
@@ -31,6 +31,7 @@ class _Job(TypedDict):
31
31
  # type optional keys with total=False
32
32
  class CreatedJobDict(_Job, total=False):
33
33
  custom_compute_node_url: str
34
+ temporary_client_secrets: Dict[str, str]
34
35
 
35
36
 
36
37
  class CloudJob(TypedDict):
@@ -7,6 +7,9 @@ class BioLibError(Exception):
7
7
  super().__init__(message)
8
8
  self.message = message
9
9
 
10
+ class ValidationError(BioLibError):
11
+ def __init__(self, message: Optional[str] = None):
12
+ super().__init__(message=message or 'Invalid input.')
10
13
 
11
14
  class NotFound(BioLibError):
12
15
 
@@ -69,7 +69,9 @@ class DockerExecutor:
69
69
 
70
70
  # If BIOLIB_SECRETS_TMPFS_PATH is set create the temporary directory there
71
71
  self._tmp_secrets_dir = tempfile.TemporaryDirectory(dir=utils.BIOLIB_SECRETS_TMPFS_PATH or None)
72
+ self._tmp_client_secrets_dir = tempfile.TemporaryDirectory(dir=utils.BIOLIB_SECRETS_TMPFS_PATH or None)
72
73
  os.chmod(self._tmp_secrets_dir.name, 0o755)
74
+ os.chmod(self._tmp_client_secrets_dir.name, 0o755)
73
75
 
74
76
  @property
75
77
  def _container(self) -> Container:
@@ -263,6 +265,7 @@ class DockerExecutor:
263
265
 
264
266
  logger_no_user_data.debug(f'Deleted compute container in: {time.time() - container_time}')
265
267
  self._tmp_secrets_dir.cleanup()
268
+ self._tmp_client_secrets_dir.cleanup()
266
269
 
267
270
  # TODO: type this method
268
271
  def _initialize_docker_container(self, module_input):
@@ -285,11 +288,23 @@ class DockerExecutor:
285
288
  app_uri=self._options['job']['app_uri'],
286
289
  is_environment_biolib_cloud=bool(utils.IS_RUNNING_IN_CLOUD),
287
290
  )
288
- secrets: Dict[str, str] = dict(
289
- **module.get('secrets', {}),
290
- biolib_system_secret=json.dumps(biolib_system_secret, indent=4),
291
+ docker_volume_mounts.append(
292
+ self._create_secrets_mount(
293
+ source_dir=self._tmp_secrets_dir.name + '/',
294
+ target_dir='/biolib/secrets/',
295
+ secrets=dict(
296
+ **module.get('secrets', {}),
297
+ biolib_system_secret=json.dumps(biolib_system_secret, indent=4),
298
+ ),
299
+ )
300
+ )
301
+ docker_volume_mounts.append(
302
+ self._create_secrets_mount(
303
+ source_dir=self._tmp_client_secrets_dir.name + '/',
304
+ target_dir='/biolib/temporary-client-secrets/',
305
+ secrets=self._options['job'].get('temporary_client_secrets', {}),
306
+ )
291
307
  )
292
- docker_volume_mounts.append(self._create_secrets_mount(secrets))
293
308
 
294
309
  environment_vars = {}
295
310
 
@@ -498,8 +513,8 @@ class DockerExecutor:
498
513
  stdout=stdout,
499
514
  )
500
515
  except Exception as exception:
501
- logger.error("Hit Error 23")
502
- logger.exception("Error")
516
+ logger.error('Hit Error 23')
517
+ logger.exception('Error')
503
518
  logger.error(str(exception))
504
519
  time.sleep(3)
505
520
  raise ComputeProcessException(
@@ -586,19 +601,16 @@ class DockerExecutor:
586
601
 
587
602
  return files_and_empty_dirs
588
603
 
589
- def _create_secrets_mount(self, secrets: Dict[str, str]) -> docker.types.Mount:
590
- job_uuid = self._options['job']['public_id']
604
+ def _create_secrets_mount(self, source_dir: str, target_dir: str, secrets: Dict[str, str]) -> docker.types.Mount:
605
+ assert source_dir.startswith('/') and source_dir.endswith('/'), 'source_dir must start and end with slash'
606
+ assert target_dir.startswith('/') and target_dir.endswith('/'), 'target_dir must start and end with slash'
591
607
 
608
+ job_uuid = self._options['job']['public_id']
592
609
  for key, value in secrets.items():
593
610
  if re.match(r'^[a-zA-Z0-9-_]+$', key):
594
- with open(f'{self._tmp_secrets_dir.name}/{key}', 'w') as secret_file:
611
+ with open(f'{source_dir}{key}', 'w') as secret_file:
595
612
  secret_file.write(value)
596
613
  else:
597
614
  logger_no_user_data.warning(f'Job {job_uuid} uses secret with a key not matching validation regex')
598
615
 
599
- return docker.types.Mount(
600
- read_only=True,
601
- source=f'{self._tmp_secrets_dir.name}/',
602
- target='/biolib/secrets/',
603
- type='bind',
604
- )
616
+ return docker.types.Mount(read_only=True, source=source_dir, target=target_dir, type='bind')
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pybiolib"
3
- version = "1.2.223"
3
+ version = "1.2.243"
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
File without changes
File without changes
File without changes