multiSSH3 5.84__py3-none-any.whl → 5.85__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.

Potentially problematic release.


This version of multiSSH3 might be problematic. Click here for more details.

multiSSH3.py CHANGED
@@ -81,10 +81,10 @@ except :
81
81
  print('Warning: functools.lru_cache is not available, multiSSH3 will run slower without cache.',file=sys.stderr)
82
82
  def cache_decorator(func):
83
83
  return func
84
- version = '5.84'
84
+ version = '5.85'
85
85
  VERSION = version
86
86
  __version__ = version
87
- COMMIT_DATE = '2025-07-31'
87
+ COMMIT_DATE = '2025-08-13'
88
88
 
89
89
  CONFIG_FILE_CHAIN = ['./multiSSH3.config.json',
90
90
  '~/multiSSH3.config.json',
@@ -624,6 +624,19 @@ def join_threads(threads=__running_threads,timeout=None):
624
624
  thread.join(timeout=timeout)
625
625
  if threads is __running_threads:
626
626
  __running_threads = {t for t in threads if t.is_alive()}
627
+
628
+ def format_commands(commands):
629
+ if not commands:
630
+ commands = []
631
+ else:
632
+ commands = [commands] if isinstance(commands,str) else commands
633
+ # reformat commands into a list of strings, join the iterables if they are not strings
634
+ try:
635
+ commands = [' '.join(command) if not isinstance(command,str) else command for command in commands]
636
+ except:
637
+ eprint(f"Warning: commands should ideally be a list of strings. Now mssh had failed to convert {commands!r} to a list of strings. Continuing anyway but expect failures.")
638
+ return commands
639
+
627
640
  #%% ------------ Compacting Hostnames ----------------
628
641
  def __tokenize_hostname(hostname):
629
642
  """
@@ -2612,7 +2625,7 @@ def getStrCommand(hosts = DEFAULT_HOSTS,commands = None,oneonone = DEFAULT_ONE_O
2612
2625
  history_file = history_file, env_file = env_file,
2613
2626
  repeat = repeat,interval = interval,
2614
2627
  shortend = shortend)
2615
- commands = [command.replace('"', '\\"').replace('\n', '\\n').replace('\t', '\\t') for command in commands]
2628
+ commands = [command.replace('"', '\\"').replace('\n', '\\n').replace('\t', '\\t') for command in format_commands(commands)]
2616
2629
  commandStr = '"' + '" "'.join(commands) + '"' if commands else ''
2617
2630
  filePath = os.path.abspath(__file__)
2618
2631
  programName = filePath if filePath else 'mssh'
@@ -2761,15 +2774,7 @@ def run_command_on_hosts(hosts = DEFAULT_HOSTS,commands = None,oneonone = DEFAUL
2761
2774
  if max_connections > __max_connections_nofile_limit_supported * 2:
2762
2775
  # we need to throttle thread start to avoid hitting the nofile limit
2763
2776
  __thread_start_delay = 0.001
2764
- if not commands:
2765
- commands = []
2766
- else:
2767
- commands = [commands] if isinstance(commands,str) else commands
2768
- # reformat commands into a list of strings, join the iterables if they are not strings
2769
- try:
2770
- commands = [' '.join(command) if not isinstance(command,str) else command for command in commands]
2771
- except:
2772
- eprint(f"Warning: commands should ideally be a list of strings. Now mssh had failed to convert {commands!r} to a list of strings. Continuing anyway but expect failures.")
2777
+ commands = format_commands(commands)
2773
2778
  #verify_ssh_config()
2774
2779
  # load global unavailable hosts only if the function is called (so using --repeat will not load the unavailable hosts again)
2775
2780
  if called:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multiSSH3
3
- Version: 5.84
3
+ Version: 5.85
4
4
  Summary: Run commands on multiple hosts via SSH
5
5
  Home-page: https://github.com/yufei-pan/multiSSH3
6
6
  Author: Yufei Pan
@@ -0,0 +1,6 @@
1
+ multiSSH3.py,sha256=R7-ucXDmtJwhuaxT7uvJ3RXhdfKtQZZVW5BnsEjYyHA,154282
2
+ multissh3-5.85.dist-info/METADATA,sha256=xoQc9yqGuFvaS8Gdk8d16FzVmOQYTfM2ZyuBHaOJmx8,18093
3
+ multissh3-5.85.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
+ multissh3-5.85.dist-info/entry_points.txt,sha256=xi2rWWNfmHx6gS8Mmx0rZL2KZz6XWBYP3DWBpWAnnZ0,143
5
+ multissh3-5.85.dist-info/top_level.txt,sha256=tUwttxlnpLkZorSsroIprNo41lYSxjd2ASuL8-EJIJw,10
6
+ multissh3-5.85.dist-info/RECORD,,
@@ -1,6 +0,0 @@
1
- multiSSH3.py,sha256=-CzKDCUgMrgzmvtiLGgbQG0n_Gzk6IEqvUieLzJ29y0,154177
2
- multissh3-5.84.dist-info/METADATA,sha256=9ZD6QwIhVXZXymckMv_aocvIzy2NHjyA_EnDaUhZn1s,18093
3
- multissh3-5.84.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
- multissh3-5.84.dist-info/entry_points.txt,sha256=xi2rWWNfmHx6gS8Mmx0rZL2KZz6XWBYP3DWBpWAnnZ0,143
5
- multissh3-5.84.dist-info/top_level.txt,sha256=tUwttxlnpLkZorSsroIprNo41lYSxjd2ASuL8-EJIJw,10
6
- multissh3-5.84.dist-info/RECORD,,