multiSSH3 6.14__tar.gz → 6.17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multiSSH3
3
- Version: 6.14
3
+ Version: 6.17
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multiSSH3
3
- Version: 6.14
3
+ Version: 6.17
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
@@ -30,8 +30,9 @@ import threading
30
30
  import time
31
31
  import typing
32
32
  import uuid
33
- from collections import Counter, deque, defaultdict
33
+ from collections import Counter, defaultdict, deque
34
34
  from itertools import count, product
35
+ from pprint import pformat
35
36
 
36
37
  __curses_available = False
37
38
  __resource_lib_available = False
@@ -84,10 +85,10 @@ except Exception:
84
85
  print('Warning: functools.lru_cache is not available, multiSSH3 will run slower without cache.',file=sys.stderr)
85
86
  def cache_decorator(func):
86
87
  return func
87
- version = '6.14'
88
+ version = '6.17'
88
89
  VERSION = version
89
90
  __version__ = version
90
- COMMIT_DATE = '2026-03-05'
91
+ COMMIT_DATE = '2026-03-27'
91
92
 
92
93
  CONFIG_FILE_CHAIN = ['./multiSSH3.config.json',
93
94
  '~/multiSSH3.config.json',
@@ -278,14 +279,9 @@ class Host:
278
279
  def __iter__(self):
279
280
  return zip(['name', 'command', 'returncode', 'stdout', 'stderr'], [self.name, self.command, self.returncode, self.stdout, self.stderr])
280
281
  def __repr__(self):
281
- # return the complete data structure
282
- return f"Host(name={self.name}, command={self.command}, returncode={self.returncode}, stdout={self.stdout}, stderr={self.stderr}, \
283
- output={self.output}, lineNumToPrintSet={self.lineNumToPrintSet}, files={self.files}, ipmi={self.ipmi}, \
284
- interface_ip_prefix={self.interface_ip_prefix}, scp={self.scp}, gatherMode={self.gatherMode}, \
285
- extraargs={self.extraargs}, resolvedName={self.resolvedName}, i={self.i}, uuid={self.uuid}), \
286
- identity_file={self.identity_file}, ip={self.ip}, current_color_pair={self.current_color_pair}"
282
+ return f"Host(\n{pformat(self.__dict__)}\n)"
287
283
  def __str__(self):
288
- return f"Host(name={self.name}, command={self.command}, returncode={self.returncode}, stdout={self.stdout}, stderr={self.stderr})"
284
+ return f"Host(\n{pformat(dict(self))}\n)"
289
285
  def get_output_hash(self):
290
286
  return hash((
291
287
  self.command,
@@ -392,7 +388,7 @@ DEFAULT_SKIP_UNREACHABLE = True
392
388
  DEFAULT_SKIP_HOSTS = ''
393
389
  DEFAULT_HOST_FILE = '/etc/hosts'
394
390
  DEFAULT_ENCODING = 'utf-8'
395
- DEFAULT_DIFF_DISPLAY_THRESHOLD = 0.6
391
+ DEFAULT_DIFF_DISPLAY_THRESHOLD = 0.9
396
392
  SSH_STRICT_HOST_KEY_CHECKING = False
397
393
  FORCE_TRUECOLOR = False
398
394
  ERROR_MESSAGES_TO_IGNORE = [
@@ -3155,7 +3151,7 @@ def form_merge_groups(hostnames_by_line_bag_len, sorted_hostnames_by_line_bag_le
3155
3151
  # if other_line_bag_len < line_bag_len:
3156
3152
  # continue
3157
3153
  for other_hostname in hostnames_by_line_bag_len.get(other_line_bag_len, set()).copy():
3158
- if can_merge(this_line_bag, line_bag_by_hostname[other_hostname], diff_display_threshold):
3154
+ if other_hostname in line_bag_by_hostname and can_merge(this_line_bag, line_bag_by_hostname[other_hostname], diff_display_threshold):
3159
3155
  merge_group.append(other_hostname)
3160
3156
  hostnames_by_line_bag_len[other_line_bag_len].remove(other_hostname)
3161
3157
  if not hostnames_by_line_bag_len[other_line_bag_len]:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes