pybiolib 1.2.252__tar.gz → 1.2.261__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.252 → pybiolib-1.2.261}/PKG-INFO +1 -1
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/http_client.py +9 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/push_application.py +5 -7
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/api/client.py +13 -10
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/api_client.py +7 -4
- {pybiolib-1.2.252 → pybiolib-1.2.261}/pyproject.toml +1 -1
- {pybiolib-1.2.252 → pybiolib-1.2.261}/LICENSE +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/PYPI_README.md +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_data_record/data_record.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/data_record/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/data_record/data_record.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/data_record/push_data.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/data_record/remote_storage_endpoint.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/file_utils.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/fuse_mount/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/fuse_mount/experiment_fuse_mount.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/lfs/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/lfs/cache.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/libs/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/libs/fusepy/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/runtime.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/app.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/data_record.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/experiment.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/file_node.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/resource.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/resource_version.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/types/typing.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/utils/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_internal/utils/multinode.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/_runtime/runtime.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/api/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/app/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/app/app.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/app/search_apps.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/app_types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/auth.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/biolib_app_api.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/biolib_job_api.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/common_types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/job_types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/lfs_types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_api_client/user_state.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/base_bbf_package.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/file_in_container.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/module_input.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/module_output_v2.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/remote_endpoints.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/remote_stream_seeker.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/saved_job.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/stdout_and_stderr.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/system_exception.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/system_status_update.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_binary_format/utils.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_docker_client/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_download_container.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_errors.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/biolib_logging.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/auth.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/data_record.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/download_container.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/init.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/lfs.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/push.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/run.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/runtime.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/cli/start.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/.gitignore +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/cloud_utils/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/cloud_utils/cloud_utils.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/cache_state.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/cache_types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/docker_image_cache.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/docker_executor.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/docker_types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/tars/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/job_max_runtime_timer_thread.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/job_storage.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/job_worker.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/large_file_system.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/mappings.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/utilization_reporter_thread.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/utils.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/remote_host_proxy.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/socker_listener_thread.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/socket_sender_thread.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/utils.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/webserver/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/webserver/gunicorn_flask_application.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/webserver/webserver.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/webserver/webserver_types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/webserver/webserver_utils.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/webserver/worker_thread.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/experiments/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/experiments/experiment.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/jobs/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/jobs/job.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/jobs/job_result.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/jobs/types.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/runtime/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/sdk/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/tables.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/templates/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/templates/example_app.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/typing_utils.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/user/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/user/sign_in.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/utils/__init__.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/utils/app_uri.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/utils/cache_state.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/utils/multipart_uploader.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/utils/seq_util.py +0 -0
- {pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/utils/zip/remote_zip.py +0 -0
@@ -79,6 +79,7 @@ class HttpClient:
|
|
79
79
|
timeout_in_seconds: Optional[int] = None,
|
80
80
|
response_path: Optional[str] = None,
|
81
81
|
retry_on_http_500: Optional[bool] = False,
|
82
|
+
max_content_length_in_bytes: Optional[int] = None,
|
82
83
|
) -> HttpResponse:
|
83
84
|
if not HttpClient.ssl_context:
|
84
85
|
HttpClient.ssl_context = _create_ssl_context()
|
@@ -107,6 +108,14 @@ class HttpClient:
|
|
107
108
|
context=HttpClient.ssl_context,
|
108
109
|
timeout=timeout_in_seconds,
|
109
110
|
) as response:
|
111
|
+
if max_content_length_in_bytes:
|
112
|
+
content_length = response.getheader('Content-Length')
|
113
|
+
if not content_length:
|
114
|
+
raise ValueError('No Content-Length in response headers')
|
115
|
+
|
116
|
+
if int(content_length) > max_content_length_in_bytes:
|
117
|
+
raise ValueError(f'Content-Length exceeds {max_content_length_in_bytes} bytes')
|
118
|
+
|
110
119
|
return HttpResponse(response, response_path)
|
111
120
|
|
112
121
|
except urllib.error.HTTPError as error:
|
@@ -219,12 +219,6 @@ def push_application(
|
|
219
219
|
docker_tags = new_app_version_json.get('docker_tags', {})
|
220
220
|
if not app_version_to_copy_images_from and docker_tags:
|
221
221
|
logger.info('Found docker images to push.')
|
222
|
-
|
223
|
-
# Auth to be sent to proxy
|
224
|
-
# The tokens are sent as "{access_token},{job_id}". We leave job_id blank on push.
|
225
|
-
tokens = f'{BiolibApiClient.get().access_token},'
|
226
|
-
auth_config = {'username': 'biolib', 'password': tokens}
|
227
|
-
|
228
222
|
docker_client = BiolibDockerClient.get_docker_client()
|
229
223
|
|
230
224
|
for module_name, repo_and_tag in docker_tags.items():
|
@@ -264,7 +258,11 @@ def push_application(
|
|
264
258
|
tag=tag,
|
265
259
|
stream=True,
|
266
260
|
decode=True,
|
267
|
-
auth_config=
|
261
|
+
auth_config={
|
262
|
+
'username': 'biolib',
|
263
|
+
# For legacy reasons access token is sent with trailing comma ','
|
264
|
+
'password': api_client.resource_deploy_key or f'{api_client.access_token},',
|
265
|
+
},
|
268
266
|
)
|
269
267
|
|
270
268
|
process_docker_status_updates(push_status_updates, action='Pushing')
|
@@ -75,16 +75,19 @@ class ApiClient(HttpClient):
|
|
75
75
|
# Only keep header keys with a value
|
76
76
|
headers: Dict[str, str] = {key: value for key, value in (opt_headers or {}).items() if value}
|
77
77
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
78
|
+
if authenticate:
|
79
|
+
deprecated_api_client = DeprecatedApiClient.get()
|
80
|
+
if deprecated_api_client.is_signed_in:
|
81
|
+
deprecated_api_client.refresh_access_token()
|
82
|
+
|
83
|
+
if deprecated_api_client.resource_deploy_key:
|
84
|
+
headers['Authorization'] = f'Token {deprecated_api_client.resource_deploy_key}'
|
85
|
+
else:
|
86
|
+
# Adding access_token outside is_signed_in check as job_worker.py currently sets access_token
|
87
|
+
# without setting refresh_token
|
88
|
+
access_token = deprecated_api_client.access_token
|
89
|
+
if access_token:
|
90
|
+
headers['Authorization'] = f'Bearer {access_token}'
|
88
91
|
|
89
92
|
headers['client-type'] = 'biolib-python'
|
90
93
|
headers['client-version'] = ApiClient._biolib_package_version
|
@@ -30,13 +30,14 @@ class _ApiClient:
|
|
30
30
|
self.base_url: str = base_url
|
31
31
|
self.access_token: Optional[str] = access_token # TODO: Deprecate passing access_token in constructor
|
32
32
|
self.refresh_token: Optional[str] = None
|
33
|
+
self.resource_deploy_key: Optional[str] = None
|
33
34
|
|
34
35
|
self._user_state = UserState()
|
35
36
|
self._sign_in_attempted: bool = False
|
36
37
|
|
37
38
|
@property
|
38
39
|
def is_signed_in(self) -> bool:
|
39
|
-
return bool(self.refresh_token)
|
40
|
+
return bool(self.refresh_token or self.resource_deploy_key)
|
40
41
|
|
41
42
|
def set_user_tokens(self, user_tokens: UserTokens) -> None:
|
42
43
|
with self._user_state as user_state:
|
@@ -57,8 +58,7 @@ class _ApiClient:
|
|
57
58
|
user_state['refresh_token'] = None
|
58
59
|
|
59
60
|
def refresh_access_token(self) -> None:
|
60
|
-
if not self.is_signed_in:
|
61
|
-
# Can't refresh access token if not signed in
|
61
|
+
if not self.is_signed_in or self.resource_deploy_key:
|
62
62
|
return
|
63
63
|
|
64
64
|
if self.access_token:
|
@@ -95,7 +95,10 @@ class _ApiClient:
|
|
95
95
|
api_token = os.getenv('BIOLIB_TOKEN', default=None)
|
96
96
|
|
97
97
|
if api_token:
|
98
|
-
|
98
|
+
if api_token.startswith('bld_'):
|
99
|
+
self.resource_deploy_key = api_token
|
100
|
+
else:
|
101
|
+
self.sign_in_with_api_token(api_token)
|
99
102
|
else:
|
100
103
|
with self._user_state as user_state:
|
101
104
|
refresh_token_from_state = user_state['refresh_token']
|
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.252 → pybiolib-1.2.261}/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
|
{pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/docker_executor.py
RENAMED
File without changes
|
{pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/docker_types.py
RENAMED
File without changes
|
{pybiolib-1.2.252 → pybiolib-1.2.261}/biolib/compute_node/job_worker/executors/tars/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pybiolib-1.2.252 → pybiolib-1.2.261}/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.252 → pybiolib-1.2.261}/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.252 → pybiolib-1.2.261}/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
|