pybiolib 1.2.230__tar.gz → 1.2.249__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.230 → pybiolib-1.2.249}/PKG-INFO +1 -1
  2. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/app/app.py +4 -2
  3. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/biolib_app_api.py +21 -5
  4. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/biolib_job_api.py +4 -0
  5. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_errors.py +3 -0
  6. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/jobs/job.py +3 -1
  7. {pybiolib-1.2.230 → pybiolib-1.2.249}/pyproject.toml +1 -1
  8. {pybiolib-1.2.230 → pybiolib-1.2.249}/LICENSE +0 -0
  9. {pybiolib-1.2.230 → pybiolib-1.2.249}/PYPI_README.md +0 -0
  10. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/__init__.py +0 -0
  11. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_data_record/data_record.py +0 -0
  12. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/__init__.py +0 -0
  13. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/data_record/__init__.py +0 -0
  14. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/data_record/data_record.py +0 -0
  15. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/data_record/push_data.py +0 -0
  16. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/data_record/remote_storage_endpoint.py +0 -0
  17. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/file_utils.py +0 -0
  18. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/fuse_mount/__init__.py +0 -0
  19. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/fuse_mount/experiment_fuse_mount.py +0 -0
  20. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/http_client.py +0 -0
  21. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/lfs/__init__.py +0 -0
  22. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/lfs/cache.py +0 -0
  23. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/libs/__init__.py +0 -0
  24. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/libs/fusepy/__init__.py +0 -0
  25. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/push_application.py +0 -0
  26. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/runtime.py +0 -0
  27. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/__init__.py +0 -0
  28. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/app.py +0 -0
  29. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/data_record.py +0 -0
  30. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/experiment.py +0 -0
  31. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/file_node.py +0 -0
  32. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/resource.py +0 -0
  33. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/resource_version.py +0 -0
  34. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/types/typing.py +0 -0
  35. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/utils/__init__.py +0 -0
  36. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_internal/utils/multinode.py +0 -0
  37. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/_runtime/runtime.py +0 -0
  38. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/api/__init__.py +0 -0
  39. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/api/client.py +0 -0
  40. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/app/__init__.py +0 -0
  41. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/app/search_apps.py +0 -0
  42. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/__init__.py +0 -0
  43. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/api_client.py +0 -0
  44. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/app_types.py +0 -0
  45. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/auth.py +0 -0
  46. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/common_types.py +0 -0
  47. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/job_types.py +0 -0
  48. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/lfs_types.py +0 -0
  49. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_api_client/user_state.py +0 -0
  50. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/__init__.py +0 -0
  51. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/base_bbf_package.py +0 -0
  52. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/file_in_container.py +0 -0
  53. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/module_input.py +0 -0
  54. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/module_output_v2.py +0 -0
  55. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/remote_endpoints.py +0 -0
  56. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/remote_stream_seeker.py +0 -0
  57. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/saved_job.py +0 -0
  58. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/stdout_and_stderr.py +0 -0
  59. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/system_exception.py +0 -0
  60. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/system_status_update.py +0 -0
  61. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_binary_format/utils.py +0 -0
  62. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_docker_client/__init__.py +0 -0
  63. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_download_container.py +0 -0
  64. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/biolib_logging.py +0 -0
  65. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/__init__.py +0 -0
  66. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/auth.py +0 -0
  67. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/data_record.py +0 -0
  68. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/download_container.py +0 -0
  69. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/init.py +0 -0
  70. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/lfs.py +0 -0
  71. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/push.py +0 -0
  72. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/run.py +0 -0
  73. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/runtime.py +0 -0
  74. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/cli/start.py +0 -0
  75. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/.gitignore +0 -0
  76. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/__init__.py +0 -0
  77. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/cloud_utils/__init__.py +0 -0
  78. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/cloud_utils/cloud_utils.py +0 -0
  79. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/__init__.py +0 -0
  80. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/cache_state.py +0 -0
  81. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/cache_types.py +0 -0
  82. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/docker_image_cache.py +0 -0
  83. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/executors/__init__.py +0 -0
  84. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/executors/docker_executor.py +0 -0
  85. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/executors/docker_types.py +0 -0
  86. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/executors/tars/__init__.py +0 -0
  87. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/executors/types.py +0 -0
  88. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py +0 -0
  89. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/job_max_runtime_timer_thread.py +0 -0
  90. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/job_storage.py +0 -0
  91. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/job_worker.py +0 -0
  92. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/large_file_system.py +0 -0
  93. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/mappings.py +0 -0
  94. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/utilization_reporter_thread.py +0 -0
  95. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/job_worker/utils.py +0 -0
  96. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/remote_host_proxy.py +0 -0
  97. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/socker_listener_thread.py +0 -0
  98. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/socket_sender_thread.py +0 -0
  99. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/utils.py +0 -0
  100. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/webserver/__init__.py +0 -0
  101. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/webserver/gunicorn_flask_application.py +0 -0
  102. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/webserver/webserver.py +0 -0
  103. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/webserver/webserver_types.py +0 -0
  104. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/webserver/webserver_utils.py +0 -0
  105. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/compute_node/webserver/worker_thread.py +0 -0
  106. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/experiments/__init__.py +0 -0
  107. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/experiments/experiment.py +0 -0
  108. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/jobs/__init__.py +0 -0
  109. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/jobs/job_result.py +0 -0
  110. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/jobs/types.py +0 -0
  111. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/runtime/__init__.py +0 -0
  112. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/sdk/__init__.py +0 -0
  113. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/tables.py +0 -0
  114. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/templates/__init__.py +0 -0
  115. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/templates/example_app.py +0 -0
  116. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/typing_utils.py +0 -0
  117. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/user/__init__.py +0 -0
  118. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/user/sign_in.py +0 -0
  119. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/utils/__init__.py +0 -0
  120. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/utils/app_uri.py +0 -0
  121. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/utils/cache_state.py +0 -0
  122. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/utils/multipart_uploader.py +0 -0
  123. {pybiolib-1.2.230 → pybiolib-1.2.249}/biolib/utils/seq_util.py +0 -0
  124. {pybiolib-1.2.230 → pybiolib-1.2.249}/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.230
3
+ Version: 1.2.249
4
4
  Summary: BioLib Python Client
5
5
  Home-page: https://github.com/biolib
6
6
  License: MIT
@@ -16,7 +16,7 @@ from biolib.biolib_logging import logger
16
16
  from biolib.compute_node.job_worker.job_worker import JobWorker
17
17
  from biolib.experiments.experiment import Experiment
18
18
  from biolib.jobs import Job
19
- from biolib.typing_utils import Optional
19
+ from biolib.typing_utils import Optional, Dict
20
20
  from biolib.utils.app_uri import parse_app_uri
21
21
 
22
22
 
@@ -58,6 +58,7 @@ class BioLibApp:
58
58
  notify: bool = False,
59
59
  machine_count: Optional[int] = None,
60
60
  experiment: Optional[str] = None,
61
+ temporary_client_secrets: Optional[Dict[str, str]] = None,
61
62
  ) -> Job:
62
63
  if experiment_id and experiment:
63
64
  raise ValueError('Only one of experiment_id and experiment can be specified')
@@ -91,6 +92,7 @@ class BioLibApp:
91
92
  result_prefix=result_prefix,
92
93
  timeout=timeout,
93
94
  requested_machine_count=machine_count,
95
+ temporary_client_secrets=temporary_client_secrets,
94
96
  )
95
97
  if blocking:
96
98
  # TODO: Deprecate utils.STREAM_STDOUT and always stream logs by simply calling job.stream_logs()
@@ -115,7 +117,7 @@ class BioLibApp:
115
117
  else:
116
118
  raise BioLibError("""
117
119
  Calling an app directly with app() is currently being reworked.
118
- To use the previous functionality, please call app.cli() instead.
120
+ To use the previous functionality, please call app.cli() instead.
119
121
  Example: "app.cli('--help')"
120
122
  """)
121
123
 
@@ -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()
@@ -47,6 +47,7 @@ class BiolibJobApi:
47
47
  timeout: Optional[int] = None,
48
48
  notify: bool = False,
49
49
  requested_machine_count: Optional[int] = None,
50
+ temporary_client_secrets: Optional[Dict[str, str]] = None,
50
51
  ):
51
52
  data = {
52
53
  'app_version_id': app_version_id,
@@ -83,6 +84,9 @@ class BiolibJobApi:
83
84
  if timeout:
84
85
  data['requested_timeout_seconds'] = timeout
85
86
 
87
+ if temporary_client_secrets:
88
+ data['temporary_client_secrets'] = temporary_client_secrets
89
+
86
90
  response = biolib.api.client.post(path='/jobs/', data=data)
87
91
 
88
92
  return response.json()
@@ -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
 
@@ -437,8 +437,9 @@ class Job:
437
437
  timeout: Optional[int] = None,
438
438
  notify: bool = False,
439
439
  requested_machine_count: Optional[int] = None,
440
+ temporary_client_secrets: Optional[Dict[str, str]] = None,
440
441
  ) -> 'Job':
441
- if len(module_input_serialized) < 500_000:
442
+ if len(module_input_serialized) < 500_000 and temporary_client_secrets is None:
442
443
  _job_dict = BiolibJobApi.create_job_with_data(
443
444
  app_resource_name_prefix=parse_app_uri(app_uri)['resource_name_prefix'],
444
445
  app_version_uuid=app_version_uuid,
@@ -462,6 +463,7 @@ class Job:
462
463
  override_command=override_command,
463
464
  timeout=timeout,
464
465
  requested_machine_count=requested_machine_count,
466
+ temporary_client_secrets=temporary_client_secrets,
465
467
  )
466
468
  JobStorage.upload_module_input(job=job_dict, module_input_serialized=module_input_serialized)
467
469
  cloud_job = BiolibJobApi.create_cloud_job(job_id=job_dict['public_id'], result_name_prefix=result_prefix)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pybiolib"
3
- version = "1.2.230"
3
+ version = "1.2.249"
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