parsl 2024.8.5__py3-none-any.whl → 2024.8.12__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 (40) hide show
  1. parsl/channels/__init__.py +1 -4
  2. parsl/channels/oauth_ssh/oauth_ssh.py +2 -2
  3. parsl/channels/ssh/ssh.py +1 -1
  4. parsl/channels/ssh_il/ssh_il.py +2 -2
  5. parsl/dataflow/dflow.py +1 -1
  6. parsl/executors/high_throughput/executor.py +2 -1
  7. parsl/executors/high_throughput/interchange.py +4 -0
  8. parsl/executors/taskvine/executor.py +2 -0
  9. parsl/executors/workqueue/executor.py +2 -0
  10. parsl/monitoring/db_manager.py +10 -10
  11. parsl/monitoring/monitoring.py +1 -2
  12. parsl/monitoring/remote.py +4 -4
  13. parsl/monitoring/router.py +1 -6
  14. parsl/providers/__init__.py +0 -4
  15. parsl/providers/ad_hoc/ad_hoc.py +6 -2
  16. parsl/tests/configs/local_adhoc.py +2 -2
  17. parsl/tests/test_htex/test_zmq_binding.py +2 -1
  18. parsl/tests/test_providers/test_local_provider.py +6 -5
  19. parsl/version.py +1 -1
  20. {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/interchange.py +4 -0
  21. {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/METADATA +2 -2
  22. {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/RECORD +29 -40
  23. parsl/configs/ad_hoc.py +0 -38
  24. parsl/tests/configs/ad_hoc_cluster_htex.py +0 -35
  25. parsl/tests/configs/htex_ad_hoc_cluster.py +0 -26
  26. parsl/tests/configs/swan_htex.py +0 -43
  27. parsl/tests/integration/test_channels/test_scp_1.py +0 -45
  28. parsl/tests/integration/test_channels/test_ssh_1.py +0 -40
  29. parsl/tests/integration/test_channels/test_ssh_errors.py +0 -46
  30. parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -41
  31. parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -24
  32. parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -49
  33. parsl/tests/manual_tests/test_oauth_ssh.py +0 -13
  34. {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/exec_parsl_function.py +0 -0
  35. {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/parsl_coprocess.py +0 -0
  36. {parsl-2024.8.5.data → parsl-2024.8.12.data}/scripts/process_worker_pool.py +0 -0
  37. {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/LICENSE +0 -0
  38. {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/WHEEL +0 -0
  39. {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/entry_points.txt +0 -0
  40. {parsl-2024.8.5.dist-info → parsl-2024.8.12.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,4 @@
1
1
  from parsl.channels.base import Channel
2
2
  from parsl.channels.local.local import LocalChannel
3
- from parsl.channels.oauth_ssh.oauth_ssh import OAuthSSHChannel
4
- from parsl.channels.ssh.ssh import SSHChannel
5
- from parsl.channels.ssh_il.ssh_il import SSHInteractiveLoginChannel
6
3
 
7
- __all__ = ['Channel', 'SSHChannel', 'LocalChannel', 'SSHInteractiveLoginChannel', 'OAuthSSHChannel']
4
+ __all__ = ['Channel', 'LocalChannel']
@@ -3,7 +3,7 @@ import socket
3
3
 
4
4
  import paramiko
5
5
 
6
- from parsl.channels.ssh.ssh import SSHChannel
6
+ from parsl.channels.ssh.ssh import DeprecatedSSHChannel
7
7
  from parsl.errors import OptionalModuleMissing
8
8
 
9
9
  try:
@@ -17,7 +17,7 @@ except (ImportError, NameError):
17
17
  logger = logging.getLogger(__name__)
18
18
 
19
19
 
20
- class OAuthSSHChannel(SSHChannel):
20
+ class DeprecatedOAuthSSHChannel(DeprecatedSSHChannel):
21
21
  """SSH persistent channel. This enables remote execution on sites
22
22
  accessible via ssh. This channel uses Globus based OAuth tokens for authentication.
23
23
  """
parsl/channels/ssh/ssh.py CHANGED
@@ -24,7 +24,7 @@ class NoAuthSSHClient(paramiko.SSHClient):
24
24
  return
25
25
 
26
26
 
27
- class SSHChannel(Channel, RepresentationMixin):
27
+ class DeprecatedSSHChannel(Channel, RepresentationMixin):
28
28
  ''' SSH persistent channel. This enables remote execution on sites
29
29
  accessible via ssh. It is assumed that the user has setup host keys
30
30
  so as to ssh to the remote host. Which goes to say that the following
@@ -3,12 +3,12 @@ import logging
3
3
 
4
4
  import paramiko
5
5
 
6
- from parsl.channels.ssh.ssh import SSHChannel
6
+ from parsl.channels.ssh.ssh import DeprecatedSSHChannel
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
9
 
10
10
 
11
- class SSHInteractiveLoginChannel(SSHChannel):
11
+ class DeprecatedSSHInteractiveLoginChannel(DeprecatedSSHChannel):
12
12
  """SSH persistent channel. This enables remote execution on sites
13
13
  accessible via ssh. This channel supports interactive login and is appropriate when
14
14
  keys are not set up.
parsl/dataflow/dflow.py CHANGED
@@ -116,7 +116,7 @@ class DataFlowKernel:
116
116
  if self.monitoring:
117
117
  if self.monitoring.logdir is None:
118
118
  self.monitoring.logdir = self.run_dir
119
- self.monitoring.start(self.run_id, self.run_dir, self.config.run_dir)
119
+ self.monitoring.start(self.run_dir, self.config.run_dir)
120
120
 
121
121
  self.time_began = datetime.datetime.now()
122
122
  self.time_completed: Optional[datetime.datetime] = None
@@ -551,6 +551,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
551
551
  "logging_level": logging.DEBUG if self.worker_debug else logging.INFO,
552
552
  "cert_dir": self.cert_dir,
553
553
  "manager_selector": self.manager_selector,
554
+ "run_id": self.run_id,
554
555
  }
555
556
 
556
557
  config_pickle = pickle.dumps(interchange_config)
@@ -831,7 +832,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
831
832
  try:
832
833
  self.interchange_proc.wait(timeout=timeout)
833
834
  except subprocess.TimeoutExpired:
834
- logger.info("Unable to terminate Interchange process; sending SIGKILL")
835
+ logger.warning("Unable to terminate Interchange process; sending SIGKILL")
835
836
  self.interchange_proc.kill()
836
837
 
837
838
  logger.info("Closing ZMQ pipes")
@@ -55,6 +55,7 @@ class Interchange:
55
55
  poll_period: int,
56
56
  cert_dir: Optional[str],
57
57
  manager_selector: ManagerSelector,
58
+ run_id: str,
58
59
  ) -> None:
59
60
  """
60
61
  Parameters
@@ -125,6 +126,8 @@ class Interchange:
125
126
  self.command_channel.connect("tcp://{}:{}".format(client_address, client_ports[2]))
126
127
  logger.info("Connected to client")
127
128
 
129
+ self.run_id = run_id
130
+
128
131
  self.hub_address = hub_address
129
132
  self.hub_zmq_port = hub_zmq_port
130
133
 
@@ -227,6 +230,7 @@ class Interchange:
227
230
  d: Dict = cast(Dict, manager.copy())
228
231
  d['timestamp'] = datetime.datetime.now()
229
232
  d['last_heartbeat'] = datetime.datetime.fromtimestamp(d['last_heartbeat'])
233
+ d['run_id'] = self.run_id
230
234
 
231
235
  monitoring_radio.send((MessageType.NODE_INFO, d))
232
236
 
@@ -589,11 +589,13 @@ class TaskVineExecutor(BlockProviderExecutor, putils.RepresentationMixin):
589
589
  # Join all processes before exiting
590
590
  logger.debug("Joining on submit process")
591
591
  self._submit_process.join()
592
+ self._submit_process.close()
592
593
  logger.debug("Joining on collector thread")
593
594
  self._collector_thread.join()
594
595
  if self.worker_launch_method == 'factory':
595
596
  logger.debug("Joining on factory process")
596
597
  self._factory_process.join()
598
+ self._factory_process.close()
597
599
 
598
600
  # Shutdown multiprocessing queues
599
601
  self._ready_task_queue.close()
@@ -704,6 +704,8 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
704
704
 
705
705
  logger.debug("Joining on submit process")
706
706
  self.submit_process.join()
707
+ self.submit_process.close()
708
+
707
709
  logger.debug("Joining on collector thread")
708
710
  self.collector_thread.join()
709
711
 
@@ -283,7 +283,7 @@ class DatabaseManager:
283
283
  ):
284
284
 
285
285
  self.workflow_end = False
286
- self.workflow_start_message = None # type: Optional[MonitoringMessage]
286
+ self.workflow_start_message: Optional[MonitoringMessage] = None
287
287
  self.logdir = logdir
288
288
  os.makedirs(self.logdir, exist_ok=True)
289
289
 
@@ -299,10 +299,10 @@ class DatabaseManager:
299
299
  self.batching_interval = batching_interval
300
300
  self.batching_threshold = batching_threshold
301
301
 
302
- self.pending_priority_queue = queue.Queue() # type: queue.Queue[TaggedMonitoringMessage]
303
- self.pending_node_queue = queue.Queue() # type: queue.Queue[MonitoringMessage]
304
- self.pending_block_queue = queue.Queue() # type: queue.Queue[MonitoringMessage]
305
- self.pending_resource_queue = queue.Queue() # type: queue.Queue[MonitoringMessage]
302
+ self.pending_priority_queue: queue.Queue[TaggedMonitoringMessage] = queue.Queue()
303
+ self.pending_node_queue: queue.Queue[MonitoringMessage] = queue.Queue()
304
+ self.pending_block_queue: queue.Queue[MonitoringMessage] = queue.Queue()
305
+ self.pending_resource_queue: queue.Queue[MonitoringMessage] = queue.Queue()
306
306
 
307
307
  def start(self,
308
308
  priority_queue: "queue.Queue[TaggedMonitoringMessage]",
@@ -351,18 +351,18 @@ class DatabaseManager:
351
351
  If that happens, the message will be added to deferred_resource_messages and processed later.
352
352
 
353
353
  """
354
- inserted_tasks = set() # type: Set[object]
354
+ inserted_tasks: Set[object] = set()
355
355
 
356
356
  """
357
357
  like inserted_tasks but for task,try tuples
358
358
  """
359
- inserted_tries = set() # type: Set[Any]
359
+ inserted_tries: Set[Any] = set()
360
360
 
361
361
  # for any task ID, we can defer exactly one message, which is the
362
362
  # assumed-to-be-unique first message (with first message flag set).
363
363
  # The code prior to this patch will discard previous message in
364
364
  # the case of multiple messages to defer.
365
- deferred_resource_messages = {} # type: MonitoringMessage
365
+ deferred_resource_messages: MonitoringMessage = {}
366
366
 
367
367
  exception_happened = False
368
368
 
@@ -505,7 +505,7 @@ class DatabaseManager:
505
505
  "Got {} messages from block queue".format(len(block_info_messages)))
506
506
  # block_info_messages is possibly a nested list of dict (at different polling times)
507
507
  # Each dict refers to the info of a job/block at one polling time
508
- block_messages_to_insert = [] # type: List[Any]
508
+ block_messages_to_insert: List[Any] = []
509
509
  for block_msg in block_info_messages:
510
510
  block_messages_to_insert.extend(block_msg)
511
511
  self._insert(table=BLOCK, messages=block_messages_to_insert)
@@ -686,7 +686,7 @@ class DatabaseManager:
686
686
  logger.exception("Rollback failed")
687
687
 
688
688
  def _get_messages_in_batch(self, msg_queue: "queue.Queue[X]") -> List[X]:
689
- messages = [] # type: List[X]
689
+ messages: List[X] = []
690
690
  start = time.time()
691
691
  while True:
692
692
  if time.time() - start >= self.batching_interval or len(messages) >= self.batching_threshold:
@@ -106,7 +106,7 @@ class MonitoringHub(RepresentationMixin):
106
106
  self.resource_monitoring_enabled = resource_monitoring_enabled
107
107
  self.resource_monitoring_interval = resource_monitoring_interval
108
108
 
109
- def start(self, run_id: str, dfk_run_dir: str, config_run_dir: Union[str, os.PathLike]) -> None:
109
+ def start(self, dfk_run_dir: str, config_run_dir: Union[str, os.PathLike]) -> None:
110
110
 
111
111
  logger.debug("Starting MonitoringHub")
112
112
 
@@ -161,7 +161,6 @@ class MonitoringHub(RepresentationMixin):
161
161
  "zmq_port_range": self.hub_port_range,
162
162
  "logdir": self.logdir,
163
163
  "logging_level": logging.DEBUG if self.monitoring_debug else logging.INFO,
164
- "run_id": run_id
165
164
  },
166
165
  name="Monitoring-Router-Process",
167
166
  daemon=True,
@@ -199,10 +199,10 @@ def monitor(pid: int,
199
199
 
200
200
  pm = psutil.Process(pid)
201
201
 
202
- children_user_time = {} # type: Dict[int, float]
203
- children_system_time = {} # type: Dict[int, float]
204
- children_num_ctx_switches_voluntary = {} # type: Dict[int, float]
205
- children_num_ctx_switches_involuntary = {} # type: Dict[int, float]
202
+ children_user_time: Dict[int, float] = {}
203
+ children_system_time: Dict[int, float] = {}
204
+ children_num_ctx_switches_voluntary: Dict[int, float] = {}
205
+ children_num_ctx_switches_involuntary: Dict[int, float] = {}
206
206
 
207
207
  def accumulate_and_prepare() -> Dict[str, Any]:
208
208
  d = {"psutil_process_" + str(k): v for k, v in pm.as_dict().items() if k in simple}
@@ -31,7 +31,6 @@ class MonitoringRouter:
31
31
 
32
32
  monitoring_hub_address: str = "127.0.0.1",
33
33
  logdir: str = ".",
34
- run_id: str,
35
34
  logging_level: int = logging.INFO,
36
35
  atexit_timeout: int = 3, # in seconds
37
36
  priority_msgs: "queue.Queue[AddressedMonitoringMessage]",
@@ -71,7 +70,6 @@ class MonitoringRouter:
71
70
 
72
71
  self.hub_address = hub_address
73
72
  self.atexit_timeout = atexit_timeout
74
- self.run_id = run_id
75
73
 
76
74
  self.loop_freq = 10.0 # milliseconds
77
75
 
@@ -172,7 +170,6 @@ class MonitoringRouter:
172
170
  msg_0 = (msg, 0)
173
171
 
174
172
  if msg[0] == MessageType.NODE_INFO:
175
- msg[1]['run_id'] = self.run_id
176
173
  self.node_msgs.put(msg_0)
177
174
  elif msg[0] == MessageType.RESOURCE_INFO:
178
175
  self.resource_msgs.put(msg_0)
@@ -218,8 +215,7 @@ def router_starter(comm_q: "queue.Queue[Union[Tuple[int, int], str]]",
218
215
  zmq_port_range: Tuple[int, int],
219
216
 
220
217
  logdir: str,
221
- logging_level: int,
222
- run_id: str) -> None:
218
+ logging_level: int) -> None:
223
219
  setproctitle("parsl: monitoring router")
224
220
  try:
225
221
  router = MonitoringRouter(hub_address=hub_address,
@@ -227,7 +223,6 @@ def router_starter(comm_q: "queue.Queue[Union[Tuple[int, int], str]]",
227
223
  zmq_port_range=zmq_port_range,
228
224
  logdir=logdir,
229
225
  logging_level=logging_level,
230
- run_id=run_id,
231
226
  priority_msgs=priority_msgs,
232
227
  node_msgs=node_msgs,
233
228
  block_msgs=block_msgs,
@@ -1,6 +1,3 @@
1
- # Workstation Provider
2
- from parsl.providers.ad_hoc.ad_hoc import AdHocProvider
3
-
4
1
  # Cloud Providers
5
2
  from parsl.providers.aws.aws import AWSProvider
6
3
  from parsl.providers.azure.azure import AzureProvider
@@ -24,7 +21,6 @@ __all__ = ['LocalProvider',
24
21
  'SlurmProvider',
25
22
  'TorqueProvider',
26
23
  'LSFProvider',
27
- 'AdHocProvider',
28
24
  'PBSProProvider',
29
25
  'AWSProvider',
30
26
  'GoogleCloudProvider',
@@ -12,8 +12,12 @@ from parsl.utils import RepresentationMixin
12
12
  logger = logging.getLogger(__name__)
13
13
 
14
14
 
15
- class AdHocProvider(ExecutionProvider, RepresentationMixin):
16
- """ Ad-hoc execution provider
15
+ class DeprecatedAdHocProvider(ExecutionProvider, RepresentationMixin):
16
+ """ Deprecated ad-hoc execution provider
17
+
18
+ The (former) AdHocProvider is deprecated. See
19
+ `issue #3515 <https://github.com/Parsl/parsl/issues/3515>`_
20
+ for further discussion.
17
21
 
18
22
  This provider is used to provision execution resources over one or more ad hoc nodes
19
23
  that are each accessible over a Channel (say, ssh) but otherwise lack a cluster scheduler.
@@ -1,7 +1,7 @@
1
1
  from parsl.channels import LocalChannel
2
2
  from parsl.config import Config
3
3
  from parsl.executors import HighThroughputExecutor
4
- from parsl.providers import AdHocProvider
4
+ from parsl.providers.ad_hoc.ad_hoc import DeprecatedAdHocProvider
5
5
 
6
6
 
7
7
  def fresh_config():
@@ -10,7 +10,7 @@ def fresh_config():
10
10
  HighThroughputExecutor(
11
11
  label='AdHoc',
12
12
  encrypted=True,
13
- provider=AdHocProvider(
13
+ provider=DeprecatedAdHocProvider(
14
14
  channels=[LocalChannel(), LocalChannel()]
15
15
  )
16
16
  )
@@ -25,7 +25,8 @@ def make_interchange(*, interchange_address: Optional[str], cert_dir: Optional[s
25
25
  logdir=".",
26
26
  logging_level=logging.INFO,
27
27
  manager_selector=RandomManagerSelector(),
28
- poll_period=10)
28
+ poll_period=10,
29
+ run_id="test_run_id")
29
30
 
30
31
 
31
32
  @pytest.fixture
@@ -11,7 +11,8 @@ import time
11
11
 
12
12
  import pytest
13
13
 
14
- from parsl.channels import LocalChannel, SSHChannel
14
+ from parsl.channels import LocalChannel
15
+ from parsl.channels.ssh.ssh import DeprecatedSSHChannel
15
16
  from parsl.jobs.states import JobState
16
17
  from parsl.launchers import SingleNodeLauncher
17
18
  from parsl.providers import LocalProvider
@@ -92,10 +93,10 @@ def test_ssh_channel():
92
93
  # already exist, so create it here.
93
94
  pathlib.Path('{}/known.hosts'.format(config_dir)).touch(mode=0o600)
94
95
  script_dir = tempfile.mkdtemp()
95
- channel = SSHChannel('127.0.0.1', port=server_port,
96
- script_dir=remote_script_dir,
97
- host_keys_filename='{}/known.hosts'.format(config_dir),
98
- key_filename=priv_key)
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)
99
100
  try:
100
101
  p = LocalProvider(channel=channel,
101
102
  launcher=SingleNodeLauncher(debug=False))
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.08.05'
6
+ VERSION = '2024.08.12'
@@ -55,6 +55,7 @@ class Interchange:
55
55
  poll_period: int,
56
56
  cert_dir: Optional[str],
57
57
  manager_selector: ManagerSelector,
58
+ run_id: str,
58
59
  ) -> None:
59
60
  """
60
61
  Parameters
@@ -125,6 +126,8 @@ class Interchange:
125
126
  self.command_channel.connect("tcp://{}:{}".format(client_address, client_ports[2]))
126
127
  logger.info("Connected to client")
127
128
 
129
+ self.run_id = run_id
130
+
128
131
  self.hub_address = hub_address
129
132
  self.hub_zmq_port = hub_zmq_port
130
133
 
@@ -227,6 +230,7 @@ class Interchange:
227
230
  d: Dict = cast(Dict, manager.copy())
228
231
  d['timestamp'] = datetime.datetime.now()
229
232
  d['last_heartbeat'] = datetime.datetime.fromtimestamp(d['last_heartbeat'])
233
+ d['run_id'] = self.run_id
230
234
 
231
235
  monitoring_radio.send((MessageType.NODE_INFO, d))
232
236
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.8.5
3
+ Version: 2024.8.12
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.08.05.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.08.12.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -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=91FjQiTUY383ueAjkBAgE21My9nba6SP2a2SrbB1r1Q,11250
11
- parsl/version.py,sha256=Q4Vgcw4p_9D05HbgIMARfR7GS0_NIA80y2iwiXamViY,131
11
+ parsl/version.py,sha256=zmI7FIN8AXv3b0Vpa7LbYgVzdHVLVu3NkfVqBNTu6aU,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
@@ -17,22 +17,21 @@ parsl/app/futures.py,sha256=XU1NwkoNVsxy3KF5y0Ihsla5hPbhhuSikZInfS7h7Uo,2910
17
17
  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
- parsl/channels/__init__.py,sha256=DNFoy_e_vhNTABHVzo4nWilvBYe9W4Na6jj4vYf9El4,371
20
+ parsl/channels/__init__.py,sha256=OEZcuNBOxUwmzrHMZOuPvkw4kUxrbJDA99crDk61O90,131
21
21
  parsl/channels/base.py,sha256=bS43-Qv4VSxa83V6fJ54lNBL_eHCu-Ce7-aoy1C9vCc,4193
22
22
  parsl/channels/errors.py,sha256=Dp0FhtHpygn0IjX8nGurx-WrTJm9aw-Jjz3SSUT-jCc,3283
23
23
  parsl/channels/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  parsl/channels/local/local.py,sha256=xqH4HnipUN95NgvyB1r33SiqgQKkARgRKmg0_HnumUk,5311
25
25
  parsl/channels/oauth_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- parsl/channels/oauth_ssh/oauth_ssh.py,sha256=GrVOpJ6M6BwtGG4zOU4zakyphzuGY5M3suQ8PyjwyOA,3509
26
+ parsl/channels/oauth_ssh/oauth_ssh.py,sha256=2Hd5wEBVBhDQ9UHvO_iV4QhT6Na8GScy9O4HTM9Y5kA,3539
27
27
  parsl/channels/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- parsl/channels/ssh/ssh.py,sha256=ga8LMZ9ryTZxbgiyljL5DwusYygbUEe-Frt3SBIMecM,10125
28
+ parsl/channels/ssh/ssh.py,sha256=TOxEDVCO0hbr1oru_KVGo0vrVEh_bgbqcXXx6EZHehw,10135
29
29
  parsl/channels/ssh_il/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- parsl/channels/ssh_il/ssh_il.py,sha256=5XjotlA83UM4zGfnVriC9pE2NzaCT5hqvXZ9v4GG3pg,2410
30
+ parsl/channels/ssh_il/ssh_il.py,sha256=cAEAPfEoMfq_lkeBYfJAhrITci61IW_fkmffhUcIwqA,2440
31
31
  parsl/concurrent/__init__.py,sha256=TvIVceJYaJAsxedNBF3Vdo9lEQNHH_j3uxJv0zUjP7w,3288
32
32
  parsl/configs/ASPIRE1.py,sha256=eKnmz0QD3V522emtXMjS6Ppeooe5lzcBgCE6cxunbYY,1718
33
33
  parsl/configs/Azure.py,sha256=CJms3xWmdb-S3CksbHrPF2TfMxJC5I0faqUKCOzVg0k,1268
34
34
  parsl/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- parsl/configs/ad_hoc.py,sha256=Gwnehd5_K6IzUSPECHnNBljyO-LQ9fyaBClHiT_myp8,1352
36
35
  parsl/configs/bridges.py,sha256=NsTvCiHZHbJj-BsOXOpgS4hCblCHW_lnMa_VMb3SIww,1523
37
36
  parsl/configs/cc_in2p3.py,sha256=T9PjUt2OFFv3w2uXFeKfIDmE7j_nllD3jVouvCmPrCc,785
38
37
  parsl/configs/ec2.py,sha256=5xtlZI4Fc558sYXdM4nQQvQDBNPdzhRRCO14F-8H7Y4,944
@@ -62,7 +61,7 @@ parsl/data_provider/staging.py,sha256=ZDZuuFg38pjUStegKPcvPsfGp3iMeReMzfU6DSwtJj
62
61
  parsl/data_provider/zip.py,sha256=S4kVuH9lxAegRURYbvIUR7EYYBOccyslaqyCrVWUBhw,4497
63
62
  parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
63
  parsl/dataflow/dependency_resolvers.py,sha256=Om8Dgh7a0ZwgXAc6TlhxLSzvxXHDlNNV1aBNiD3JTNY,3325
65
- parsl/dataflow/dflow.py,sha256=StuwMnBoZQBkIthWY1O1QU1LDYEHbvtMJZYn4G0I5hc,68263
64
+ parsl/dataflow/dflow.py,sha256=2RV4MmQ3y6iwOT7aJaeWMsVPJ6tFT03V0YAcUbxogpk,68250
66
65
  parsl/dataflow/errors.py,sha256=9SxVhIJY_53FQx8x4OU8UA8nd7lvUbDllH7KfMXpYaY,2177
67
66
  parsl/dataflow/futures.py,sha256=08LuP-HFiHBIZmeKCjlsazw_WpQ5fwevrU2_WbidkYw,6080
68
67
  parsl/dataflow/memoization.py,sha256=l9uw1Bu50GucBF70M5relpGKFkE4dIM9T3R1KrxW0v0,9583
@@ -80,8 +79,8 @@ parsl/executors/flux/executor.py,sha256=8_xakLUu5zNJAHL0LbeTCFEWqWzRK1eE-3ep4GII
80
79
  parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
81
80
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
81
  parsl/executors/high_throughput/errors.py,sha256=Sak8e8UpiEcXefUjMHbhyXc4Rn7kJtOoh7L8wreBQdk,1638
83
- parsl/executors/high_throughput/executor.py,sha256=nCCLGjMFIYGHir5CYqRqrznQky_K3UWNKVPk4aT5w-s,38165
84
- parsl/executors/high_throughput/interchange.py,sha256=uWYg8NYMmeIxgyVCy1MuY56P3lrbxSSOO9pVoIjRwbo,30996
82
+ parsl/executors/high_throughput/executor.py,sha256=rMYu1PP-nXS8Oh9wu8Z-diNbI8J2fmuNqb3wvoyuMIc,38221
83
+ parsl/executors/high_throughput/interchange.py,sha256=upaJht6YnqvJqVF1Ub7GEyRFDtw1v19d0JmCWNXsi6k,31094
85
84
  parsl/executors/high_throughput/manager_record.py,sha256=yn3L8TUJFkgm2lX1x0SeS9mkvJowC0s2VIMCFiU7ThM,455
86
85
  parsl/executors/high_throughput/manager_selector.py,sha256=uRaEtcbDO2vXf8vjEcm7bfZVdeUlSPTRc3G4oFRO29M,820
87
86
  parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
@@ -98,7 +97,7 @@ parsl/executors/radical/rpex_worker.py,sha256=qli6i6ejKubTSv3lAE3YiW8RlkHrfl4Jhr
98
97
  parsl/executors/taskvine/__init__.py,sha256=9rwp3M8B0YyEhZMLO0RHaNw7u1nc01WHbXLqnBTanu0,293
99
98
  parsl/executors/taskvine/errors.py,sha256=euIYkSslrNSI85kyi2s0xzOaO9ik4c1fYHstMIeiBJk,652
100
99
  parsl/executors/taskvine/exec_parsl_function.py,sha256=ftGdJU78lKPPkphSHlEi4rj164mhuMHJjghVqfgeXKk,7085
101
- parsl/executors/taskvine/executor.py,sha256=XsUzFWgFWbxf06jDLMAKiXUF-F1_VLheZ5jhAwSphZk,30977
100
+ parsl/executors/taskvine/executor.py,sha256=yODov_9LNyuxJga2Ki-fp1WEHwDcwNsLIBaqP8bAvfw,31056
102
101
  parsl/executors/taskvine/factory.py,sha256=rWpEoFphLzqO3HEYyDEbQa14iyvgkdZg7hLZuaY39gQ,2638
103
102
  parsl/executors/taskvine/factory_config.py,sha256=AbE2fN2snrF5ITYrrS4DnGn2XkJHUFr_17DYHDHIwq0,3693
104
103
  parsl/executors/taskvine/manager.py,sha256=fwRSgYWpbsnr5jXlzvX0sQjOqryqn_77K_svJJ1HJ2U,25631
@@ -107,7 +106,7 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
107
106
  parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
107
  parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
109
108
  parsl/executors/workqueue/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
110
- parsl/executors/workqueue/executor.py,sha256=YaY_U5DxXU2NbswmlrcJ2BtXvSbV0ElM9ZlQzP_F_BU,49803
109
+ parsl/executors/workqueue/executor.py,sha256=aS864cpAvWQeW6hDqOtX_aUa1YnXsPcemuiVMq51pys,49840
111
110
  parsl/executors/workqueue/parsl_coprocess.py,sha256=cF1UmTgVLoey6QzBcbYgEiEsRidSaFfuO54f1HFw_EM,5737
112
111
  parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
113
112
  parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -121,13 +120,13 @@ parsl/launchers/base.py,sha256=CblcvPTJiu-MNLWaRtFe29SZQ0BpTOlaY8CGcHdlHIE,538
121
120
  parsl/launchers/errors.py,sha256=8YMV_CHpBNVa4eXkGE4x5DaFQlZkDCRCHmBktYcY6TA,467
122
121
  parsl/launchers/launchers.py,sha256=VB--fiVv_IQne3DydTMSdGUY0o0g69puAs-Hd3mJ2vo,15464
123
122
  parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
124
- parsl/monitoring/db_manager.py,sha256=qPdW_MINycSn6MxxFk2s_R-t8g1cbJhxncVR5mDgeGs,37011
123
+ parsl/monitoring/db_manager.py,sha256=XAhnxX56ZupYL0HfHuQDiwmGsahXVRc-A4VV8tfwths,36931
125
124
  parsl/monitoring/errors.py,sha256=D6jpYzEzp0d6FmVKGqhvjAxr4ztZfJX2s-aXemH9bBU,148
126
125
  parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
127
- parsl/monitoring/monitoring.py,sha256=Sr1PIue0ZzBSBbbLDnT477iRNecizt8CVh7easaLGsY,13601
126
+ parsl/monitoring/monitoring.py,sha256=FhZ4qC74mTvH0n4z9jNHhomIASf0V8DqnRuZQEJGGP8,13524
128
127
  parsl/monitoring/radios.py,sha256=cHdpBOW1ITYvFnOgYjziuZOauq8p7mlSBOvcbIP78mg,6437
129
- parsl/monitoring/remote.py,sha256=qH1N3My8F473CHKxFrA2CsaL0Uege26tQi9-KrWQrr4,13771
130
- parsl/monitoring/router.py,sha256=Gn8nzgGABlN-048c3bJqAojd2umnIqcTe17Mq-XnCgI,11423
128
+ parsl/monitoring/remote.py,sha256=avIWMvejN0LeIXpt_RCXJxGLbsXhapUab2rS5Tmjca4,13739
129
+ parsl/monitoring/router.py,sha256=ezuE5tTBa-Ry0hSHtUiWacxnP37VkLUC1vuZaIBRNBA,11224
131
130
  parsl/monitoring/types.py,sha256=_WGizCTgQVOkJ2dvNfsvHpYBj21Ky3bJsmyIskIx10I,631
132
131
  parsl/monitoring/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
132
  parsl/monitoring/queries/pandas.py,sha256=0Z2r0rjTKCemf0eaDkF1irvVHn5g7KC5SYETvQPRxwU,2232
@@ -152,12 +151,12 @@ parsl/monitoring/visualization/templates/resource_usage.html,sha256=__QEaAPdO8kz
152
151
  parsl/monitoring/visualization/templates/task.html,sha256=omDwp7zFXHVtuGsUCXcB7xLAsAW0Vrjd1b-wFZj9y70,2803
153
152
  parsl/monitoring/visualization/templates/workflow.html,sha256=QCSHAPHK_2C3gNcZ3NmChLFG6xuchZEjT_iLQ3wwXmk,1871
154
153
  parsl/monitoring/visualization/templates/workflows_summary.html,sha256=7brKKNsxcT4z-l10BKJlgTxQtGL033ZS5jEDdSmsPEE,891
155
- parsl/providers/__init__.py,sha256=Qg42K_r9tiwtUA4YK74L1IPg9ffsH-PoefnbF-gBfNo,1185
154
+ parsl/providers/__init__.py,sha256=fvmVlu4aHw796K-fuUqxCHdK8KhrQviMARSmUQl1XXs,1077
156
155
  parsl/providers/base.py,sha256=u8oGlAaDfh15EgOJNJF1aZUy0Ou-UW6UY0b7ZI7Ecjo,5702
157
156
  parsl/providers/cluster_provider.py,sha256=o75wJHHyZkecjEBhGGBCMUQ1JlsecAhAKxX_Qd2pyg8,4668
158
157
  parsl/providers/errors.py,sha256=_CbCmpguzcA81SC5dPLkDZs1AShzacGKttNhuzNBeiQ,2270
159
158
  parsl/providers/ad_hoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
- parsl/providers/ad_hoc/ad_hoc.py,sha256=jADPUEp_zVj2mijlDYdPD9Zkqj2l0uspJxVRxQ-9xvk,8302
159
+ parsl/providers/ad_hoc/ad_hoc.py,sha256=NPZRJnVYT7IB2TCLThofcB7g0WZqgT_N0hDs3K86zhE,8466
161
160
  parsl/providers/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
161
  parsl/providers/aws/aws.py,sha256=nS899gamCAhiIY-4zwaEToa7Om73PrAz4dvX5YSEkUQ,28985
163
162
  parsl/providers/aws/template.py,sha256=N7OEpp7YP6CK5RUtLOwFnks7AE2UG5hHXddh8FF0BFs,347
@@ -209,7 +208,6 @@ parsl/tests/test_summary.py,sha256=x1RfWCFLzHjBw2ukwoRZPW1LFCKiwDmxx86ES-6yGRA,5
209
208
  parsl/tests/test_thread_parallelism.py,sha256=TVNeQ1NkUhaf3YbbzUSH-ozFFdX_GbX-5ygommjVxvc,1653
210
209
  parsl/tests/utils.py,sha256=YqUlBTj2UoAFVKVdLKh-1Y6MQM_ZSHPJOQ4GfQvFXyk,110
211
210
  parsl/tests/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
212
- parsl/tests/configs/ad_hoc_cluster_htex.py,sha256=twCY2ppy1M7EpPkwVC-8oboaiSwqNBrQV0noFBWPMJ0,1301
213
211
  parsl/tests/configs/azure_single_node.py,sha256=iX99_MCPkInOzByB5QRYYBSbWDhFaTcA7CkJk9DreuU,1729
214
212
  parsl/tests/configs/bluewaters.py,sha256=SyCQ99Iih6sYjJVLj5C-AzUqff8vowP113ZC8JHDc24,1370
215
213
  parsl/tests/configs/bridges.py,sha256=WqMa340ZEXRmwgY7oe6QjJnUMO3Y3vAfKngg0XNyVRI,1602
@@ -220,12 +218,11 @@ parsl/tests/configs/ec2_single_node.py,sha256=rK9AfMf4C84CXMhS5nhgHA_dNG2An7Yiq2
220
218
  parsl/tests/configs/ec2_spot.py,sha256=NKDCKgKxYNOHGVLBl2DFfiUwkR6xQnyhNb_E04TBs28,1253
221
219
  parsl/tests/configs/flux_local.py,sha256=xliKQfB5FFpfNHWYEHoA8FKOTVHFCXVhWNuKQ5VJNTk,182
222
220
  parsl/tests/configs/frontera.py,sha256=VXaRcvsi9ZjqJHi71BbKXSJBuQXdhCzPxXKW7H3LRBI,1567
223
- parsl/tests/configs/htex_ad_hoc_cluster.py,sha256=Nr5ZVs4kVvX2UbRk8j9VW6xYGf9SR43SvodkU8RVWEQ,944
224
221
  parsl/tests/configs/htex_local.py,sha256=o7Lxz1nErHpLNcH7vEEy9KyCNiEf6r3gpCrBmdQbh94,719
225
222
  parsl/tests/configs/htex_local_alternate.py,sha256=CnEfKbt1nnGYwKVICA2tmyqDNH0GP9pFLao2bNXGRHI,2510
226
223
  parsl/tests/configs/htex_local_intask_staging.py,sha256=E7uZD_AIAbxavkw4VrVXlGG7k42YJZv2qluAO-W0VvI,886
227
224
  parsl/tests/configs/htex_local_rsync_staging.py,sha256=cqTRcHLjqYnOL07Lb8ecTzQuzP-dWDpWdKhgtTwo-fU,940
228
- parsl/tests/configs/local_adhoc.py,sha256=a4veilmLBG7UaBvhOaEXY9euYOFWgg9ZqWgG1786Jsw,475
225
+ parsl/tests/configs/local_adhoc.py,sha256=jlyDwwIm0uVuyDgKZCb3wa3k0IaqcYT0ErMhu_0N26s,509
229
226
  parsl/tests/configs/local_radical.py,sha256=C70I6ssfaaHEY1MMCC77izpp6sdANALH-P2mDR2msN0,417
230
227
  parsl/tests/configs/local_radical_mpi.py,sha256=5OabeXXJPE0fyiA1AlGcQYoPRjQRk-HNA-xPLTFyAr4,532
231
228
  parsl/tests/configs/local_threads.py,sha256=oEnQSlom_JMLFX9_Ln49JAfOP3nSMbw8gTaDJo_NYfo,202
@@ -243,7 +240,6 @@ parsl/tests/configs/nscc_singapore.py,sha256=ECENZcBuCjkY6OWZstEMhfMrmjRmjCc7ELd
243
240
  parsl/tests/configs/osg_htex.py,sha256=x-C_r7Kpwvqroc4Ay1Yaya9K6_j7IU1ywqPegBU7HKI,1371
244
241
  parsl/tests/configs/petrelkube.py,sha256=uUxrZrD_cF-_t6ytlRA_MUtw8RQbpW0CmNRbw3mWs1o,1699
245
242
  parsl/tests/configs/summit.py,sha256=0LbuTVmc8nl2eGiqAayhV0RCx0pg5kUpYhz9LvTFhDo,1378
246
- parsl/tests/configs/swan_htex.py,sha256=WEICoOrYWJKlium7R52TRHJ6Env_KVhKE2kbgu2ZJD8,1501
247
243
  parsl/tests/configs/taskvine_ex.py,sha256=Nsovxtb59q6ta2opGrl7ufWcavYQtzSPrscLmaLYkUU,472
248
244
  parsl/tests/configs/theta.py,sha256=bkwcFcZYSkJOfLdcPHiAN2BRRGz3nLTaPylvdm3dcJ8,1298
249
245
  parsl/tests/configs/user_opts.py,sha256=fNO1OxISFPP7IyJ_iwf8dQ6EagVr2StXtOWmGnA9MeI,6265
@@ -255,22 +251,15 @@ parsl/tests/integration/test_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
255
251
  parsl/tests/integration/test_channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
252
  parsl/tests/integration/test_channels/test_channels.py,sha256=Nv_1ljrJ5Miqe4U5q9XPBqc0YZbJC90TIsH0p3203Gs,323
257
253
  parsl/tests/integration/test_channels/test_local_channel.py,sha256=_j9z4LqdfawEQRlae6EHpMtrhMPMapbIlJwoHEibAuE,1009
258
- parsl/tests/integration/test_channels/test_scp_1.py,sha256=K7KWTeiZULBBydbvfmBzvRm7KM7nlkZn_O2-v5D5yY4,1014
259
- parsl/tests/integration/test_channels/test_ssh_1.py,sha256=5HQehVteKCPXFt4V3W2YXgGvDm0sKP2MmJC0TCnJUbs,933
260
- parsl/tests/integration/test_channels/test_ssh_errors.py,sha256=VKaNZAbXr7uv8EhG7FIVm8Veq2WnMJ2Jel7A3t5v_dQ,1279
261
- parsl/tests/integration/test_channels/test_ssh_file_transport.py,sha256=9cBi7CPzM-4NxsCW3VfmRWgOvOb-mk8hpH187clScvc,904
262
- parsl/tests/integration/test_channels/test_ssh_interactive.py,sha256=voUAR21RZD0c9fPDfAN9PZiiZw58qk_hxC92LL10VSA,568
263
254
  parsl/tests/integration/test_stress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
264
255
  parsl/tests/integration/test_stress/test_python_simple.py,sha256=QZMhi6E0OmMsKi3QkHJZdNpALSrWshrLcKsstLANUWE,1007
265
256
  parsl/tests/integration/test_stress/test_python_threads.py,sha256=-4dW-g69cu6uhSvk5HiH0fI6ceckQNqUXZGvNK6QGq4,897
266
257
  parsl/tests/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
267
258
  parsl/tests/manual_tests/htex_local.py,sha256=6bbnCPy7t_sJUrvDXiLB97joP8UWGjAdEs4aRP6PkFQ,820
268
- parsl/tests/manual_tests/test_ad_hoc_htex.py,sha256=CPBzPd21GwKlz5jbHCipPepc3v0ZFiTdQCR8pAwlxkQ,1255
269
259
  parsl/tests/manual_tests/test_basic.py,sha256=3uCS9BqaZmKTNtNfJSsJIg2exlTAdC0Sdc1w9hY9Tvc,4023
270
260
  parsl/tests/manual_tests/test_fan_in_out_htex_remote.py,sha256=j9GkGwV7sP8ytIz4L7usuVacvBfFyIm-lq9F74KO85o,2422
271
261
  parsl/tests/manual_tests/test_log_filter.py,sha256=jwKclAVuESdlGK_giBuHDkY6ryX6rZB7q01lXT5K0XU,1872
272
262
  parsl/tests/manual_tests/test_memory_limits.py,sha256=XGV_YmIeiGMt1HWYS0Zxo-XkVoKsvHhl11_U3MTg1KI,2677
273
- parsl/tests/manual_tests/test_oauth_ssh.py,sha256=v7msnSS5ywrWl7oqB_gR72oU2owrpzxaQ4vBt9C8pxI,337
274
263
  parsl/tests/manual_tests/test_regression_220.py,sha256=Jo2puWt1W0r1rJfaJFgd2ZPgR3i6uOXzrLRcfYDZWDo,931
275
264
  parsl/tests/manual_tests/test_udp_simple.py,sha256=VyEbE3G5pcRjzbdUbQlL0BHiilfOsNsbbLOJghU7n84,1037
276
265
  parsl/tests/manual_tests/test_worker_count.py,sha256=Cv8nAWMXAREiiGEBUr_8JyI87ffp8JGAyDqVXzcjX_0,2072
@@ -353,7 +342,7 @@ parsl/tests/test_htex/test_managers_command.py,sha256=Y-eUjtBzwW9erCYdph9bOesbkU
353
342
  parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8oqLOIxO6cJgGJMtQ,745
354
343
  parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=Axn8us43dA722O4PWdqxCJM5f_vinZqjFT1WAEvC_ZM,1995
355
344
  parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
356
- parsl/tests/test_htex/test_zmq_binding.py,sha256=BLXJC45qKb8cWbiSJpnzoRI9s0CCmLb1Ex3s92ycanw,3905
345
+ parsl/tests/test_htex/test_zmq_binding.py,sha256=Bq1HHuMxBE_AcaP1VZ-RqE4euCHO__Du05b2UZ5H1RA,3950
357
346
  parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
358
347
  parsl/tests/test_monitoring/test_app_names.py,sha256=ayyxySGWpKSe9dDw2UeJo1dicxjpALRuLsJfprZV4Eg,2174
359
348
  parsl/tests/test_monitoring/test_basic.py,sha256=nQERwVH56CjrKc_YSsMxH5UziJDqN2357Vhyd0brbRU,4177
@@ -374,7 +363,7 @@ parsl/tests/test_mpi_apps/test_mpiex.py,sha256=U4Djvzsf_oKgtxL6HXBxxEzrHiYVw2dQB
374
363
  parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=A7NwNT4LalCSOiHws1ALrrWy8Mn1IItpv9olhnRVjs0,3987
375
364
  parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
376
365
  parsl/tests/test_providers/test_cobalt_deprecation_warning.py,sha256=UN2W6xJxuLx2euPqArORKFEU2VXez9_PYqq-0rZHanQ,391
377
- parsl/tests/test_providers/test_local_provider.py,sha256=XCAy64oM3IZ6k0RYBIr6s-D2LL7gr6_xXZ_3Pv1D0gM,7076
366
+ parsl/tests/test_providers/test_local_provider.py,sha256=R96E1eWgHVkvOQ1Au9wj-gfdWKAqGc-qlygFuxpGFQ8,7160
378
367
  parsl/tests/test_providers/test_pbspro_template.py,sha256=-bi1vags9yyNfpBxtjTqFjzMIg1VVPyf2M958UcXWmA,855
379
368
  parsl/tests/test_providers/test_slurm_instantiate.py,sha256=eW3pEZRIzZO1-eKFrBc7N5uoN5otwghgbqut74Kyqoc,500
380
369
  parsl/tests/test_providers/test_slurm_template.py,sha256=pBEeimO-vGbMmC1QT7BP7s5BH6fFeqaWnI4f6tWPFEo,901
@@ -470,13 +459,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
470
459
  parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
471
460
  parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
472
461
  parsl/usage_tracking/usage.py,sha256=qNEJ7nPimqd3Y7OWFLdYmNwJ6XDKlyfV_fTzasxsQw8,8690
473
- parsl-2024.8.5.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
474
- parsl-2024.8.5.data/scripts/interchange.py,sha256=47m763R5OTuaWDRPP9JNt4HWWQxgUa_VLGKG3Xy5Jwc,30983
475
- parsl-2024.8.5.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
476
- parsl-2024.8.5.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
477
- parsl-2024.8.5.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
478
- parsl-2024.8.5.dist-info/METADATA,sha256=eYZYIdlSdAFvNsgCxzT0xhDvv8Snm02H-7u08RjiSSM,4044
479
- parsl-2024.8.5.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
480
- parsl-2024.8.5.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
481
- parsl-2024.8.5.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
482
- parsl-2024.8.5.dist-info/RECORD,,
462
+ parsl-2024.8.12.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
463
+ parsl-2024.8.12.data/scripts/interchange.py,sha256=Gl9h3_MN4Ux2FJZxd2ObfTSZ5T1INYQDhU_bYFezbkE,31081
464
+ parsl-2024.8.12.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
465
+ parsl-2024.8.12.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
466
+ parsl-2024.8.12.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
467
+ parsl-2024.8.12.dist-info/METADATA,sha256=7Jds7wt0Rauv9RhkD1Qqdp3G7xI0YRSK4QHDpooLdjQ,4045
468
+ parsl-2024.8.12.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
469
+ parsl-2024.8.12.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
470
+ parsl-2024.8.12.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
471
+ parsl-2024.8.12.dist-info/RECORD,,
parsl/configs/ad_hoc.py DELETED
@@ -1,38 +0,0 @@
1
- from typing import Any, Dict
2
-
3
- from parsl.channels import SSHChannel
4
- from parsl.config import Config
5
- from parsl.executors import HighThroughputExecutor
6
- from parsl.providers import AdHocProvider
7
- from parsl.usage_tracking.levels import LEVEL_1
8
-
9
- user_opts: Dict[str, Dict[str, Any]]
10
- user_opts = {'adhoc':
11
- {'username': 'YOUR_USERNAME',
12
- 'script_dir': 'YOUR_SCRIPT_DIR',
13
- 'remote_hostnames': ['REMOTE_HOST_URL_1', 'REMOTE_HOST_URL_2']
14
- }
15
- }
16
-
17
-
18
- config = Config(
19
- executors=[
20
- HighThroughputExecutor(
21
- label='remote_htex',
22
- max_workers_per_node=2,
23
- worker_logdir_root=user_opts['adhoc']['script_dir'],
24
- provider=AdHocProvider(
25
- # Command to be run before starting a worker, such as:
26
- # 'module load Anaconda; source activate parsl_env'.
27
- worker_init='',
28
- channels=[SSHChannel(hostname=m,
29
- username=user_opts['adhoc']['username'],
30
- script_dir=user_opts['adhoc']['script_dir'],
31
- ) for m in user_opts['adhoc']['remote_hostnames']]
32
- )
33
- )
34
- ],
35
- # AdHoc Clusters should not be setup with scaling strategy.
36
- strategy='none',
37
- usage_tracking=LEVEL_1,
38
- )
@@ -1,35 +0,0 @@
1
- from typing import Any, Dict
2
-
3
- from parsl.channels import SSHChannel
4
- from parsl.config import Config
5
- from parsl.executors import HighThroughputExecutor
6
- from parsl.providers import AdHocProvider
7
-
8
- user_opts = {'adhoc':
9
- {'username': 'YOUR_USERNAME',
10
- 'script_dir': 'YOUR_SCRIPT_DIR',
11
- 'remote_hostnames': ['REMOTE_HOST_URL_1', 'REMOTE_HOST_URL_2']
12
- }
13
- } # type: Dict[str, Dict[str, Any]]
14
-
15
- config = Config(
16
- executors=[
17
- HighThroughputExecutor(
18
- label='remote_htex',
19
- max_workers_per_node=2,
20
- worker_logdir_root=user_opts['adhoc']['script_dir'],
21
- encrypted=True,
22
- provider=AdHocProvider(
23
- # Command to be run before starting a worker, such as:
24
- # 'module load Anaconda; source activate parsl_env'.
25
- worker_init='',
26
- channels=[SSHChannel(hostname=m,
27
- username=user_opts['adhoc']['username'],
28
- script_dir=user_opts['adhoc']['script_dir'],
29
- ) for m in user_opts['adhoc']['remote_hostnames']]
30
- )
31
- )
32
- ],
33
- # AdHoc Clusters should not be setup with scaling strategy.
34
- strategy='none',
35
- )
@@ -1,26 +0,0 @@
1
- from parsl.channels import SSHChannel
2
- from parsl.config import Config
3
- from parsl.executors import HighThroughputExecutor
4
- from parsl.providers import AdHocProvider
5
- from parsl.tests.configs.user_opts import user_opts
6
-
7
- config = Config(
8
- executors=[
9
- HighThroughputExecutor(
10
- label='remote_htex',
11
- cores_per_worker=1,
12
- worker_debug=False,
13
- address=user_opts['public_ip'],
14
- encrypted=True,
15
- provider=AdHocProvider(
16
- move_files=False,
17
- parallelism=1,
18
- worker_init=user_opts['adhoc']['worker_init'],
19
- channels=[SSHChannel(hostname=m,
20
- username=user_opts['adhoc']['username'],
21
- script_dir=user_opts['adhoc']['script_dir'],
22
- ) for m in user_opts['adhoc']['remote_hostnames']]
23
- )
24
- )
25
- ],
26
- )
@@ -1,43 +0,0 @@
1
- """
2
- ================== Block
3
- | ++++++++++++++ | Node
4
- | | | |
5
- | | Task | | . . .
6
- | | | |
7
- | ++++++++++++++ |
8
- ==================
9
- """
10
- from parsl.channels import SSHChannel
11
- from parsl.config import Config
12
- from parsl.executors import HighThroughputExecutor
13
- from parsl.launchers import AprunLauncher
14
- from parsl.providers import TorqueProvider
15
-
16
- # If you are a developer running tests, make sure to update parsl/tests/configs/user_opts.py
17
- # If you are a user copying-and-pasting this as an example, make sure to either
18
- # 1) create a local `user_opts.py`, or
19
- # 2) delete the user_opts import below and replace all appearances of `user_opts` with the literal value
20
- # (i.e., user_opts['swan']['username'] -> 'your_username')
21
- from .user_opts import user_opts
22
-
23
- config = Config(
24
- executors=[
25
- HighThroughputExecutor(
26
- label='swan_htex',
27
- encrypted=True,
28
- provider=TorqueProvider(
29
- channel=SSHChannel(
30
- hostname='swan.cray.com',
31
- username=user_opts['swan']['username'],
32
- script_dir=user_opts['swan']['script_dir'],
33
- ),
34
- nodes_per_block=1,
35
- init_blocks=1,
36
- max_blocks=1,
37
- launcher=AprunLauncher(),
38
- scheduler_options=user_opts['swan']['scheduler_options'],
39
- worker_init=user_opts['swan']['worker_init'],
40
- ),
41
- )
42
- ]
43
- )
@@ -1,45 +0,0 @@
1
- import os
2
-
3
- from parsl.channels.ssh.ssh import SSHChannel as SSH
4
-
5
-
6
- def connect_and_list(hostname, username):
7
- out = ''
8
- conn = SSH(hostname, username=username)
9
- conn.push_file(os.path.abspath('remote_run.sh'), '/home/davidk/')
10
- # ec, out, err = conn.execute_wait("ls /tmp/remote_run.sh; bash /tmp/remote_run.sh")
11
- conn.close()
12
- return out
13
-
14
-
15
- script = '''#!/bin/bash
16
- echo "Hostname: $HOSTNAME"
17
- echo "Cpu info -----"
18
- cat /proc/cpuinfo
19
- echo "Done----------"
20
- '''
21
-
22
-
23
- def test_connect_1():
24
- with open('remote_run.sh', 'w') as f:
25
- f.write(script)
26
-
27
- sites = {
28
- 'midway': {
29
- 'url': 'midway.rcc.uchicago.edu',
30
- 'uname': 'yadunand'
31
- },
32
- 'swift': {
33
- 'url': 'swift.rcc.uchicago.edu',
34
- 'uname': 'yadunand'
35
- }
36
- }
37
-
38
- for site in sites.values():
39
- out = connect_and_list(site['url'], site['uname'])
40
- print("Sitename :{0} hostname:{1}".format(site['url'], out))
41
-
42
-
43
- if __name__ == "__main__":
44
-
45
- test_connect_1()
@@ -1,40 +0,0 @@
1
- from parsl.channels.ssh.ssh import SSHChannel as SSH
2
-
3
-
4
- def connect_and_list(hostname, username):
5
- conn = SSH(hostname, username=username)
6
- ec, out, err = conn.execute_wait("echo $HOSTNAME")
7
- conn.close()
8
- return out
9
-
10
-
11
- def test_midway():
12
- ''' Test ssh channels to midway
13
- '''
14
- url = 'midway.rcc.uchicago.edu'
15
- uname = 'yadunand'
16
- out = connect_and_list(url, uname)
17
- print("Sitename :{0} hostname:{1}".format(url, out))
18
-
19
-
20
- def test_beagle():
21
- ''' Test ssh channels to beagle
22
- '''
23
- url = 'login04.beagle.ci.uchicago.edu'
24
- uname = 'yadunandb'
25
- out = connect_and_list(url, uname)
26
- print("Sitename :{0} hostname:{1}".format(url, out))
27
-
28
-
29
- def test_osg():
30
- ''' Test ssh connectivity to osg
31
- '''
32
- url = 'login.osgconnect.net'
33
- uname = 'yadunand'
34
- out = connect_and_list(url, uname)
35
- print("Sitename :{0} hostname:{1}".format(url, out))
36
-
37
-
38
- if __name__ == "__main__":
39
-
40
- pass
@@ -1,46 +0,0 @@
1
- from parsl.channels.errors import BadHostKeyException, SSHException
2
- from parsl.channels.ssh.ssh import SSHChannel as SSH
3
-
4
-
5
- def connect_and_list(hostname, username):
6
- conn = SSH(hostname, username=username)
7
- ec, out, err = conn.execute_wait("echo $HOSTNAME")
8
- conn.close()
9
- return out
10
-
11
-
12
- def test_error_1():
13
- try:
14
- connect_and_list("bad.url.gov", "ubuntu")
15
- except Exception as e:
16
- assert type(e) is SSHException, "Expected SSException, got: {0}".format(e)
17
-
18
-
19
- def test_error_2():
20
- try:
21
- connect_and_list("swift.rcc.uchicago.edu", "mango")
22
- except SSHException:
23
- print("Caught the right exception")
24
- else:
25
- raise Exception("Expected SSException, got: {0}".format(e))
26
-
27
-
28
- def test_error_3():
29
- ''' This should work
30
- '''
31
- try:
32
- connect_and_list("edison.nersc.gov", "yadunand")
33
- except BadHostKeyException as e:
34
- print("Caught exception BadHostKeyException: ", e)
35
- else:
36
- assert False, "Expected SSException, got: {0}".format(e)
37
-
38
-
39
- if __name__ == "__main__":
40
-
41
- tests = [test_error_1, test_error_2, test_error_3]
42
-
43
- for test in tests:
44
- print("---------Running : {0}---------------".format(test))
45
- test()
46
- print("----------------------DONE--------------------------")
@@ -1,41 +0,0 @@
1
- import parsl
2
- from parsl.channels.ssh.ssh import SSHChannel as SSH
3
-
4
-
5
- def connect_and_list(hostname, username):
6
- conn = SSH(hostname, username=username)
7
- ec, out, err = conn.execute_wait("echo $HOSTNAME")
8
- conn.close()
9
- return out
10
-
11
-
12
- def test_push(conn, fname="test001.txt"):
13
-
14
- with open(fname, 'w') as f:
15
- f.write("Hello from parsl.ssh testing\n")
16
-
17
- conn.push_file(fname, "/tmp")
18
- ec, out, err = conn.execute_wait("ls /tmp/{0}".format(fname))
19
- print(ec, out, err)
20
-
21
-
22
- def test_pull(conn, fname="test001.txt"):
23
-
24
- local = "foo"
25
- conn.pull_file("/tmp/{0}".format(fname), local)
26
-
27
- with open("{0}/{1}".format(local, fname), 'r') as f:
28
- print(f.readlines())
29
-
30
-
31
- if __name__ == "__main__":
32
-
33
- parsl.set_stream_logger()
34
-
35
- # This is for testing
36
- conn = SSH("midway.rcc.uchicago.edu", username="yadunand")
37
-
38
- test_push(conn)
39
- test_pull(conn)
40
-
41
- conn.close()
@@ -1,24 +0,0 @@
1
- import parsl
2
- from parsl.channels.ssh_il.ssh_il import SSHInteractiveLoginChannel as SSH
3
-
4
-
5
- def connect_and_list(hostname, username):
6
- conn = SSH(hostname, username=username)
7
- ec, out, err = conn.execute_wait("echo $HOSTNAME")
8
- conn.close()
9
- return out
10
-
11
-
12
- def test_cooley():
13
- ''' Test ssh channels to midway
14
- '''
15
- url = 'cooley.alcf.anl.gov'
16
- uname = 'yadunand'
17
- out = connect_and_list(url, uname)
18
- print("Sitename :{0} hostname:{1}".format(url, out))
19
- return
20
-
21
-
22
- if __name__ == "__main__":
23
- parsl.set_stream_logger()
24
- test_cooley()
@@ -1,49 +0,0 @@
1
- import parsl
2
- from parsl import python_app
3
-
4
- parsl.set_stream_logger()
5
-
6
- from parsl.channels import SSHChannel
7
- from parsl.config import Config
8
- from parsl.executors import HighThroughputExecutor
9
- from parsl.providers import AdHocProvider
10
-
11
- remotes = ['midway2-login2.rcc.uchicago.edu', 'midway2-login1.rcc.uchicago.edu']
12
-
13
- config = Config(
14
- executors=[
15
- HighThroughputExecutor(
16
- label='AdHoc',
17
- max_workers_per_node=2,
18
- worker_logdir_root="/scratch/midway2/yadunand/parsl_scripts",
19
- encrypted=True,
20
- provider=AdHocProvider(
21
- worker_init="source /scratch/midway2/yadunand/parsl_env_setup.sh",
22
- channels=[SSHChannel(hostname=m,
23
- username="yadunand",
24
- script_dir="/scratch/midway2/yadunand/parsl_cluster")
25
- for m in remotes]
26
- )
27
- )
28
- ]
29
- )
30
-
31
-
32
- @python_app
33
- def platform(sleep=2, stdout=None):
34
- import platform
35
- import time
36
- time.sleep(sleep)
37
- return platform.uname()
38
-
39
-
40
- def test_raw_provider():
41
-
42
- parsl.load(config)
43
-
44
- x = [platform() for i in range(10)]
45
- print([i.result() for i in x])
46
-
47
-
48
- if __name__ == "__main__":
49
- test_raw_provider()
@@ -1,13 +0,0 @@
1
- from parsl.channels import OAuthSSHChannel
2
-
3
-
4
- def test_channel():
5
- channel = OAuthSSHChannel(hostname='ssh.demo.globus.org', username='yadunand')
6
- x, stdout, stderr = channel.execute_wait('ls')
7
- print(x, stdout, stderr)
8
- assert x == 0, "Expected exit code 0, got {}".format(x)
9
-
10
-
11
- if __name__ == '__main__':
12
-
13
- test_channel()