ttnn-visualizer 0.42.0__py3-none-any.whl → 0.43.0__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 (37) hide show
  1. ttnn_visualizer/__init__.py +0 -1
  2. ttnn_visualizer/app.py +15 -4
  3. ttnn_visualizer/csv_queries.py +82 -48
  4. ttnn_visualizer/decorators.py +38 -15
  5. ttnn_visualizer/exceptions.py +29 -1
  6. ttnn_visualizer/file_uploads.py +1 -0
  7. ttnn_visualizer/instances.py +42 -15
  8. ttnn_visualizer/models.py +12 -7
  9. ttnn_visualizer/remote_sqlite_setup.py +37 -30
  10. ttnn_visualizer/requirements.txt +1 -0
  11. ttnn_visualizer/serializers.py +1 -0
  12. ttnn_visualizer/settings.py +9 -5
  13. ttnn_visualizer/sftp_operations.py +144 -125
  14. ttnn_visualizer/sockets.py +9 -3
  15. ttnn_visualizer/static/assets/{allPaths-wwXsGKJ2.js → allPaths-BQN_j7ek.js} +1 -1
  16. ttnn_visualizer/static/assets/{allPathsLoader-BK9jqlVe.js → allPathsLoader-BvkkQ77q.js} +2 -2
  17. ttnn_visualizer/static/assets/index-B-fsa5Ru.js +1 -0
  18. ttnn_visualizer/static/assets/{index-Ybr1HJxx.js → index-Bng0kcmi.js} +69 -69
  19. ttnn_visualizer/static/assets/{index-C1rJBrMl.css → index-C-t6jBt9.css} +1 -1
  20. ttnn_visualizer/static/assets/index-DLOviMB1.js +1 -0
  21. ttnn_visualizer/static/assets/{splitPathsBySizeLoader-CauQGZHk.js → splitPathsBySizeLoader-Cl0NRdfL.js} +1 -1
  22. ttnn_visualizer/static/index.html +2 -2
  23. ttnn_visualizer/tests/__init__.py +0 -1
  24. ttnn_visualizer/tests/test_queries.py +0 -1
  25. ttnn_visualizer/tests/test_serializers.py +2 -2
  26. ttnn_visualizer/utils.py +7 -3
  27. ttnn_visualizer/views.py +250 -82
  28. {ttnn_visualizer-0.42.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/METADATA +5 -1
  29. ttnn_visualizer-0.43.0.dist-info/RECORD +45 -0
  30. ttnn_visualizer/static/assets/index-BKzgFDAn.js +0 -1
  31. ttnn_visualizer/static/assets/index-BvSuWPlB.js +0 -1
  32. ttnn_visualizer-0.42.0.dist-info/RECORD +0 -45
  33. {ttnn_visualizer-0.42.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/LICENSE +0 -0
  34. {ttnn_visualizer-0.42.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/LICENSE_understanding.txt +0 -0
  35. {ttnn_visualizer-0.42.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/WHEEL +0 -0
  36. {ttnn_visualizer-0.42.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/entry_points.txt +0 -0
  37. {ttnn_visualizer-0.42.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/top_level.txt +0 -0
@@ -21,7 +21,7 @@ from ttnn_visualizer.exceptions import (
21
21
  RemoteConnectionException,
22
22
  SSHException,
23
23
  AuthenticationException,
24
- NoValidConnectionsError
24
+ NoValidConnectionsError,
25
25
  )
26
26
  from ttnn_visualizer.models import RemoteConnection, RemoteReportFolder
27
27
  from ttnn_visualizer.sockets import (
@@ -38,7 +38,9 @@ TEST_PROFILER_FILE = "profile_log_device.csv"
38
38
  REPORT_DATA_DIRECTORY = Path(__file__).parent.absolute().joinpath("data")
39
39
 
40
40
 
41
- def handle_ssh_subprocess_error(e: subprocess.CalledProcessError, remote_connection: RemoteConnection):
41
+ def handle_ssh_subprocess_error(
42
+ e: subprocess.CalledProcessError, remote_connection: RemoteConnection
43
+ ):
42
44
  """
43
45
  Convert subprocess SSH errors to appropriate SSH exceptions.
44
46
 
@@ -49,23 +51,29 @@ def handle_ssh_subprocess_error(e: subprocess.CalledProcessError, remote_connect
49
51
  stderr = e.stderr.lower() if e.stderr else ""
50
52
 
51
53
  # Check for authentication failures
52
- if any(auth_err in stderr for auth_err in [
53
- "permission denied",
54
- "authentication failed",
55
- "publickey",
56
- "password",
57
- "host key verification failed"
58
- ]):
54
+ if any(
55
+ auth_err in stderr
56
+ for auth_err in [
57
+ "permission denied",
58
+ "authentication failed",
59
+ "publickey",
60
+ "password",
61
+ "host key verification failed",
62
+ ]
63
+ ):
59
64
  raise AuthenticationException(f"SSH authentication failed: {e.stderr}")
60
65
 
61
66
  # Check for connection failures
62
- elif any(conn_err in stderr for conn_err in [
63
- "connection refused",
64
- "network is unreachable",
65
- "no route to host",
66
- "name or service not known",
67
- "connection timed out"
68
- ]):
67
+ elif any(
68
+ conn_err in stderr
69
+ for conn_err in [
70
+ "connection refused",
71
+ "network is unreachable",
72
+ "no route to host",
73
+ "name or service not known",
74
+ "connection timed out",
75
+ ]
76
+ ):
69
77
  raise NoValidConnectionsError(f"SSH connection failed: {e.stderr}")
70
78
 
71
79
  # Check for general SSH protocol errors
@@ -115,12 +123,7 @@ def resolve_file_path(remote_connection, file_path: str) -> str:
115
123
  ssh_cmd.append(f"ls -1 {file_path}")
116
124
 
117
125
  try:
118
- result = subprocess.run(
119
- ssh_cmd,
120
- capture_output=True,
121
- text=True,
122
- check=True
123
- )
126
+ result = subprocess.run(ssh_cmd, capture_output=True, text=True, check=True)
124
127
 
125
128
  files = result.stdout.strip().splitlines()
126
129
 
@@ -147,7 +150,6 @@ def resolve_file_path(remote_connection, file_path: str) -> str:
147
150
  return file_path
148
151
 
149
152
 
150
-
151
153
  def get_cluster_desc_path(remote_connection: RemoteConnection) -> Optional[str]:
152
154
  """
153
155
  List all folders matching '/tmp/umd_*' on the remote machine, filter for those containing
@@ -179,11 +181,13 @@ def get_cluster_desc_path(remote_connection: RemoteConnection) -> Optional[str]:
179
181
  ssh_cmd,
180
182
  capture_output=True,
181
183
  text=True,
182
- check=False # Don't raise exception on non-zero exit (in case no folders found)
184
+ check=False, # Don't raise exception on non-zero exit (in case no folders found)
183
185
  )
184
186
 
185
187
  # Get the list of folders
186
- folder_paths = result.stdout.strip().splitlines() if result.stdout.strip() else []
188
+ folder_paths = (
189
+ result.stdout.strip().splitlines() if result.stdout.strip() else []
190
+ )
187
191
 
188
192
  if not folder_paths:
189
193
  logger.info("No folders found matching the pattern '/tmp/umd_*'")
@@ -196,6 +200,8 @@ def get_cluster_desc_path(remote_connection: RemoteConnection) -> Optional[str]:
196
200
  # Build SSH command to check if file exists and get its modification time
197
201
  stat_cmd = [
198
202
  "ssh",
203
+ "-o",
204
+ "PasswordAuthentication=no",
199
205
  f"{remote_connection.username}@{remote_connection.host}",
200
206
  ]
201
207
 
@@ -207,10 +213,7 @@ def get_cluster_desc_path(remote_connection: RemoteConnection) -> Optional[str]:
207
213
 
208
214
  try:
209
215
  stat_result = subprocess.run(
210
- stat_cmd,
211
- capture_output=True,
212
- text=True,
213
- check=True
216
+ stat_cmd, capture_output=True, text=True, check=True
214
217
  )
215
218
 
216
219
  mod_time = float(stat_result.stdout.strip())
@@ -219,9 +222,7 @@ def get_cluster_desc_path(remote_connection: RemoteConnection) -> Optional[str]:
219
222
  if mod_time > latest_mod_time:
220
223
  latest_mod_time = mod_time
221
224
  latest_yaml_path = yaml_file_path
222
- logger.info(
223
- f"Found newer {cluster_desc_file}: {yaml_file_path}"
224
- )
225
+ logger.info(f"Found newer {cluster_desc_file}: {yaml_file_path}")
225
226
 
226
227
  except subprocess.CalledProcessError as e:
227
228
  # Check if it's an SSH-specific error
@@ -272,7 +273,11 @@ def is_excluded(file_path, exclude_patterns):
272
273
 
273
274
  @remote_exception_handler
274
275
  def sync_files_and_directories(
275
- remote_connection: RemoteConnection, remote_profiler_folder: str, destination_dir: Path, exclude_patterns=None, sid=None
276
+ remote_connection: RemoteConnection,
277
+ remote_profiler_folder: str,
278
+ destination_dir: Path,
279
+ exclude_patterns=None,
280
+ sid=None,
276
281
  ):
277
282
  """Download files and directories using SFTP with progress reporting."""
278
283
  exclude_patterns = exclude_patterns or []
@@ -280,12 +285,18 @@ def sync_files_and_directories(
280
285
  # Ensure the destination directory exists
281
286
  destination_dir.mkdir(parents=True, exist_ok=True)
282
287
 
283
- logger.info(f"Starting SFTP sync from {remote_profiler_folder} to {destination_dir}")
288
+ logger.info(
289
+ f"Starting SFTP sync from {remote_profiler_folder} to {destination_dir}"
290
+ )
284
291
 
285
292
  # First, get list of all files and directories
286
293
  logger.info("Getting remote file and directory lists...")
287
- all_files = get_remote_file_list(remote_connection, remote_profiler_folder, exclude_patterns)
288
- all_dirs = get_remote_directory_list(remote_connection, remote_profiler_folder, exclude_patterns)
294
+ all_files = get_remote_file_list(
295
+ remote_connection, remote_profiler_folder, exclude_patterns
296
+ )
297
+ all_dirs = get_remote_directory_list(
298
+ remote_connection, remote_profiler_folder, exclude_patterns
299
+ )
289
300
 
290
301
  logger.info(f"Found {len(all_files)} files and {len(all_dirs)} directories to sync")
291
302
 
@@ -357,32 +368,34 @@ def sync_files_and_directories(
357
368
  if current_app.config["USE_WEBSOCKETS"]:
358
369
  emit_file_status(final_progress, sid)
359
370
 
360
- logger.info(f"SFTP sync completed. Downloaded {finished_files}/{total_files} files.")
371
+ logger.info(
372
+ f"SFTP sync completed. Downloaded {finished_files}/{total_files} files."
373
+ )
361
374
 
362
375
 
363
- def get_remote_file_list(remote_connection: RemoteConnection, remote_folder: str, exclude_patterns=None) -> List[str]:
376
+ def get_remote_file_list(
377
+ remote_connection: RemoteConnection, remote_folder: str, exclude_patterns=None
378
+ ) -> List[str]:
364
379
  """Get a list of all files in the remote directory recursively, applying exclusion patterns."""
365
380
  exclude_patterns = exclude_patterns or []
366
381
 
367
382
  # Build SSH command to find all files recursively
368
- ssh_cmd = ["ssh"]
383
+ ssh_cmd = ["ssh", "-o", "PasswordAuthentication=no"]
369
384
 
370
385
  # Handle non-standard SSH port
371
386
  if remote_connection.port != 22:
372
387
  ssh_cmd.extend(["-p", str(remote_connection.port)])
373
388
 
374
- ssh_cmd.extend([
375
- f"{remote_connection.username}@{remote_connection.host}",
376
- f"find '{remote_folder}' -type f"
377
- ])
389
+ ssh_cmd.extend(
390
+ [
391
+ f"{remote_connection.username}@{remote_connection.host}",
392
+ f"find '{remote_folder}' -type f",
393
+ ]
394
+ )
378
395
 
379
396
  try:
380
397
  result = subprocess.run(
381
- ssh_cmd,
382
- capture_output=True,
383
- text=True,
384
- check=True,
385
- timeout=60
398
+ ssh_cmd, capture_output=True, text=True, check=True, timeout=60
386
399
  )
387
400
 
388
401
  all_files = result.stdout.strip().splitlines()
@@ -410,29 +423,29 @@ def get_remote_file_list(remote_connection: RemoteConnection, remote_folder: str
410
423
  return []
411
424
 
412
425
 
413
- def get_remote_directory_list(remote_connection: RemoteConnection, remote_folder: str, exclude_patterns=None) -> List[str]:
426
+ def get_remote_directory_list(
427
+ remote_connection: RemoteConnection, remote_folder: str, exclude_patterns=None
428
+ ) -> List[str]:
414
429
  """Get a list of all directories in the remote directory recursively, applying exclusion patterns."""
415
430
  exclude_patterns = exclude_patterns or []
416
431
 
417
432
  # Build SSH command to find all directories recursively
418
- ssh_cmd = ["ssh"]
433
+ ssh_cmd = ["ssh", "-o", "PasswordAuthentication=no"]
419
434
 
420
435
  # Handle non-standard SSH port
421
436
  if remote_connection.port != 22:
422
437
  ssh_cmd.extend(["-p", str(remote_connection.port)])
423
438
 
424
- ssh_cmd.extend([
425
- f"{remote_connection.username}@{remote_connection.host}",
426
- f"find '{remote_folder}' -type d"
427
- ])
439
+ ssh_cmd.extend(
440
+ [
441
+ f"{remote_connection.username}@{remote_connection.host}",
442
+ f"find '{remote_folder}' -type d",
443
+ ]
444
+ )
428
445
 
429
446
  try:
430
447
  result = subprocess.run(
431
- ssh_cmd,
432
- capture_output=True,
433
- text=True,
434
- check=True,
435
- timeout=60
448
+ ssh_cmd, capture_output=True, text=True, check=True, timeout=60
436
449
  )
437
450
 
438
451
  all_dirs = result.stdout.strip().splitlines()
@@ -460,23 +473,28 @@ def get_remote_directory_list(remote_connection: RemoteConnection, remote_folder
460
473
  return []
461
474
 
462
475
 
463
- def download_single_file_sftp(remote_connection: RemoteConnection, remote_file: str, local_file: Path):
476
+ def download_single_file_sftp(
477
+ remote_connection: RemoteConnection, remote_file: str, local_file: Path
478
+ ):
464
479
  """Download a single file using SFTP."""
465
480
  # Ensure local directory exists
466
481
  local_file.parent.mkdir(parents=True, exist_ok=True)
467
482
 
468
483
  # Build SFTP command
469
- sftp_cmd = ["sftp"]
484
+ sftp_cmd = ["sftp", "-o", "PasswordAuthentication=no"]
470
485
 
471
486
  # Handle non-standard SSH port
472
487
  if remote_connection.port != 22:
473
488
  sftp_cmd.extend(["-P", str(remote_connection.port)])
474
489
 
475
490
  # Add batch mode and other options
476
- sftp_cmd.extend([
477
- "-b", "-", # Read commands from stdin
478
- f"{remote_connection.username}@{remote_connection.host}"
479
- ])
491
+ sftp_cmd.extend(
492
+ [
493
+ "-b",
494
+ "-", # Read commands from stdin
495
+ f"{remote_connection.username}@{remote_connection.host}",
496
+ ]
497
+ )
480
498
 
481
499
  # SFTP commands to execute
482
500
  sftp_commands = f"get '{remote_file}' '{local_file}'\nquit\n"
@@ -488,7 +506,7 @@ def download_single_file_sftp(remote_connection: RemoteConnection, remote_file:
488
506
  capture_output=True,
489
507
  text=True,
490
508
  check=True,
491
- timeout=300 # 5 minute timeout per file
509
+ timeout=300, # 5 minute timeout per file
492
510
  )
493
511
 
494
512
  logger.debug(f"Downloaded: {remote_file} -> {local_file}")
@@ -515,6 +533,8 @@ def get_remote_profiler_folder_from_config_path(
515
533
  # Build SSH command to get file modification time
516
534
  stat_cmd = [
517
535
  "ssh",
536
+ "-o",
537
+ "PasswordAuthentication=no",
518
538
  f"{remote_connection.username}@{remote_connection.host}",
519
539
  ]
520
540
 
@@ -526,10 +546,7 @@ def get_remote_profiler_folder_from_config_path(
526
546
  stat_cmd.append(f"stat -c %Y '{config_path}' 2>/dev/null")
527
547
 
528
548
  stat_result = subprocess.run(
529
- stat_cmd,
530
- capture_output=True,
531
- text=True,
532
- check=True
549
+ stat_cmd, capture_output=True, text=True, check=True
533
550
  )
534
551
 
535
552
  last_modified = int(float(stat_result.stdout.strip()))
@@ -537,6 +554,8 @@ def get_remote_profiler_folder_from_config_path(
537
554
  # Build SSH command to read file content
538
555
  cat_cmd = [
539
556
  "ssh",
557
+ "-o",
558
+ "PasswordAuthentication=no",
540
559
  f"{remote_connection.username}@{remote_connection.host}",
541
560
  ]
542
561
 
@@ -546,12 +565,7 @@ def get_remote_profiler_folder_from_config_path(
546
565
  # Read file content using cat command
547
566
  cat_cmd.append(f"cat '{config_path}'")
548
567
 
549
- cat_result = subprocess.run(
550
- cat_cmd,
551
- capture_output=True,
552
- text=True,
553
- check=True
554
- )
568
+ cat_result = subprocess.run(cat_cmd, capture_output=True, text=True, check=True)
555
569
 
556
570
  # Parse JSON data
557
571
  data = json.loads(cat_result.stdout)
@@ -603,10 +617,15 @@ def get_remote_performance_folder(
603
617
 
604
618
  # Get modification time using subprocess SSH command
605
619
  try:
606
- ssh_command = ["ssh"]
620
+ ssh_command = ["ssh", "-o", "PasswordAuthentication=no"]
607
621
  if remote_connection.port != 22:
608
622
  ssh_command.extend(["-p", str(remote_connection.port)])
609
- ssh_command.extend([f"{remote_connection.username}@{remote_connection.host}", f"stat -c %Y '{profile_folder}'"])
623
+ ssh_command.extend(
624
+ [
625
+ f"{remote_connection.username}@{remote_connection.host}",
626
+ f"stat -c %Y '{profile_folder}'",
627
+ ]
628
+ )
610
629
 
611
630
  result = subprocess.run(ssh_command, capture_output=True, text=True, timeout=30)
612
631
 
@@ -615,11 +634,20 @@ def get_remote_performance_folder(
615
634
  else:
616
635
  # If stat fails, handle SSH errors
617
636
  if result.returncode == 255:
618
- handle_ssh_subprocess_error(subprocess.CalledProcessError(result.returncode, ssh_command, result.stdout, result.stderr), remote_connection)
619
- logger.warning(f"Could not get modification time for {profile_folder}, using current time")
637
+ handle_ssh_subprocess_error(
638
+ subprocess.CalledProcessError(
639
+ result.returncode, ssh_command, result.stdout, result.stderr
640
+ ),
641
+ remote_connection,
642
+ )
643
+ logger.warning(
644
+ f"Could not get modification time for {profile_folder}, using current time"
645
+ )
620
646
  last_modified = int(time.time())
621
647
  except (subprocess.TimeoutExpired, subprocess.CalledProcessError, ValueError) as e:
622
- logger.warning(f"Error getting modification time for {profile_folder}: {e}, using current time")
648
+ logger.warning(
649
+ f"Error getting modification time for {profile_folder}: {e}, using current time"
650
+ )
623
651
  last_modified = int(time.time())
624
652
 
625
653
  return RemoteReportFolder(
@@ -643,24 +671,18 @@ def read_remote_file(
643
671
  logger.info(f"Reading remote file {path}")
644
672
 
645
673
  # Build SSH command to read the file
646
- ssh_cmd = ["ssh"]
674
+ ssh_cmd = ["ssh", "-o", "PasswordAuthentication=no"]
647
675
 
648
676
  # Handle non-standard SSH port
649
677
  if remote_connection.port != 22:
650
678
  ssh_cmd.extend(["-p", str(remote_connection.port)])
651
679
 
652
- ssh_cmd.extend([
653
- f"{remote_connection.username}@{remote_connection.host}",
654
- f"cat '{path}'"
655
- ])
680
+ ssh_cmd.extend(
681
+ [f"{remote_connection.username}@{remote_connection.host}", f"cat '{path}'"]
682
+ )
656
683
 
657
684
  try:
658
- result = subprocess.run(
659
- ssh_cmd,
660
- capture_output=True,
661
- check=True,
662
- timeout=30
663
- )
685
+ result = subprocess.run(ssh_cmd, capture_output=True, check=True, timeout=30)
664
686
  return result.stdout
665
687
  except subprocess.CalledProcessError as e:
666
688
  if e.returncode == 255: # SSH protocol errors
@@ -697,24 +719,18 @@ def check_remote_path_exists(remote_connection: RemoteConnection, path_key: str)
697
719
  path = getattr(remote_connection, path_key)
698
720
 
699
721
  # Build SSH command to test if path exists
700
- ssh_cmd = ["ssh"]
722
+ ssh_cmd = ["ssh", "-o", "PasswordAuthentication=no"]
701
723
 
702
724
  # Handle non-standard SSH port
703
725
  if remote_connection.port != 22:
704
726
  ssh_cmd.extend(["-p", str(remote_connection.port)])
705
727
 
706
- ssh_cmd.extend([
707
- f"{remote_connection.username}@{remote_connection.host}",
708
- f"test -d '{path}'"
709
- ])
728
+ ssh_cmd.extend(
729
+ [f"{remote_connection.username}@{remote_connection.host}", f"test -d '{path}'"]
730
+ )
710
731
 
711
732
  try:
712
- result = subprocess.run(
713
- ssh_cmd,
714
- capture_output=True,
715
- check=True,
716
- timeout=10
717
- )
733
+ result = subprocess.run(ssh_cmd, capture_output=True, check=True, timeout=10)
718
734
  # If command succeeds, directory exists
719
735
  return True
720
736
  except subprocess.CalledProcessError as e:
@@ -735,7 +751,7 @@ def check_remote_path_exists(remote_connection: RemoteConnection, path_key: str)
735
751
  logger.error(f"Timeout checking remote path: {path}")
736
752
  raise RemoteConnectionException(
737
753
  message=f"Timeout checking remote path: {path}",
738
- status=ConnectionTestStates.FAILED
754
+ status=ConnectionTestStates.FAILED,
739
755
  )
740
756
 
741
757
 
@@ -746,24 +762,22 @@ def find_folders_by_files(
746
762
  matched_folders: List[str] = []
747
763
 
748
764
  # Build SSH command to find directories in root_folder
749
- ssh_cmd = ["ssh"]
765
+ ssh_cmd = ["ssh", "-o", "PasswordAuthentication=no"]
750
766
 
751
767
  # Handle non-standard SSH port
752
768
  if remote_connection.port != 22:
753
769
  ssh_cmd.extend(["-p", str(remote_connection.port)])
754
770
 
755
- ssh_cmd.extend([
756
- f"{remote_connection.username}@{remote_connection.host}",
757
- f"find '{root_folder}' -maxdepth 1 -type d -not -path '{root_folder}'"
758
- ])
771
+ ssh_cmd.extend(
772
+ [
773
+ f"{remote_connection.username}@{remote_connection.host}",
774
+ f"find '{root_folder}' -maxdepth 1 -type d -not -path '{root_folder}'",
775
+ ]
776
+ )
759
777
 
760
778
  try:
761
779
  result = subprocess.run(
762
- ssh_cmd,
763
- capture_output=True,
764
- text=True,
765
- check=True,
766
- timeout=30
780
+ ssh_cmd, capture_output=True, text=True, check=True, timeout=30
767
781
  )
768
782
 
769
783
  directories = result.stdout.strip().splitlines()
@@ -780,21 +794,20 @@ def find_folders_by_files(
780
794
  file_checks.append(f"test -f '{directory}/{file_name}'")
781
795
 
782
796
  # Use OR logic to check if any of the files exist
783
- check_cmd = ["ssh"]
797
+ check_cmd = ["ssh", "-o", "PasswordAuthentication=no"]
784
798
  if remote_connection.port != 22:
785
799
  check_cmd.extend(["-p", str(remote_connection.port)])
786
800
 
787
- check_cmd.extend([
788
- f"{remote_connection.username}@{remote_connection.host}",
789
- f"({' || '.join(file_checks)})"
790
- ])
801
+ check_cmd.extend(
802
+ [
803
+ f"{remote_connection.username}@{remote_connection.host}",
804
+ f"({' || '.join(file_checks)})",
805
+ ]
806
+ )
791
807
 
792
808
  try:
793
809
  check_result = subprocess.run(
794
- check_cmd,
795
- capture_output=True,
796
- check=True,
797
- timeout=10
810
+ check_cmd, capture_output=True, check=True, timeout=10
798
811
  )
799
812
  # If command succeeds, at least one file exists
800
813
  matched_folders.append(directory)
@@ -839,7 +852,9 @@ def get_remote_performance_folders(
839
852
  raise NoProjectsException(status=ConnectionTestStates.FAILED, message=error)
840
853
  remote_folder_data = []
841
854
  for path in performance_paths:
842
- remote_folder_data.append(get_remote_performance_folder(remote_connection, path))
855
+ remote_folder_data.append(
856
+ get_remote_performance_folder(remote_connection, path)
857
+ )
843
858
  return remote_folder_data
844
859
 
845
860
 
@@ -875,7 +890,11 @@ def sync_remote_profiler_folders(
875
890
  """Main function to sync test folders, handles both compressed and individual syncs."""
876
891
  profiler_folder = Path(remote_folder_path).name
877
892
  destination_dir = Path(
878
- REPORT_DATA_DIRECTORY, path_prefix, remote_connection.host, current_app.config["PROFILER_DIRECTORY_NAME"], profiler_folder
893
+ REPORT_DATA_DIRECTORY,
894
+ path_prefix,
895
+ remote_connection.host,
896
+ current_app.config["PROFILER_DIRECTORY_NAME"],
897
+ profiler_folder,
879
898
  )
880
899
  destination_dir.mkdir(parents=True, exist_ok=True)
881
900
 
@@ -90,11 +90,15 @@ def register_handlers(socketio_instance):
90
90
  sid = getattr(request, "sid", "")
91
91
 
92
92
  instance_id = request.args.get("instanceId")
93
- print(f"Received instanceId: {instance_id}, socket ID: {sid}") # Log for debugging
93
+ print(
94
+ f"Received instanceId: {instance_id}, socket ID: {sid}"
95
+ ) # Log for debugging
94
96
 
95
97
  if instance_id:
96
98
  join_room(instance_id) # Join the room identified by the instanceId
97
- tab_clients[instance_id] = sid # Store the socket ID associated with this instanceId
99
+ tab_clients[instance_id] = (
100
+ sid # Store the socket ID associated with this instanceId
101
+ )
98
102
  print(f"Joined room: {instance_id}")
99
103
  else:
100
104
  print("No instanceId provided, disconnecting client.")
@@ -115,4 +119,6 @@ def register_handlers(socketio_instance):
115
119
  if instance_id:
116
120
  leave_room(instance_id)
117
121
  del tab_clients[instance_id]
118
- print(f"Client disconnected from instanceId: {instance_id}, Socket ID: {sid}")
122
+ print(
123
+ f"Client disconnected from instanceId: {instance_id}, Socket ID: {sid}"
124
+ )
@@ -1 +1 @@
1
- import{I as n}from"./index-BKzgFDAn.js";import{I as e}from"./index-BvSuWPlB.js";import{p as r,I as s}from"./index-Ybr1HJxx.js";function I(o,t){var a=r(o);return t===s.STANDARD?n[a]:e[a]}function p(o){return r(o)}export{n as IconSvgPaths16,e as IconSvgPaths20,I as getIconPaths,p as iconNameToPathsRecordKey};
1
+ import{I as n}from"./index-DLOviMB1.js";import{I as e}from"./index-B-fsa5Ru.js";import{p as r,I as s}from"./index-Bng0kcmi.js";function I(o,t){var a=r(o);return t===s.STANDARD?n[a]:e[a]}function p(o){return r(o)}export{n as IconSvgPaths16,e as IconSvgPaths20,I as getIconPaths,p as iconNameToPathsRecordKey};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/allPaths-wwXsGKJ2.js","assets/index-BKzgFDAn.js","assets/index-BvSuWPlB.js","assets/index-Ybr1HJxx.js","assets/index-C1rJBrMl.css"])))=>i.map(i=>d[i]);
2
- import{_ as o,a as n,b as i}from"./index-Ybr1HJxx.js";var _=function(e,a){return o(void 0,void 0,void 0,function(){var t;return n(this,function(r){switch(r.label){case 0:return[4,i(()=>import("./allPaths-wwXsGKJ2.js"),__vite__mapDeps([0,1,2,3,4]))];case 1:return t=r.sent().getIconPaths,[2,t(e,a)]}})})};export{_ as allPathsLoader};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/allPaths-BQN_j7ek.js","assets/index-DLOviMB1.js","assets/index-B-fsa5Ru.js","assets/index-Bng0kcmi.js","assets/index-C-t6jBt9.css"])))=>i.map(i=>d[i]);
2
+ import{_ as o,a as n,b as i}from"./index-Bng0kcmi.js";var _=function(e,a){return o(void 0,void 0,void 0,function(){var t;return n(this,function(r){switch(r.label){case 0:return[4,i(()=>import("./allPaths-BQN_j7ek.js"),__vite__mapDeps([0,1,2,3,4]))];case 1:return t=r.sent().getIconPaths,[2,t(e,a)]}})})};export{_ as allPathsLoader};