parsl 2024.11.4__py3-none-any.whl → 2024.11.11__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.
Files changed (43) hide show
  1. parsl/channels/base.py +6 -46
  2. parsl/channels/errors.py +0 -67
  3. parsl/channels/local/local.py +5 -56
  4. parsl/dataflow/dflow.py +1 -56
  5. parsl/executors/taskvine/manager.py +6 -0
  6. parsl/executors/taskvine/manager_config.py +5 -0
  7. parsl/monitoring/monitoring.py +20 -21
  8. parsl/monitoring/radios.py +1 -3
  9. parsl/providers/cluster_provider.py +1 -4
  10. parsl/providers/condor/condor.py +1 -4
  11. parsl/providers/grid_engine/grid_engine.py +1 -4
  12. parsl/providers/lsf/lsf.py +1 -4
  13. parsl/providers/pbspro/pbspro.py +1 -4
  14. parsl/providers/slurm/slurm.py +1 -4
  15. parsl/providers/torque/torque.py +1 -4
  16. parsl/tests/configs/user_opts.py +0 -7
  17. parsl/tests/conftest.py +0 -4
  18. parsl/tests/test_channels/test_local_channel.py +0 -19
  19. parsl/tests/test_providers/test_local_provider.py +0 -135
  20. parsl/tests/test_providers/test_pbspro_template.py +2 -1
  21. parsl/tests/test_providers/test_slurm_template.py +2 -1
  22. parsl/version.py +1 -1
  23. {parsl-2024.11.4.dist-info → parsl-2024.11.11.dist-info}/METADATA +2 -8
  24. {parsl-2024.11.4.dist-info → parsl-2024.11.11.dist-info}/RECORD +32 -43
  25. {parsl-2024.11.4.dist-info → parsl-2024.11.11.dist-info}/WHEEL +1 -1
  26. parsl/channels/oauth_ssh/__init__.py +0 -0
  27. parsl/channels/oauth_ssh/oauth_ssh.py +0 -119
  28. parsl/channels/ssh/__init__.py +0 -0
  29. parsl/channels/ssh/ssh.py +0 -295
  30. parsl/channels/ssh_il/__init__.py +0 -0
  31. parsl/channels/ssh_il/ssh_il.py +0 -85
  32. parsl/providers/ad_hoc/__init__.py +0 -0
  33. parsl/providers/ad_hoc/ad_hoc.py +0 -252
  34. parsl/tests/configs/local_adhoc.py +0 -18
  35. parsl/tests/sites/test_local_adhoc.py +0 -62
  36. parsl/tests/test_channels/test_dfk_close.py +0 -26
  37. {parsl-2024.11.4.data → parsl-2024.11.11.data}/scripts/exec_parsl_function.py +0 -0
  38. {parsl-2024.11.4.data → parsl-2024.11.11.data}/scripts/interchange.py +0 -0
  39. {parsl-2024.11.4.data → parsl-2024.11.11.data}/scripts/parsl_coprocess.py +0 -0
  40. {parsl-2024.11.4.data → parsl-2024.11.11.data}/scripts/process_worker_pool.py +0 -0
  41. {parsl-2024.11.4.dist-info → parsl-2024.11.11.dist-info}/LICENSE +0 -0
  42. {parsl-2024.11.4.dist-info → parsl-2024.11.11.dist-info}/entry_points.txt +0 -0
  43. {parsl-2024.11.4.dist-info → parsl-2024.11.11.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,6 @@ import time
12
12
  import pytest
13
13
 
14
14
  from parsl.channels import LocalChannel
15
- from parsl.channels.ssh.ssh import DeprecatedSSHChannel
16
15
  from parsl.jobs.states import JobState
17
16
  from parsl.launchers import SingleNodeLauncher
18
17
  from parsl.providers import LocalProvider
@@ -69,140 +68,6 @@ def test_local_channel():
69
68
  _run_tests(p)
70
69
 
71
70
 
72
- SSHD_CONFIG = """
73
- Port {port}
74
- ListenAddress 127.0.0.1
75
- HostKey {hostkey}
76
- AuthorizedKeysFile {connpubkey}
77
- AuthenticationMethods publickey
78
- StrictModes no
79
- Subsystem sftp {sftp_path}
80
- """
81
-
82
-
83
- # It would probably be better, when more formalized site testing comes into existence, to
84
- # use a site-testing provided server/configuration instead of the current scheme
85
- @pytest.mark.local
86
- @pytest.mark.sshd_required
87
- def test_ssh_channel():
88
- with tempfile.TemporaryDirectory() as config_dir:
89
- sshd_thread, priv_key, server_port = _start_sshd(config_dir)
90
- try:
91
- with tempfile.TemporaryDirectory() as remote_script_dir:
92
- # The SSH library fails to add the new host key to the file if the file does not
93
- # already exist, so create it here.
94
- pathlib.Path('{}/known.hosts'.format(config_dir)).touch(mode=0o600)
95
- script_dir = tempfile.mkdtemp()
96
- channel = DeprecatedSSHChannel('127.0.0.1', port=server_port,
97
- script_dir=remote_script_dir,
98
- host_keys_filename='{}/known.hosts'.format(config_dir),
99
- key_filename=priv_key)
100
- try:
101
- p = LocalProvider(channel=channel,
102
- launcher=SingleNodeLauncher(debug=False))
103
- p.script_dir = script_dir
104
- _run_tests(p)
105
- finally:
106
- channel.close()
107
- finally:
108
- _stop_sshd(sshd_thread)
109
-
110
-
111
- def _stop_sshd(sshd_thread):
112
- sshd_thread.stop()
113
- sshd_thread.join()
114
-
115
-
116
- class SSHDThread(threading.Thread):
117
- def __init__(self, config_file):
118
- threading.Thread.__init__(self, daemon=True)
119
- self.config_file = config_file
120
- self.stop_flag = False
121
- self.error = None
122
-
123
- def run(self):
124
- try:
125
- # sshd needs to be run with an absolute path, hence the call to which()
126
- sshpath = shutil.which('sshd')
127
- assert sshpath is not None, "can find sshd executable"
128
- p = subprocess.Popen([sshpath, '-D', '-f', self.config_file],
129
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
130
- while True:
131
- ec = p.poll()
132
- if self.stop_flag:
133
- p.terminate()
134
- break
135
- elif ec is None:
136
- time.sleep(0.1)
137
- elif ec == 0:
138
- self.error = Exception('sshd exited prematurely: {}{}'.format(p.stdout.read(),
139
- p.stderr.read()))
140
- break
141
- else:
142
- self.error = Exception('sshd failed: {}{}'.format(p.stdout.read(),
143
- p.stderr.read()))
144
- break
145
- except Exception as ex:
146
- logger.exception("SSHDThread exception from run loop")
147
- self.error = ex
148
-
149
- def stop(self):
150
- self.stop_flag = True
151
-
152
-
153
- def _start_sshd(config_dir: str):
154
- server_config, priv_key, port = _init_sshd(config_dir)
155
- sshd_thread = SSHDThread(server_config)
156
- sshd_thread.start()
157
- time.sleep(1.0)
158
- if not sshd_thread.is_alive():
159
- raise Exception('Failed to start sshd: {}'.format(sshd_thread.error))
160
- return sshd_thread, priv_key, port
161
-
162
-
163
- def _init_sshd(config_dir):
164
- hostkey = '{}/hostkey'.format(config_dir)
165
- connkey = '{}/connkey'.format(config_dir)
166
- os.system('ssh-keygen -b 2048 -t rsa -q -N "" -f {}'.format(hostkey))
167
- os.system('ssh-keygen -b 2048 -t rsa -q -N "" -f {}'.format(connkey))
168
- port = _find_free_port(22222)
169
- server_config_str = SSHD_CONFIG.format(port=port, hostkey=hostkey,
170
- connpubkey='{}.pub'.format(connkey),
171
- sftp_path=_get_system_sftp_path())
172
- server_config = '{}/sshd_config'.format(config_dir)
173
- with open(server_config, 'w') as f:
174
- f.write(server_config_str)
175
- return server_config, connkey, port
176
-
177
-
178
- def _get_system_sftp_path():
179
- try:
180
- with open('/etc/ssh/sshd_config') as f:
181
- line = f.readline()
182
- while line:
183
- tokens = line.split()
184
- if tokens[0] == 'Subsystem' and tokens[1] == 'sftp':
185
- return tokens[2]
186
- line = f.readline()
187
- except Exception:
188
- pass
189
- return '/usr/lib/openssh/sftp-server'
190
-
191
-
192
- def _find_free_port(start: int):
193
- port = start
194
- while port < 65535:
195
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
196
- try:
197
- s.bind(('127.0.0.1', port))
198
- s.close()
199
- return port
200
- except Exception:
201
- pass
202
- port += random.randint(1, 20)
203
- raise Exception('Could not find free port')
204
-
205
-
206
71
  def _run(p: LocalProvider, command: str, np: int = 1):
207
72
  id = p.submit(command, np)
208
73
  return _wait(p, id)
@@ -12,9 +12,10 @@ def test_submit_script_basic(tmp_path):
12
12
  """Test slurm resources table"""
13
13
 
14
14
  provider = PBSProProvider(
15
- queue="debug", channel=LocalChannel(script_dir=tmp_path)
15
+ queue="debug", channel=LocalChannel()
16
16
  )
17
17
  provider.script_dir = tmp_path
18
+ provider.channel.script_dir = tmp_path
18
19
  job_id = str(random.randint(55000, 59000))
19
20
  provider.execute_wait = mock.Mock(spec=PBSProProvider.execute_wait)
20
21
  provider.execute_wait.return_value = (0, job_id, "")
@@ -13,9 +13,10 @@ def test_submit_script_basic(tmp_path):
13
13
  """Test slurm resources table"""
14
14
 
15
15
  provider = SlurmProvider(
16
- partition="debug", channel=LocalChannel(script_dir=tmp_path)
16
+ partition="debug", channel=LocalChannel()
17
17
  )
18
18
  provider.script_dir = tmp_path
19
+ provider.channel.script_dir = tmp_path
19
20
  job_id = str(random.randint(55000, 59000))
20
21
  provider.execute_wait = mock.MagicMock(spec=SlurmProvider.execute_wait)
21
22
  provider.execute_wait.return_value = (0, f"Submitted batch job {job_id}", "")
parsl/version.py CHANGED
@@ -3,4 +3,4 @@
3
3
  Year.Month.Day[alpha/beta/..]
4
4
  Alphas will be numbered like this -> 2024.12.10a0
5
5
  """
6
- VERSION = '2024.11.04'
6
+ VERSION = '2024.11.11'
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.11.4
3
+ Version: 2024.11.11
4
4
  Summary: Simple data dependent workflows in Python
5
5
  Home-page: https://github.com/Parsl/parsl
6
- Download-URL: https://github.com/Parsl/parsl/archive/2024.11.04.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.11.11.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -38,7 +38,6 @@ Requires-Dist: plotly; extra == "all"
38
38
  Requires-Dist: python-daemon; extra == "all"
39
39
  Requires-Dist: boto3; extra == "all"
40
40
  Requires-Dist: kubernetes; extra == "all"
41
- Requires-Dist: oauth-ssh>=0.9; extra == "all"
42
41
  Requires-Dist: ipython<=8.6.0; extra == "all"
43
42
  Requires-Dist: nbsphinx; extra == "all"
44
43
  Requires-Dist: sphinx<7.2,>=7.1; extra == "all"
@@ -55,7 +54,6 @@ Requires-Dist: jsonschema; extra == "all"
55
54
  Requires-Dist: proxystore; extra == "all"
56
55
  Requires-Dist: radical.pilot==1.60; extra == "all"
57
56
  Requires-Dist: radical.utils==1.60; extra == "all"
58
- Requires-Dist: paramiko; extra == "all"
59
57
  Provides-Extra: aws
60
58
  Requires-Dist: boto3; extra == "aws"
61
59
  Provides-Extra: azure
@@ -79,15 +77,11 @@ Provides-Extra: kubernetes
79
77
  Requires-Dist: kubernetes; extra == "kubernetes"
80
78
  Provides-Extra: monitoring
81
79
  Requires-Dist: sqlalchemy<2,>=1.4; extra == "monitoring"
82
- Provides-Extra: oauth_ssh
83
- Requires-Dist: oauth-ssh>=0.9; extra == "oauth-ssh"
84
80
  Provides-Extra: proxystore
85
81
  Requires-Dist: proxystore; extra == "proxystore"
86
82
  Provides-Extra: radical-pilot
87
83
  Requires-Dist: radical.pilot==1.60; extra == "radical-pilot"
88
84
  Requires-Dist: radical.utils==1.60; extra == "radical-pilot"
89
- Provides-Extra: ssh
90
- Requires-Dist: paramiko; extra == "ssh"
91
85
  Provides-Extra: visualization
92
86
  Requires-Dist: pydot; extra == "visualization"
93
87
  Requires-Dist: networkx<2.6,>=2.5; extra == "visualization"
@@ -8,7 +8,7 @@ parsl/multiprocessing.py,sha256=MyaEcEq-Qf860u7V98u-PZrPNdtzOZL_NW6EhIJnmfQ,1937
8
8
  parsl/process_loggers.py,sha256=uQ7Gd0W72Jz7rrcYlOMfLsAEhkRltxXJL2MgdduJjEw,1136
9
9
  parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  parsl/utils.py,sha256=rMLKeadEsQ9jGwm4ogqiLIXPS3zOAyfznQJXVkJSY8E,13107
11
- parsl/version.py,sha256=Es3lD9-szh1iXGNYUZ5WoLwmMCRI0IiMcFtPiDtIySU,131
11
+ parsl/version.py,sha256=YN54GKP_n8ju-yF93YgA58EFPgsqVrPOc-yanh_BEMg,131
12
12
  parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  parsl/app/app.py,sha256=0gbM4AH2OtFOLsv07I5nglpElcwMSOi-FzdZZfrk7So,8532
14
14
  parsl/app/bash.py,sha256=jm2AvePlCT9DZR7H_4ANDWxatp5dN_22FUlT_gWhZ-g,5528
@@ -18,16 +18,10 @@ parsl/app/python.py,sha256=0hrz2BppVOwwNfh5hnoP70Yv56gSRkIoT-fP9XNb4v4,2331
18
18
  parsl/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  parsl/benchmark/perf.py,sha256=kKXefDozWXSJKSNA7qdfUgEoacA2-R9kSZcI2YvZ5uE,3096
20
20
  parsl/channels/__init__.py,sha256=OEZcuNBOxUwmzrHMZOuPvkw4kUxrbJDA99crDk61O90,131
21
- parsl/channels/base.py,sha256=eJQQHBE_N0sAl41LH2UE6KBJomxjWw_B3ilQRYgpxHc,3948
22
- parsl/channels/errors.py,sha256=x0ppJXY4Um0XIwO0oJ3x0biFaTxxv5Z4sP-FkowR72U,2782
21
+ parsl/channels/base.py,sha256=k015EJ96C_nhzfH-pAs4EeEmIi0y_BqkYYl06PDrCeQ,2658
22
+ parsl/channels/errors.py,sha256=AgyPwYjemBh_KjI3P-gXMgDgbvLZUMC2Wf284S_vQ6c,802
23
23
  parsl/channels/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- parsl/channels/local/local.py,sha256=kAyO7byrjBX2heuhcG_Nr_DbZemdvKHw8GsH9XEUQ4A,5004
25
- parsl/channels/oauth_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- parsl/channels/oauth_ssh/oauth_ssh.py,sha256=6pj3LQAX89p5Lc8NL1Llq2_noi8GS8BItCuRtDp-iCA,3823
27
- parsl/channels/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- parsl/channels/ssh/ssh.py,sha256=y21at_99Cjo2YNC110bf5dbNsOvAsUA-843LyOPkJH8,10156
29
- parsl/channels/ssh_il/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- parsl/channels/ssh_il/ssh_il.py,sha256=acOXJyqCmgC2nl7zrO_uEu3GpJZMN2l-Af5XfmNMLRs,2783
24
+ parsl/channels/local/local.py,sha256=vtj3kuPvDfUxCjW6RcEmdy2PFDJ3Vz56k6V8-xt_0V4,3305
31
25
  parsl/concurrent/__init__.py,sha256=TvIVceJYaJAsxedNBF3Vdo9lEQNHH_j3uxJv0zUjP7w,3288
32
26
  parsl/configs/ASPIRE1.py,sha256=eKnmz0QD3V522emtXMjS6Ppeooe5lzcBgCE6cxunbYY,1718
33
27
  parsl/configs/Azure.py,sha256=CJms3xWmdb-S3CksbHrPF2TfMxJC5I0faqUKCOzVg0k,1268
@@ -62,7 +56,7 @@ parsl/data_provider/staging.py,sha256=ZDZuuFg38pjUStegKPcvPsfGp3iMeReMzfU6DSwtJj
62
56
  parsl/data_provider/zip.py,sha256=S4kVuH9lxAegRURYbvIUR7EYYBOccyslaqyCrVWUBhw,4497
63
57
  parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
58
  parsl/dataflow/dependency_resolvers.py,sha256=Om8Dgh7a0ZwgXAc6TlhxLSzvxXHDlNNV1aBNiD3JTNY,3325
65
- parsl/dataflow/dflow.py,sha256=GrBYtZCjzFfL9Nm8ybjR-kO4eAQNw3xlfluTPnt9des,68236
59
+ parsl/dataflow/dflow.py,sha256=80lfWJnk2SPaDIOqDEwqOHx031wu_74SdWBMyiiorgY,65443
66
60
  parsl/dataflow/errors.py,sha256=9SxVhIJY_53FQx8x4OU8UA8nd7lvUbDllH7KfMXpYaY,2177
67
61
  parsl/dataflow/futures.py,sha256=08LuP-HFiHBIZmeKCjlsazw_WpQ5fwevrU2_WbidkYw,6080
68
62
  parsl/dataflow/memoization.py,sha256=l9uw1Bu50GucBF70M5relpGKFkE4dIM9T3R1KrxW0v0,9583
@@ -101,8 +95,8 @@ parsl/executors/taskvine/exec_parsl_function.py,sha256=ftGdJU78lKPPkphSHlEi4rj16
101
95
  parsl/executors/taskvine/executor.py,sha256=y1x44p_GRlaOqLr0J92ungU3CuDeull6MW-lEedzu2M,31164
102
96
  parsl/executors/taskvine/factory.py,sha256=rWpEoFphLzqO3HEYyDEbQa14iyvgkdZg7hLZuaY39gQ,2638
103
97
  parsl/executors/taskvine/factory_config.py,sha256=AbE2fN2snrF5ITYrrS4DnGn2XkJHUFr_17DYHDHIwq0,3693
104
- parsl/executors/taskvine/manager.py,sha256=fwRSgYWpbsnr5jXlzvX0sQjOqryqn_77K_svJJ1HJ2U,25631
105
- parsl/executors/taskvine/manager_config.py,sha256=LzHc-bXqxixPlxMG5TdxxZ5E46D_hnn1tiPqLRPvUHY,7457
98
+ parsl/executors/taskvine/manager.py,sha256=SUi5mqqMm_rnkBLrZtTQe7RiHqWDn1oOejQscYzfwAU,25797
99
+ parsl/executors/taskvine/manager_config.py,sha256=Lf3dxcDR5Jo97Odv4JFXfuRLclVX-xQP_QXQnS5OVtk,7643
106
100
  parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1n_r8,4156
107
101
  parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
102
  parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
@@ -124,8 +118,8 @@ parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,
124
118
  parsl/monitoring/db_manager.py,sha256=G795Nme9di2AWT7zqFNNyOn8ZJd5i1I2hA6iDSorZD4,33330
125
119
  parsl/monitoring/errors.py,sha256=D6jpYzEzp0d6FmVKGqhvjAxr4ztZfJX2s-aXemH9bBU,148
126
120
  parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
127
- parsl/monitoring/monitoring.py,sha256=qwl90cuMbgGNxLo0uCOTpjsv3b3t1n1_0W-ZtNPGGNI,12956
128
- parsl/monitoring/radios.py,sha256=LuuhoKjnAwdqomjHhKDvkzuMBiPSu0WjqsWShOkampQ,6064
121
+ parsl/monitoring/monitoring.py,sha256=vSUaYokzWqsUJRikoXRN32LjqtGrB02_J89727s4FmI,12877
122
+ parsl/monitoring/radios.py,sha256=l-a7GiWRBR3OaeLeHD_gBo2lMrqpjiQjLNaPTCr29ck,6021
129
123
  parsl/monitoring/remote.py,sha256=WfSqQWYPMx3gT6u4T171ngMPzt8ialR1jRSsrD-4O24,13619
130
124
  parsl/monitoring/router.py,sha256=5WrJ7YT2SV3T9BHCI8P0KqHm-4Y6NDgZkwmEcISmzGU,9110
131
125
  parsl/monitoring/types.py,sha256=oOCrzv-ab-_rv4pb8o58Sdb8G_RGp1aZriRbdf9zBEk,339
@@ -154,10 +148,8 @@ parsl/monitoring/visualization/templates/workflow.html,sha256=QCSHAPHK_2C3gNcZ3N
154
148
  parsl/monitoring/visualization/templates/workflows_summary.html,sha256=7brKKNsxcT4z-l10BKJlgTxQtGL033ZS5jEDdSmsPEE,891
155
149
  parsl/providers/__init__.py,sha256=aUvIDlvYUXFa66YhqqUFyTg6dd4Si3oSmsZUPNw0oOE,991
156
150
  parsl/providers/base.py,sha256=-yAfK8zNc2LCX8GFyRJ4sN5ekL_gqftJ3QHtLSWyrTw,5264
157
- parsl/providers/cluster_provider.py,sha256=o75wJHHyZkecjEBhGGBCMUQ1JlsecAhAKxX_Qd2pyg8,4668
151
+ parsl/providers/cluster_provider.py,sha256=oAvrKW4jsBjouURppDkZms93Lb_IiE1frII_3GH5yiw,4472
158
152
  parsl/providers/errors.py,sha256=_CbCmpguzcA81SC5dPLkDZs1AShzacGKttNhuzNBeiQ,2270
159
- parsl/providers/ad_hoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
- parsl/providers/ad_hoc/ad_hoc.py,sha256=NPZRJnVYT7IB2TCLThofcB7g0WZqgT_N0hDs3K86zhE,8466
161
153
  parsl/providers/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
154
  parsl/providers/aws/aws.py,sha256=nS899gamCAhiIY-4zwaEToa7Om73PrAz4dvX5YSEkUQ,28985
163
155
  parsl/providers/aws/template.py,sha256=N7OEpp7YP6CK5RUtLOwFnks7AE2UG5hHXddh8FF0BFs,347
@@ -165,12 +157,12 @@ parsl/providers/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
165
157
  parsl/providers/azure/azure.py,sha256=eJKJ7Eeq9iUSAlkTczIDyM-OPyNtwnoZzdUbC0fgvDU,18372
166
158
  parsl/providers/azure/template.py,sha256=JJNW8zr30uYcfK-RqQX2FHZVWrxvYE8E6VbaYuAFEqw,347
167
159
  parsl/providers/condor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
- parsl/providers/condor/condor.py,sha256=CzcnohklL_0Hm-Dk8o59JtEHz0rBQzkQAhozuksytNo,13177
160
+ parsl/providers/condor/condor.py,sha256=2e_64b5N6fjVCHdVXL6NhL6EoPohH-qZE80bhvpNty8,12981
169
161
  parsl/providers/condor/template.py,sha256=Jm2ezWo7ERMNPFvjLLEriaP5n5kD0vQBnikn9kpUTdU,960
170
162
  parsl/providers/googlecloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
163
  parsl/providers/googlecloud/googlecloud.py,sha256=xq269Y6Fj8DZabq5I5HtMhZw-3vNKXgisqalZhuHm8o,8007
172
164
  parsl/providers/grid_engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
- parsl/providers/grid_engine/grid_engine.py,sha256=jTQjKaJh4eEXGbhrrCcXFV4AVFo2t39iVpslDR8gF6o,8565
165
+ parsl/providers/grid_engine/grid_engine.py,sha256=7eOMsCu13pLFoAU8MbxACeVg3QliFl8fDojEjGuo0vM,8369
174
166
  parsl/providers/grid_engine/template.py,sha256=a7iViKr8LXcFTPmsf_qQeVK5o_RekOAIlUOF0X1q-2M,273
175
167
  parsl/providers/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
168
  parsl/providers/kubernetes/kube.py,sha256=ghOKM1gY1UjzMzWAheKsG15u8oUzRkXUyjtpqjkquIo,14952
@@ -178,17 +170,17 @@ parsl/providers/kubernetes/template.py,sha256=VsRz6cmNaII-y4OdMT6sCwzQy95SJX6NMB
178
170
  parsl/providers/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
171
  parsl/providers/local/local.py,sha256=pTEcl9NnjRcL8FHcMeMEtJj1IXiAOxZ2Cih97Q5jDPY,11388
180
172
  parsl/providers/lsf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
- parsl/providers/lsf/lsf.py,sha256=hC0GoAaHDqJh12LBVBZkrPrIJ-3IsnVlPqXb8wRoT8s,11502
173
+ parsl/providers/lsf/lsf.py,sha256=ZFYP0jIp-p8q7cXC67Vl77MlO93b-UYKlKaJhYDRDbQ,11306
182
174
  parsl/providers/lsf/template.py,sha256=leQ_TpXv7ePMzbHfLaWvqMR0VORxlp-hjX5JxtkcwwU,269
183
175
  parsl/providers/pbspro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
- parsl/providers/pbspro/pbspro.py,sha256=jh9rzSOKRf0LKtqHSaolqVQtRa1jyjcZLsjk8Wp-llg,8794
176
+ parsl/providers/pbspro/pbspro.py,sha256=luPUxBA0QMax7tKICsmesESQcOhcGnLi6GUlfGeO5pQ,8598
185
177
  parsl/providers/pbspro/template.py,sha256=y-Dher--t5Eury-c7cAuSZs9FEUXWiruFUI07v81558,315
186
178
  parsl/providers/slurm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
- parsl/providers/slurm/slurm.py,sha256=qFG0MNSV6oG5mBYusS8y53DR13Nhq9DxQ6bGfncbJeQ,15719
179
+ parsl/providers/slurm/slurm.py,sha256=XhLLiPBKHKUPf0KmML4kHdN97JB7bXNwDgGPnQIFSmE,15523
188
180
  parsl/providers/slurm/template.py,sha256=KpgBEFMc1ps-38jdrk13xUGx9TCivu-iF90jgQDdiEQ,315
189
181
  parsl/providers/torque/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
182
  parsl/providers/torque/template.py,sha256=4qfc2gmlEhRCAD7erFDOs4prJQ43I8s4E8DSUSVQx3A,358
191
- parsl/providers/torque/torque.py,sha256=reX-aMXwDoytwuey5q8jD-IHuqlI2gFN5FlZ20XyB-g,9497
183
+ parsl/providers/torque/torque.py,sha256=RzaoOC5Gql3qxixBM9AzY2oVmtPBD06IGigcPls01-Y,9301
192
184
  parsl/serialize/__init__.py,sha256=-tQNsFsHTfWxZL6iydt08S9t8QP2rk9Q6RKnXYwbkfY,406
193
185
  parsl/serialize/base.py,sha256=5GyJRr3PQohp5Zv9YQUEyes61mfUK7wTctTaXITYpSQ,1082
194
186
  parsl/serialize/concretes.py,sha256=JPWmltkm-XH2S22ugXCYWYmxwukCUEXWYKzPkKXJO60,1911
@@ -197,7 +189,7 @@ parsl/serialize/facade.py,sha256=SpKGSpI8PQb3hhxuKRJUYoQoq284t5np9ouTpogKmtU,679
197
189
  parsl/serialize/proxystore.py,sha256=o-ha9QAvVhbN8y9S1itk3W0O75eyHYZw2AvB2xu5_Lg,1624
198
190
  parsl/tests/__init__.py,sha256=VTtJzOzz_x6fWNh8IOnsgFqVbdiJShi2AZH21mcmID4,204
199
191
  parsl/tests/callables_helper.py,sha256=ceP1YYsNtrZgKT6MAIvpgdccEjQ_CpFEOnZBGHKGOx0,30
200
- parsl/tests/conftest.py,sha256=CgGvt03_gFH4KazsNsxoWGoClpdbSBkiRgNcn_cjDJk,14962
192
+ parsl/tests/conftest.py,sha256=njhszRuR15nZDufKF2S90lgkL8bSnQY4vH7dckx9q24,14851
201
193
  parsl/tests/test_aalst_patterns.py,sha256=lNIxb7nIgh1yX7hR2fr_ck_mxYJxx8ASKK9zHUVqPno,9614
202
194
  parsl/tests/test_callables.py,sha256=97vrIF1_hfDGd81FM1bhR6FemZMWFcALrH6pVHMTCt8,1974
203
195
  parsl/tests/test_curvezmq.py,sha256=yyhlS4vmaZdMitiySoy4l_ih9H1bsPiN-tMdwIh3H20,12431
@@ -219,7 +211,6 @@ parsl/tests/configs/htex_local.py,sha256=o7Lxz1nErHpLNcH7vEEy9KyCNiEf6r3gpCrBmdQ
219
211
  parsl/tests/configs/htex_local_alternate.py,sha256=JJN4OASr-RXsXuLGVS3ciCrcczf8VVzbuTDWn9Wu0g4,2577
220
212
  parsl/tests/configs/htex_local_intask_staging.py,sha256=E7uZD_AIAbxavkw4VrVXlGG7k42YJZv2qluAO-W0VvI,886
221
213
  parsl/tests/configs/htex_local_rsync_staging.py,sha256=cqTRcHLjqYnOL07Lb8ecTzQuzP-dWDpWdKhgtTwo-fU,940
222
- parsl/tests/configs/local_adhoc.py,sha256=jlyDwwIm0uVuyDgKZCb3wa3k0IaqcYT0ErMhu_0N26s,509
223
214
  parsl/tests/configs/local_radical.py,sha256=C70I6ssfaaHEY1MMCC77izpp6sdANALH-P2mDR2msN0,417
224
215
  parsl/tests/configs/local_radical_mpi.py,sha256=5OabeXXJPE0fyiA1AlGcQYoPRjQRk-HNA-xPLTFyAr4,532
225
216
  parsl/tests/configs/local_threads.py,sha256=oEnQSlom_JMLFX9_Ln49JAfOP3nSMbw8gTaDJo_NYfo,202
@@ -239,7 +230,7 @@ parsl/tests/configs/petrelkube.py,sha256=uUxrZrD_cF-_t6ytlRA_MUtw8RQbpW0CmNRbw3m
239
230
  parsl/tests/configs/slurm_local.py,sha256=jvrNIgNUtjp0OE4HONxa7xSpDa9LQNWtav4BXpF_PY4,821
240
231
  parsl/tests/configs/summit.py,sha256=0LbuTVmc8nl2eGiqAayhV0RCx0pg5kUpYhz9LvTFhDo,1378
241
232
  parsl/tests/configs/taskvine_ex.py,sha256=Nsovxtb59q6ta2opGrl7ufWcavYQtzSPrscLmaLYkUU,472
242
- parsl/tests/configs/user_opts.py,sha256=fNO1OxISFPP7IyJ_iwf8dQ6EagVr2StXtOWmGnA9MeI,6265
233
+ parsl/tests/configs/user_opts.py,sha256=JcEQr1emjyTdmVDddcSGbx9df__0C2m7X3vGNbdKnpo,5858
243
234
  parsl/tests/configs/workqueue_ex.py,sha256=c-vKc1MHmU9IyIyZGuxIPKfg93lKBeNnEoWBKjoIRcg,389
244
235
  parsl/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
245
236
  parsl/tests/integration/latency.py,sha256=kWYkXsbnVnpwS6rHsdm7a1FsUOJWHhuXDsRPlApw6iE,3289
@@ -275,7 +266,6 @@ parsl/tests/sites/test_concurrent.py,sha256=ybHOnIsRyYs2tFPggv2ivRVoqH8Ts4PTEvb4
275
266
  parsl/tests/sites/test_dynamic_executor.py,sha256=PGiQVizSlXnYI9C2OoWpiqcUsKE61HPyYu7XQ_QXWjE,1960
276
267
  parsl/tests/sites/test_ec2.py,sha256=G5dCn3255UECY7vp2C0XzTaQpnFkn-qBqQZ0gTmNZEg,1761
277
268
  parsl/tests/sites/test_launchers.py,sha256=dhuL5M2e1V7XXHg89U1ytFqJamWJLp44Gf8ZOw3m6UI,334
278
- parsl/tests/sites/test_local_adhoc.py,sha256=Kdgm82pQmle_D_-TBZvW9tjHjFbzR4zHhkyYvOTlKoE,1267
279
269
  parsl/tests/sites/test_worker_info.py,sha256=TKRHUCDUHa_SUHXnnqNp7n1AiN2gpGJrTg_Ls0iyhPk,1360
280
270
  parsl/tests/sites/test_mpi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
281
271
  parsl/tests/test_bash_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -293,9 +283,8 @@ parsl/tests/test_bash_apps/test_pipeline.py,sha256=1kQDD8-Dh5H9SKFcKHzN_mSrdxAV_
293
283
  parsl/tests/test_bash_apps/test_std_uri.py,sha256=CvAt8BUhNl2pA5chq9YyhkD6eo2IUH6PjWfe3SQ-YRU,3752
294
284
  parsl/tests/test_bash_apps/test_stdout.py,sha256=lNBzCJGst0IhKaSl8CM8-mTJ5eaK7hTlZ8gY-M2TDBU,3244
295
285
  parsl/tests/test_channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
296
- parsl/tests/test_channels/test_dfk_close.py,sha256=n7IF3Ud_vejg0VNRnvEgxCLmwMvPVvLbXvJdw-Mz_lw,628
297
286
  parsl/tests/test_channels/test_large_output.py,sha256=PGeNSW_sN5mR7KF1hVL2CPfktydYxo4oNz1wVQ-ENN0,595
298
- parsl/tests/test_channels/test_local_channel.py,sha256=0TYjJRXBdeWbB60tCRQVZ4zZSXS4405eLzEIbcAWXy8,927
287
+ parsl/tests/test_channels/test_local_channel.py,sha256=ojMvMbUMFe6OsrrcYYaqytGeKPQjx291O5MTn5X7-Xc,431
299
288
  parsl/tests/test_checkpointing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
300
289
  parsl/tests/test_checkpointing/test_periodic.py,sha256=nfMgrG7sZ8rkMu6iOHS6lp_iTU4IsOyQLQ2Gur_FMmE,1509
301
290
  parsl/tests/test_checkpointing/test_python_checkpoint_1.py,sha256=k7_Zy4CV9OQt4ORYFCdyX53c4B0YPiwEIi35LhvLB2w,746
@@ -360,10 +349,10 @@ parsl/tests/test_mpi_apps/test_mpiex.py,sha256=mlFdHK3A1B6NsEhxTQQX8lhs9qVza36FM
360
349
  parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=5k6HM2jtb6sa7jetpI-Tl1nPQiN33VLaM7YT10c307E,3756
361
350
  parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
362
351
  parsl/tests/test_providers/test_kubernetes_provider.py,sha256=AzCHfNz2HJwjP9BfxKH-XPaTHJCLXFErDMlQ_Ir8qRU,3861
363
- parsl/tests/test_providers/test_local_provider.py,sha256=R96E1eWgHVkvOQ1Au9wj-gfdWKAqGc-qlygFuxpGFQ8,7160
364
- parsl/tests/test_providers/test_pbspro_template.py,sha256=-bi1vags9yyNfpBxtjTqFjzMIg1VVPyf2M958UcXWmA,855
352
+ parsl/tests/test_providers/test_local_provider.py,sha256=3gTqz49oGWGOc7PfivFFb7Sf1QKvgPHnbX_rpJePbQE,2150
353
+ parsl/tests/test_providers/test_pbspro_template.py,sha256=003B1rbgZsP1XQC8Iyn08sqMvnZ-xe3E9uBvgdTUD4s,879
365
354
  parsl/tests/test_providers/test_slurm_instantiate.py,sha256=eW3pEZRIzZO1-eKFrBc7N5uoN5otwghgbqut74Kyqoc,500
366
- parsl/tests/test_providers/test_slurm_template.py,sha256=pBEeimO-vGbMmC1QT7BP7s5BH6fFeqaWnI4f6tWPFEo,901
355
+ parsl/tests/test_providers/test_slurm_template.py,sha256=SL0IK-WopeOjlqk2DAqraP56kGIjSK9YQcedoG1GRKI,925
367
356
  parsl/tests/test_providers/test_submiterror_deprecation.py,sha256=m1L8dV_xrbjQsNv-qdj5vLpsYBxX-C4aJxurqwZymio,502
368
357
  parsl/tests/test_python_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
369
358
  parsl/tests/test_python_apps/test_arg_input_types.py,sha256=JXpfHiu8lr9BN6u1OzqFvGwBhxzsGTPMewHx6Wdo-HI,670
@@ -459,13 +448,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
459
448
  parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
460
449
  parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
461
450
  parsl/usage_tracking/usage.py,sha256=tcoZ2OUjsQVakG8Uu9_HFuEdzpSHyt4JarSRcLGnSMw,8918
462
- parsl-2024.11.4.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
463
- parsl-2024.11.4.data/scripts/interchange.py,sha256=6jsxpVgtruFtE_0nMHAZYVF1gvoALBCkprEbUb_YQgg,30098
464
- parsl-2024.11.4.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
465
- parsl-2024.11.4.data/scripts/process_worker_pool.py,sha256=Qed0dgUa6375UgWm5h196V0FBdeTdW6iowG9RYDNG9Y,42920
466
- parsl-2024.11.4.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
467
- parsl-2024.11.4.dist-info/METADATA,sha256=OMzbwAtouJevLHjEX5uPoah7Nycou4XcvgHR9Q8PLQE,4071
468
- parsl-2024.11.4.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
469
- parsl-2024.11.4.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
470
- parsl-2024.11.4.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
471
- parsl-2024.11.4.dist-info/RECORD,,
451
+ parsl-2024.11.11.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
452
+ parsl-2024.11.11.data/scripts/interchange.py,sha256=6jsxpVgtruFtE_0nMHAZYVF1gvoALBCkprEbUb_YQgg,30098
453
+ parsl-2024.11.11.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
454
+ parsl-2024.11.11.data/scripts/process_worker_pool.py,sha256=Qed0dgUa6375UgWm5h196V0FBdeTdW6iowG9RYDNG9Y,42920
455
+ parsl-2024.11.11.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
456
+ parsl-2024.11.11.dist-info/METADATA,sha256=cuVmmVJIvqai_5seI7Qr108RZ4QxxwK74gRS0XUPUdM,3848
457
+ parsl-2024.11.11.dist-info/WHEEL,sha256=bFJAMchF8aTQGUgMZzHJyDDMPTO3ToJ7x23SLJa1SVo,92
458
+ parsl-2024.11.11.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
459
+ parsl-2024.11.11.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
460
+ parsl-2024.11.11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.44.0)
2
+ Generator: bdist_wheel (0.45.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes
@@ -1,119 +0,0 @@
1
- import logging
2
- import socket
3
-
4
- from parsl.channels.ssh.ssh import DeprecatedSSHChannel
5
- from parsl.errors import OptionalModuleMissing
6
-
7
- try:
8
- import paramiko
9
- _ssh_enabled = True
10
- except (ImportError, NameError, FileNotFoundError):
11
- _ssh_enabled = False
12
-
13
- try:
14
- from oauth_ssh.oauth_ssh_token import find_access_token
15
- from oauth_ssh.ssh_service import SSHService
16
- _oauth_ssh_enabled = True
17
- except (ImportError, NameError):
18
- _oauth_ssh_enabled = False
19
-
20
-
21
- logger = logging.getLogger(__name__)
22
-
23
-
24
- class DeprecatedOAuthSSHChannel(DeprecatedSSHChannel):
25
- """SSH persistent channel. This enables remote execution on sites
26
- accessible via ssh. This channel uses Globus based OAuth tokens for authentication.
27
- """
28
-
29
- def __init__(self, hostname, username=None, script_dir=None, envs=None, port=22):
30
- ''' Initialize a persistent connection to the remote system.
31
- We should know at this point whether ssh connectivity is possible
32
-
33
- Args:
34
- - hostname (String) : Hostname
35
-
36
- KWargs:
37
- - username (string) : Username on remote system
38
- - script_dir (string) : Full path to a script dir where
39
- generated scripts could be sent to.
40
- - envs (dict) : A dictionary of env variables to be set when executing commands
41
- - port (int) : Port at which the SSHService is running
42
-
43
- Raises:
44
- '''
45
- if not _ssh_enabled:
46
- raise OptionalModuleMissing(['ssh'],
47
- "OauthSSHChannel requires the ssh module and config.")
48
-
49
- if not _oauth_ssh_enabled:
50
- raise OptionalModuleMissing(['oauth_ssh'],
51
- "OauthSSHChannel requires oauth_ssh module and config.")
52
-
53
- self.hostname = hostname
54
- self.username = username
55
- self.script_dir = script_dir
56
- self.port = port
57
- self.envs = {}
58
- if envs is not None:
59
- self.envs = envs
60
-
61
- try:
62
- access_token = find_access_token(hostname)
63
- except Exception:
64
- logger.exception("Failed to find the access token for {}".format(hostname))
65
- raise
66
-
67
- try:
68
- self.service = SSHService(hostname, port)
69
- self.transport = self.service.login(access_token, username)
70
-
71
- except Exception:
72
- logger.exception("Caught an exception in the OAuth authentication step with {}".format(hostname))
73
- raise
74
-
75
- self.sftp_client = paramiko.SFTPClient.from_transport(self.transport)
76
-
77
- def execute_wait(self, cmd, walltime=60, envs={}):
78
- ''' Synchronously execute a commandline string on the shell.
79
-
80
- This command does *NOT* honor walltime currently.
81
-
82
- Args:
83
- - cmd (string) : Commandline string to execute
84
-
85
- Kwargs:
86
- - walltime (int) : walltime in seconds
87
- - envs (dict) : Dictionary of env variables
88
-
89
- Returns:
90
- - retcode : Return code from the execution, -1 on fail
91
- - stdout : stdout string
92
- - stderr : stderr string
93
-
94
- Raises:
95
- None.
96
- '''
97
-
98
- session = self.transport.open_session()
99
- session.setblocking(0)
100
-
101
- nbytes = 1024
102
- session.exec_command(self.prepend_envs(cmd, envs))
103
- session.settimeout(walltime)
104
-
105
- try:
106
- # Wait until command is executed
107
- exit_status = session.recv_exit_status()
108
-
109
- stdout = session.recv(nbytes).decode('utf-8')
110
- stderr = session.recv_stderr(nbytes).decode('utf-8')
111
-
112
- except socket.timeout:
113
- logger.exception("Command failed to execute without timeout limit on {}".format(self))
114
- raise
115
-
116
- return exit_status, stdout, stderr
117
-
118
- def close(self) -> None:
119
- self.transport.close()
File without changes