pybiolib 1.2.1056__py3-none-any.whl → 1.2.1074__py3-none-any.whl
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.
- biolib/compute_node/job_worker/executors/docker_executor.py +10 -7
- biolib/compute_node/job_worker/executors/docker_types.py +1 -1
- biolib/compute_node/job_worker/executors/types.py +6 -5
- biolib/compute_node/job_worker/job_worker.py +4 -22
- biolib/compute_node/job_worker/large_file_system.py +2 -6
- biolib/compute_node/remote_host_proxy.py +24 -18
- biolib/compute_node/utils.py +2 -0
- biolib/compute_node/webserver/webserver.py +51 -19
- {pybiolib-1.2.1056.dist-info → pybiolib-1.2.1074.dist-info}/METADATA +1 -1
- {pybiolib-1.2.1056.dist-info → pybiolib-1.2.1074.dist-info}/RECORD +13 -13
- {pybiolib-1.2.1056.dist-info → pybiolib-1.2.1074.dist-info}/LICENSE +0 -0
- {pybiolib-1.2.1056.dist-info → pybiolib-1.2.1074.dist-info}/WHEEL +0 -0
- {pybiolib-1.2.1056.dist-info → pybiolib-1.2.1074.dist-info}/entry_points.txt +0 -0
@@ -11,10 +11,10 @@ import zipfile
|
|
11
11
|
from copy import copy
|
12
12
|
from datetime import datetime
|
13
13
|
|
14
|
-
import docker
|
15
|
-
import docker.types
|
16
|
-
from docker.errors import APIError, ImageNotFound
|
17
|
-
from docker.models.containers import Container
|
14
|
+
import docker
|
15
|
+
import docker.types
|
16
|
+
from docker.errors import APIError, ImageNotFound
|
17
|
+
from docker.models.containers import Container
|
18
18
|
|
19
19
|
from biolib import utils
|
20
20
|
from biolib._internal.runtime import RuntimeJobDataDict
|
@@ -40,7 +40,7 @@ class DockerExecutor:
|
|
40
40
|
self._options: LocalExecutorOptions = options
|
41
41
|
self._is_cleaning_up = False
|
42
42
|
|
43
|
-
self._absolute_image_uri = f
|
43
|
+
self._absolute_image_uri = f'{utils.BIOLIB_SITE_HOSTNAME}/{self._options["module"]["image_uri"]}'
|
44
44
|
self._send_system_exception = options['send_system_exception']
|
45
45
|
self._send_stdout_and_stderr = options['send_stdout_and_stderr']
|
46
46
|
self._random_docker_id = compute_node_utils.random_string(15)
|
@@ -308,7 +308,8 @@ class DockerExecutor:
|
|
308
308
|
job_uuid = self._options['job']['public_id']
|
309
309
|
logger_no_user_data.debug(f'Job "{job_uuid}" initializing Docker container...')
|
310
310
|
module = self._options['module']
|
311
|
-
logger.debug(f
|
311
|
+
logger.debug(f'Initializing docker container with command: {module["command"]}')
|
312
|
+
docker_client = BiolibDockerClient.get_docker_client()
|
312
313
|
|
313
314
|
docker_volume_mounts = [lfs.docker_mount for lfs in self._options['large_file_systems'].values()]
|
314
315
|
|
@@ -391,6 +392,9 @@ class DockerExecutor:
|
|
391
392
|
'mounts': docker_volume_mounts,
|
392
393
|
'network': internal_network.name,
|
393
394
|
'working_dir': module['working_directory'],
|
395
|
+
'networking_config': {
|
396
|
+
internal_network.name: docker_client.api.create_endpoint_config(aliases=['main'])
|
397
|
+
},
|
394
398
|
}
|
395
399
|
|
396
400
|
if self._options['job'].get('arguments_override_command'):
|
@@ -429,7 +433,6 @@ class DockerExecutor:
|
|
429
433
|
if docker_runtime is not None:
|
430
434
|
create_container_args['runtime'] = docker_runtime
|
431
435
|
|
432
|
-
docker_client = BiolibDockerClient.get_docker_client()
|
433
436
|
logger_no_user_data.debug(f'Job "{job_uuid}" initializing Docker container. Creating container...')
|
434
437
|
self._docker_container = docker_client.containers.create(**create_container_args)
|
435
438
|
logger_no_user_data.debug(f'Job "{job_uuid}" finished initializing Docker container.')
|
@@ -1,11 +1,11 @@
|
|
1
|
-
from docker.models.networks import Network
|
1
|
+
from docker.models.networks import Network
|
2
2
|
|
3
|
+
from biolib.biolib_api_client.app_types import Module
|
4
|
+
from biolib.biolib_api_client.job_types import CloudJob, CreatedJobDict
|
3
5
|
from biolib.compute_node.job_worker.large_file_system import LargeFileSystem
|
4
|
-
from biolib.compute_node.webserver.webserver_types import ComputeNodeInfo
|
5
|
-
from biolib.typing_utils import TypedDict, Callable, Optional, List, Dict
|
6
6
|
from biolib.compute_node.remote_host_proxy import RemoteHostProxy
|
7
|
-
from biolib.
|
8
|
-
from biolib.
|
7
|
+
from biolib.compute_node.webserver.webserver_types import ComputeNodeInfo
|
8
|
+
from biolib.typing_utils import Callable, Dict, List, Optional, TypedDict
|
9
9
|
|
10
10
|
|
11
11
|
class StatusUpdate(TypedDict):
|
@@ -43,6 +43,7 @@ class LocalExecutorOptions(TypedDict):
|
|
43
43
|
send_system_exception: SendSystemExceptionType
|
44
44
|
send_stdout_and_stderr: SendStdoutAndStderrType
|
45
45
|
|
46
|
+
|
46
47
|
class MetadataToSaveOutput(TypedDict):
|
47
48
|
arguments: List[str]
|
48
49
|
startup_error_string: Optional[str]
|
@@ -80,7 +80,6 @@ class JobWorker:
|
|
80
80
|
|
81
81
|
self._remote_host_proxies: List[RemoteHostProxy] = []
|
82
82
|
self._internal_network: Optional[Network] = None
|
83
|
-
self._public_network: Optional[Network] = None
|
84
83
|
self._executors: List[DockerExecutor] = []
|
85
84
|
self.is_cleaning_up: bool = False
|
86
85
|
|
@@ -217,8 +216,6 @@ class JobWorker:
|
|
217
216
|
logger_no_user_data.debug('Cleaning up networks...')
|
218
217
|
self._cleanup_network(self._internal_network)
|
219
218
|
self._internal_network = None
|
220
|
-
self._cleanup_network(self._public_network)
|
221
|
-
self._public_network = None
|
222
219
|
logger_no_user_data.debug('Cleaned up networks...')
|
223
220
|
|
224
221
|
@staticmethod
|
@@ -291,20 +288,6 @@ class JobWorker:
|
|
291
288
|
) from exception
|
292
289
|
|
293
290
|
if len(remote_hosts) > 0:
|
294
|
-
logger_no_user_data.debug(f'Job "{job_id}" creating networks for remote host proxies...')
|
295
|
-
try:
|
296
|
-
self._public_network = docker_client.networks.create(
|
297
|
-
name=f'biolib-proxy-network-{job_id}',
|
298
|
-
internal=False,
|
299
|
-
driver='bridge',
|
300
|
-
)
|
301
|
-
except Exception as exception:
|
302
|
-
raise ComputeProcessException(
|
303
|
-
exception,
|
304
|
-
SystemExceptionCodes.FAILED_TO_CREATE_DOCKER_NETWORKS.value,
|
305
|
-
self.send_system_exception,
|
306
|
-
may_contain_user_data=False
|
307
|
-
) from exception
|
308
291
|
logger_no_user_data.debug(f'Job "{job_id}" starting proxies for remote hosts: {remote_hosts}')
|
309
292
|
try:
|
310
293
|
hostname_to_ports: Dict[str, List[int]] = {}
|
@@ -323,11 +306,10 @@ class JobWorker:
|
|
323
306
|
|
324
307
|
for hostname, ports in hostname_to_ports.items():
|
325
308
|
remote_host_proxy = RemoteHostProxy(
|
326
|
-
RemoteHost(hostname=hostname),
|
327
|
-
self.
|
328
|
-
|
329
|
-
|
330
|
-
ports,
|
309
|
+
remote_host=RemoteHost(hostname=hostname),
|
310
|
+
internal_network=self._internal_network,
|
311
|
+
job_id=job_id,
|
312
|
+
ports=ports,
|
331
313
|
)
|
332
314
|
remote_host_proxy.start()
|
333
315
|
self._remote_host_proxies.append(remote_host_proxy)
|
@@ -56,17 +56,13 @@ class LargeFileSystem:
|
|
56
56
|
self._path_on_disk_for_write: Optional[str] = None
|
57
57
|
self._send_status_update: Callable[[StatusUpdate], None] = send_status_update
|
58
58
|
|
59
|
-
@property
|
60
|
-
def _is_initialized(self) -> bool:
|
61
|
-
return self._path_on_disk is not None
|
62
|
-
|
63
59
|
@property
|
64
60
|
def uuid(self) -> str:
|
65
61
|
return self._lfs_mapping['uuid']
|
66
62
|
|
67
63
|
@property
|
68
64
|
def docker_mount(self) -> docker.types.Mount:
|
69
|
-
if not self.
|
65
|
+
if not self._path_on_disk:
|
70
66
|
raise LargeFileSystemError('LargeFileSystem not initialized')
|
71
67
|
|
72
68
|
return docker.types.Mount(
|
@@ -77,7 +73,7 @@ class LargeFileSystem:
|
|
77
73
|
)
|
78
74
|
|
79
75
|
def initialize(self) -> None:
|
80
|
-
if self.
|
76
|
+
if self._path_on_disk:
|
81
77
|
logger_no_user_data.debug(f'LFS {self.uuid} is already initialized')
|
82
78
|
return
|
83
79
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
import base64
|
2
2
|
import io
|
3
|
-
import subprocess
|
4
3
|
import tarfile
|
5
4
|
import time
|
6
5
|
from urllib.parse import urlparse
|
7
6
|
|
8
|
-
from docker.errors import ImageNotFound
|
9
|
-
from docker.models.containers import Container
|
10
|
-
from docker.models.images import Image
|
11
|
-
from docker.models.networks import Network
|
7
|
+
from docker.errors import ImageNotFound
|
8
|
+
from docker.models.containers import Container
|
9
|
+
from docker.models.images import Image
|
10
|
+
from docker.models.networks import Network
|
11
|
+
from docker.types import EndpointConfig
|
12
12
|
|
13
13
|
from biolib import utils
|
14
14
|
from biolib.biolib_api_client import BiolibApiClient, RemoteHost
|
@@ -16,7 +16,8 @@ from biolib.biolib_docker_client import BiolibDockerClient
|
|
16
16
|
from biolib.biolib_errors import BioLibError
|
17
17
|
from biolib.biolib_logging import logger_no_user_data
|
18
18
|
from biolib.compute_node.cloud_utils import CloudUtils
|
19
|
-
from biolib.
|
19
|
+
from biolib.compute_node.utils import BIOLIB_PROXY_NETWORK_NAME
|
20
|
+
from biolib.typing_utils import Dict, List, Optional, cast
|
20
21
|
|
21
22
|
|
22
23
|
# Prepare for remote hosts with specified port
|
@@ -28,14 +29,12 @@ class RemoteHostProxy:
|
|
28
29
|
def __init__(
|
29
30
|
self,
|
30
31
|
remote_host: RemoteHost,
|
31
|
-
public_network: Network,
|
32
32
|
internal_network: Optional[Network],
|
33
33
|
job_id: str,
|
34
34
|
ports: List[int],
|
35
35
|
):
|
36
36
|
self.is_app_caller_proxy = remote_host['hostname'] == 'AppCallerProxy'
|
37
37
|
self._remote_host: RemoteHostExtended = RemoteHostExtended(hostname=remote_host['hostname'], ports=ports)
|
38
|
-
self._public_network: Network = public_network
|
39
38
|
self._internal_network: Optional[Network] = internal_network
|
40
39
|
|
41
40
|
if not job_id:
|
@@ -44,7 +43,6 @@ class RemoteHostProxy:
|
|
44
43
|
self._name = f'biolib-remote-host-proxy-{job_id}-{self.hostname}'
|
45
44
|
self._job_uuid = job_id
|
46
45
|
self._container: Optional[Container] = None
|
47
|
-
self._enclave_traffic_forwarder_processes: List[subprocess.Popen] = []
|
48
46
|
self._docker = BiolibDockerClient().get_docker_client()
|
49
47
|
|
50
48
|
@property
|
@@ -70,6 +68,16 @@ class RemoteHostProxy:
|
|
70
68
|
|
71
69
|
docker = BiolibDockerClient.get_docker_client()
|
72
70
|
|
71
|
+
networking_config: Optional[Dict[str, EndpointConfig]] = (
|
72
|
+
None
|
73
|
+
if not self.is_app_caller_proxy
|
74
|
+
else {
|
75
|
+
BIOLIB_PROXY_NETWORK_NAME: docker.api.create_endpoint_config(
|
76
|
+
aliases=[f'biolib-app-caller-proxy-{self._job_uuid}']
|
77
|
+
)
|
78
|
+
}
|
79
|
+
)
|
80
|
+
|
73
81
|
for index in range(3):
|
74
82
|
logger_no_user_data.debug(f'Attempt {index} at creating RemoteHostProxy container "{self._name}"...')
|
75
83
|
try:
|
@@ -77,16 +85,17 @@ class RemoteHostProxy:
|
|
77
85
|
detach=True,
|
78
86
|
image=self._get_biolib_remote_host_proxy_image(),
|
79
87
|
name=self._name,
|
80
|
-
network=
|
88
|
+
network=BIOLIB_PROXY_NETWORK_NAME,
|
89
|
+
networking_config=networking_config,
|
81
90
|
)
|
82
91
|
break
|
83
|
-
except Exception as error:
|
92
|
+
except Exception as error:
|
84
93
|
logger_no_user_data.exception(f'Failed to create container "{self._name}" hit error: {error}')
|
85
94
|
|
86
95
|
logger_no_user_data.debug('Sleeping before re-trying container creation...')
|
87
96
|
time.sleep(3)
|
88
97
|
|
89
|
-
if not self._container:
|
98
|
+
if not self._container or not self._container.id:
|
90
99
|
raise BioLibError(f'Exceeded re-try limit for creating container {self._name}')
|
91
100
|
|
92
101
|
self._write_nginx_config_to_container(
|
@@ -121,14 +130,11 @@ class RemoteHostProxy:
|
|
121
130
|
if self._container:
|
122
131
|
self._container.remove(force=True)
|
123
132
|
|
124
|
-
for process in self._enclave_traffic_forwarder_processes:
|
125
|
-
process.terminate()
|
126
|
-
|
127
133
|
def _get_biolib_remote_host_proxy_image(self) -> Image:
|
128
134
|
if utils.IS_RUNNING_IN_CLOUD:
|
129
135
|
try:
|
130
136
|
logger_no_user_data.debug('Getting local Docker image for remote host proxy')
|
131
|
-
return self._docker.images.get('biolib-remote-host-proxy:latest')
|
137
|
+
return cast(Image, self._docker.images.get('biolib-remote-host-proxy:latest'))
|
132
138
|
except ImageNotFound:
|
133
139
|
logger_no_user_data.debug(
|
134
140
|
'Local Docker image for remote host proxy not available. Falling back to public image...'
|
@@ -137,10 +143,10 @@ class RemoteHostProxy:
|
|
137
143
|
public_image_uri = 'public.ecr.aws/h5y4b3l1/biolib-remote-host-proxy:latest'
|
138
144
|
try:
|
139
145
|
logger_no_user_data.debug('Getting public Docker image for remote host proxy')
|
140
|
-
return self._docker.images.get(public_image_uri)
|
146
|
+
return cast(Image, self._docker.images.get(public_image_uri))
|
141
147
|
except ImageNotFound:
|
142
148
|
logger_no_user_data.debug('Pulling public Docker image for remote host proxy')
|
143
|
-
return self._docker.images.pull(public_image_uri)
|
149
|
+
return cast(Image, self._docker.images.pull(public_image_uri))
|
144
150
|
|
145
151
|
def _write_nginx_config_to_container(self, upstream_server_name: str, upstream_server_ports: List[int]) -> None:
|
146
152
|
if not self._container:
|
biolib/compute_node/utils.py
CHANGED
@@ -1,19 +1,23 @@
|
|
1
1
|
# pylint: disable=unsubscriptable-object
|
2
2
|
|
3
3
|
import json
|
4
|
+
import logging
|
4
5
|
import os
|
5
|
-
import time
|
6
6
|
import tempfile
|
7
|
-
import
|
8
|
-
|
7
|
+
import time
|
8
|
+
|
9
|
+
from docker.models.networks import Network # type: ignore
|
10
|
+
from flask import Flask, Response, jsonify, request
|
9
11
|
|
10
12
|
from biolib import utils
|
11
13
|
from biolib.biolib_api_client import BiolibApiClient
|
12
14
|
from biolib.biolib_binary_format import SavedJob
|
13
|
-
from biolib.
|
15
|
+
from biolib.biolib_docker_client import BiolibDockerClient
|
16
|
+
from biolib.biolib_logging import TRACE, logger, logger_no_user_data
|
14
17
|
from biolib.compute_node.cloud_utils.cloud_utils import CloudUtils
|
18
|
+
from biolib.compute_node.utils import BIOLIB_PROXY_NETWORK_NAME
|
19
|
+
from biolib.compute_node.webserver import webserver_utils
|
15
20
|
from biolib.compute_node.webserver.gunicorn_flask_application import GunicornFlaskApplication
|
16
|
-
from biolib.biolib_logging import logger, TRACE
|
17
21
|
from biolib.compute_node.webserver.webserver_utils import get_job_compute_state_or_404
|
18
22
|
from biolib.typing_utils import Optional
|
19
23
|
|
@@ -102,15 +106,14 @@ def status(job_id):
|
|
102
106
|
response_data['is_completed'] = compute_state['is_completed']
|
103
107
|
|
104
108
|
if current_status['stdout_and_stderr_packages_b64']:
|
105
|
-
compute_state['streamed_logs_packages_b64'] =
|
106
|
-
|
109
|
+
compute_state['streamed_logs_packages_b64'] = (
|
110
|
+
compute_state['streamed_logs_packages_b64'] + current_status['stdout_and_stderr_packages_b64']
|
111
|
+
)
|
107
112
|
|
108
113
|
compute_state['status']['stdout_and_stderr_packages_b64'] = []
|
109
114
|
|
110
115
|
if current_status['status_updates']:
|
111
|
-
compute_state['previous_status_updates'].extend(
|
112
|
-
current_status['status_updates']
|
113
|
-
)
|
116
|
+
compute_state['previous_status_updates'].extend(current_status['status_updates'])
|
114
117
|
compute_state['status']['status_updates'] = []
|
115
118
|
|
116
119
|
if return_full_logs:
|
@@ -132,21 +135,31 @@ def send_package_to_compute_process(job_id, package_bytes):
|
|
132
135
|
|
133
136
|
|
134
137
|
def start_webserver(
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
138
|
+
host: str,
|
139
|
+
port: int,
|
140
|
+
tls_pem_certificate_path: Optional[str] = None,
|
141
|
+
tls_pem_key_path: Optional[str] = None,
|
139
142
|
) -> None:
|
140
143
|
def worker_exit(server, worker): # pylint: disable=unused-argument
|
141
|
-
active_compute_states =
|
142
|
-
webserver_utils.JOB_ID_TO_COMPUTE_STATE_DICT.values()) + webserver_utils.UNASSIGNED_COMPUTE_PROCESSES
|
144
|
+
active_compute_states = (
|
145
|
+
list(webserver_utils.JOB_ID_TO_COMPUTE_STATE_DICT.values()) + webserver_utils.UNASSIGNED_COMPUTE_PROCESSES
|
146
|
+
)
|
143
147
|
logger.debug(f'Sending terminate signal to {len(active_compute_states)} compute processes')
|
144
148
|
if active_compute_states:
|
145
149
|
for compute_state in active_compute_states:
|
146
150
|
if compute_state['worker_thread']:
|
147
151
|
compute_state['worker_thread'].terminate()
|
148
152
|
time.sleep(2)
|
149
|
-
|
153
|
+
|
154
|
+
if utils.IS_RUNNING_IN_CLOUD:
|
155
|
+
try:
|
156
|
+
logger_no_user_data.debug(f'Removing Docker network {BIOLIB_PROXY_NETWORK_NAME}')
|
157
|
+
docker_client = BiolibDockerClient.get_docker_client()
|
158
|
+
biolib_proxy_network: Network = docker_client.networks.get(BIOLIB_PROXY_NETWORK_NAME)
|
159
|
+
biolib_proxy_network.remove()
|
160
|
+
logger_no_user_data.debug(f'Successfully removed Docker network {BIOLIB_PROXY_NETWORK_NAME}')
|
161
|
+
except BaseException:
|
162
|
+
logger_no_user_data.exception(f'Failed to clean up network {BIOLIB_PROXY_NETWORK_NAME}')
|
150
163
|
|
151
164
|
def post_fork(server, worker): # pylint: disable=unused-argument
|
152
165
|
logger.info('Started compute node')
|
@@ -157,8 +170,27 @@ def start_webserver(
|
|
157
170
|
utils.IS_DEV = config['is_dev']
|
158
171
|
BiolibApiClient.initialize(config['base_url'])
|
159
172
|
|
160
|
-
|
161
|
-
|
173
|
+
biolib_proxy_network: Optional[Network] = None
|
174
|
+
try:
|
175
|
+
logger_no_user_data.debug(f'Creating Docker network {BIOLIB_PROXY_NETWORK_NAME}')
|
176
|
+
docker_client = BiolibDockerClient.get_docker_client()
|
177
|
+
biolib_proxy_network = docker_client.networks.create(
|
178
|
+
name=BIOLIB_PROXY_NETWORK_NAME,
|
179
|
+
internal=False,
|
180
|
+
driver='bridge',
|
181
|
+
)
|
182
|
+
logger_no_user_data.debug(f'Successfully created Docker network {BIOLIB_PROXY_NETWORK_NAME}')
|
183
|
+
except BaseException:
|
184
|
+
logger_no_user_data.exception(f'Failed to create Docker network {BIOLIB_PROXY_NETWORK_NAME}')
|
185
|
+
|
186
|
+
if biolib_proxy_network:
|
187
|
+
CloudUtils.initialize()
|
188
|
+
webserver_utils.start_auto_shutdown_timer()
|
189
|
+
else:
|
190
|
+
logger_no_user_data.error(
|
191
|
+
f'Docker network {BIOLIB_PROXY_NETWORK_NAME} was not created, shutting down...'
|
192
|
+
)
|
193
|
+
CloudUtils.deregister_and_shutdown()
|
162
194
|
|
163
195
|
if logger.level == TRACE:
|
164
196
|
gunicorn_log_level_name = 'DEBUG'
|
@@ -114,25 +114,25 @@ biolib/compute_node/job_worker/cache_state.py,sha256=MwjSRzcJJ_4jybqvBL4xdgnDYSI
|
|
114
114
|
biolib/compute_node/job_worker/cache_types.py,sha256=ajpLy8i09QeQS9dEqTn3T6NVNMY_YsHQkSD5nvIHccQ,818
|
115
115
|
biolib/compute_node/job_worker/docker_image_cache.py,sha256=ansHIkJIq_EMW1nZNlW-RRLVVeKWTbzNICYaOHpKiRE,7460
|
116
116
|
biolib/compute_node/job_worker/executors/__init__.py,sha256=bW6t1qi3PZTlHM4quaTLa8EI4ALTCk83cqcVJfJfJfE,145
|
117
|
-
biolib/compute_node/job_worker/executors/docker_executor.py,sha256=
|
118
|
-
biolib/compute_node/job_worker/executors/docker_types.py,sha256=
|
117
|
+
biolib/compute_node/job_worker/executors/docker_executor.py,sha256=Rp9QAEwSetqk0GrntiIhch573VO0Z5jeBpOsB_xcrdA,31907
|
118
|
+
biolib/compute_node/job_worker/executors/docker_types.py,sha256=Hh8SwQYBLdIMGWgITwD2fzoo_sbW2ESx1G8j9Zq2n30,216
|
119
119
|
biolib/compute_node/job_worker/executors/tars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
120
|
-
biolib/compute_node/job_worker/executors/types.py,sha256=
|
120
|
+
biolib/compute_node/job_worker/executors/types.py,sha256=dlp7p8KKkd19nC68o-RuAzRBhpdYFMWKg-__LFjvscs,1611
|
121
121
|
biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py,sha256=_cvEiZbOwfkv6fYmfrvdi_FVviIEYr_dSClQcOQaUWM,1198
|
122
122
|
biolib/compute_node/job_worker/job_max_runtime_timer_thread.py,sha256=K_xgz7IhiIjpLlXRk8sqaMyLoApcidJkgu29sJX0gb8,1174
|
123
123
|
biolib/compute_node/job_worker/job_storage.py,sha256=J6B5wkBo3cqmT1AV-qJnm2Lt9Qmcp3qn-1AabjO9m60,4686
|
124
|
-
biolib/compute_node/job_worker/job_worker.py,sha256=
|
125
|
-
biolib/compute_node/job_worker/large_file_system.py,sha256=
|
124
|
+
biolib/compute_node/job_worker/job_worker.py,sha256=2f5WrIkR-9im3fNEDPnNFz4-YtxcF4Us9yob5HiASbY,28721
|
125
|
+
biolib/compute_node/job_worker/large_file_system.py,sha256=Xe_LILVfTD9LXb-0HwLqGsp1fWiI-pU55BqgJ-6t8-0,10357
|
126
126
|
biolib/compute_node/job_worker/mappings.py,sha256=Z48Kg4nbcOvsT2-9o3RRikBkqflgO4XeaWxTGz-CNvI,2499
|
127
127
|
biolib/compute_node/job_worker/utilization_reporter_thread.py,sha256=7tm5Yk9coqJ9VbEdnO86tSXI0iM0omwIyKENxdxiVXk,8575
|
128
128
|
biolib/compute_node/job_worker/utils.py,sha256=wgxcIA8yAhUPdCwyvuuJ0JmreyWmmUoBO33vWtG60xg,1282
|
129
|
-
biolib/compute_node/remote_host_proxy.py,sha256=
|
129
|
+
biolib/compute_node/remote_host_proxy.py,sha256=xyjq0zKSxbJGUA6a0q9JCnzquk7gIztbI1clLGnymQM,17278
|
130
130
|
biolib/compute_node/socker_listener_thread.py,sha256=T5_UikA3MB9bD5W_dckYLPTgixh72vKUlgbBvj9dbM0,1601
|
131
131
|
biolib/compute_node/socket_sender_thread.py,sha256=YgamPHeUm2GjMFGx8qk-99WlZhEs-kAb3q_2O6qByig,971
|
132
|
-
biolib/compute_node/utils.py,sha256=
|
132
|
+
biolib/compute_node/utils.py,sha256=fvdbetPKMdfHkPqNZRw6eln_i13myu-n8tuceTUcfPU,4913
|
133
133
|
biolib/compute_node/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
134
134
|
biolib/compute_node/webserver/gunicorn_flask_application.py,sha256=jPfR_YvNBekLUXWo_vHFV-FIwlb8s8tacKmGHvh93qc,914
|
135
|
-
biolib/compute_node/webserver/webserver.py,sha256=
|
135
|
+
biolib/compute_node/webserver/webserver.py,sha256=Ec5ZgOUBb_1pINjHrlENMUpLdAPiBiTyiaP51-FZ4gQ,8362
|
136
136
|
biolib/compute_node/webserver/webserver_types.py,sha256=2t8EaFKESnves3BA_NBdnS2yAdo1qwamCFHiSt888nE,380
|
137
137
|
biolib/compute_node/webserver/webserver_utils.py,sha256=XWvwYPbWNR3qS0FYbLLp-MDDfVk0QdaAmg3xPrT0H2s,4234
|
138
138
|
biolib/compute_node/webserver/worker_thread.py,sha256=7uD9yQPhePYvP2HCJ27EeZ_h6psfIWFgqm1RHZxzobs,12483
|
@@ -155,8 +155,8 @@ biolib/utils/cache_state.py,sha256=u256F37QSRIVwqKlbnCyzAX4EMI-kl6Dwu6qwj-Qmag,3
|
|
155
155
|
biolib/utils/multipart_uploader.py,sha256=XvGP1I8tQuKhAH-QugPRoEsCi9qvbRk-DVBs5PNwwJo,8452
|
156
156
|
biolib/utils/seq_util.py,sha256=Ozk0blGtPur_D9MwShD02r_mphyQmgZkx-lOHOwnlIM,6730
|
157
157
|
biolib/utils/zip/remote_zip.py,sha256=0wErYlxir5921agfFeV1xVjf29l9VNgGQvNlWOlj2Yc,23232
|
158
|
-
pybiolib-1.2.
|
159
|
-
pybiolib-1.2.
|
160
|
-
pybiolib-1.2.
|
161
|
-
pybiolib-1.2.
|
162
|
-
pybiolib-1.2.
|
158
|
+
pybiolib-1.2.1074.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
|
159
|
+
pybiolib-1.2.1074.dist-info/METADATA,sha256=6-pzWsBTeG5SfhcZB_0x4yindbrE9NkIY_kEpo3K2Q4,1571
|
160
|
+
pybiolib-1.2.1074.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
161
|
+
pybiolib-1.2.1074.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
|
162
|
+
pybiolib-1.2.1074.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|