ttnn-visualizer 0.41.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.
- ttnn_visualizer/__init__.py +0 -1
- ttnn_visualizer/app.py +15 -4
- ttnn_visualizer/csv_queries.py +150 -40
- ttnn_visualizer/decorators.py +42 -16
- ttnn_visualizer/exceptions.py +45 -1
- ttnn_visualizer/file_uploads.py +1 -0
- ttnn_visualizer/instances.py +42 -15
- ttnn_visualizer/models.py +12 -7
- ttnn_visualizer/queries.py +3 -109
- ttnn_visualizer/remote_sqlite_setup.py +104 -19
- ttnn_visualizer/requirements.txt +2 -3
- ttnn_visualizer/serializers.py +1 -0
- ttnn_visualizer/settings.py +9 -5
- ttnn_visualizer/sftp_operations.py +657 -220
- ttnn_visualizer/sockets.py +9 -3
- ttnn_visualizer/static/assets/{allPaths-4_pFqSAW.js → allPaths-BQN_j7ek.js} +1 -1
- ttnn_visualizer/static/assets/{allPathsLoader-CpLPTLlt.js → allPathsLoader-BvkkQ77q.js} +2 -2
- ttnn_visualizer/static/assets/index-B-fsa5Ru.js +1 -0
- ttnn_visualizer/static/assets/{index-DFVwehlj.js → index-Bng0kcmi.js} +214 -214
- ttnn_visualizer/static/assets/{index-C1rJBrMl.css → index-C-t6jBt9.css} +1 -1
- ttnn_visualizer/static/assets/index-DLOviMB1.js +1 -0
- ttnn_visualizer/static/assets/{splitPathsBySizeLoader-D-RvsTqO.js → splitPathsBySizeLoader-Cl0NRdfL.js} +1 -1
- ttnn_visualizer/static/index.html +2 -2
- ttnn_visualizer/tests/__init__.py +0 -1
- ttnn_visualizer/tests/test_queries.py +0 -69
- ttnn_visualizer/tests/test_serializers.py +2 -2
- ttnn_visualizer/utils.py +7 -3
- ttnn_visualizer/views.py +315 -52
- {ttnn_visualizer-0.41.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/LICENSE +0 -1
- {ttnn_visualizer-0.41.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/METADATA +6 -3
- ttnn_visualizer-0.43.0.dist-info/RECORD +45 -0
- ttnn_visualizer/ssh_client.py +0 -85
- ttnn_visualizer/static/assets/index-BKzgFDAn.js +0 -1
- ttnn_visualizer/static/assets/index-BvSuWPlB.js +0 -1
- ttnn_visualizer-0.41.0.dist-info/RECORD +0 -46
- {ttnn_visualizer-0.41.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/LICENSE_understanding.txt +0 -0
- {ttnn_visualizer-0.41.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/WHEEL +0 -0
- {ttnn_visualizer-0.41.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/entry_points.txt +0 -0
- {ttnn_visualizer-0.41.0.dist-info → ttnn_visualizer-0.43.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
ttnn_visualizer/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
2
|
+
ttnn_visualizer/app.py,sha256=RZrW-Vbqi-ZN6CzCW9GrolVaA8nKBkaX2ULcdKhDiZI,7282
|
3
|
+
ttnn_visualizer/csv_queries.py,sha256=v3iew4_TVsus_3bt5vCaHBMcOw4W3QZa4L46AZx6MdY,26662
|
4
|
+
ttnn_visualizer/decorators.py,sha256=hOFfAWgsQlqwstJmni63s5o5ga-TuxuhVNW3jvRxMEo,5849
|
5
|
+
ttnn_visualizer/enums.py,sha256=SEIqp1tlc_zw2vQ8nHH9YTaV0m3Cb8fjn_goqz5wurE,203
|
6
|
+
ttnn_visualizer/exceptions.py,sha256=iXx1EmodousLr2y-PKpwYcxV_qJKVcvvjPMn4V-9M0w,2124
|
7
|
+
ttnn_visualizer/extensions.py,sha256=AW2aujcvayePfrwovVcsXIUkCFe_k2T4Vk3OblZd4Bk,380
|
8
|
+
ttnn_visualizer/file_uploads.py,sha256=kfjk6dxUZOIlHriF3bth7FWvCmCoXaCvQSIDjfsGgKQ,5012
|
9
|
+
ttnn_visualizer/instances.py,sha256=pVlTWfq4aLPk2Toh53nfuTkmDrnBV5HPCmXKNo-yK84,11575
|
10
|
+
ttnn_visualizer/models.py,sha256=Gd2GmfBmYcwXl7HgDt2NdvGxpdb20t85JRKLqwmZ77A,7852
|
11
|
+
ttnn_visualizer/queries.py,sha256=MB57Ci3gyXn9jdXdR6KaMBHoHYt5jgdk3wP7jSDGWFA,9891
|
12
|
+
ttnn_visualizer/remote_sqlite_setup.py,sha256=Rv6VZUABXn5-ysPA9urLnfdmAcduT0OnBducZpIpxHU,5959
|
13
|
+
ttnn_visualizer/requirements.txt,sha256=l0HA8Gt9tLpuiBBavPP6KziCN1z33-q8JB8lomaa4hU,353
|
14
|
+
ttnn_visualizer/serializers.py,sha256=LmjHIrFg8BLx1JKVFh9Nd_TcA7nyy1MwY2BOGnX1MKw,8029
|
15
|
+
ttnn_visualizer/settings.py,sha256=Gy854sLhZBe-ahStymUiWG-X3C8JVdJUP8YUQ8iAcHQ,4607
|
16
|
+
ttnn_visualizer/sftp_operations.py,sha256=mIbeuo1fGO-Ipgcu0PlrnONvqBWcIqGQHfzedWAfU5E,32587
|
17
|
+
ttnn_visualizer/sockets.py,sha256=kJvd6dAQL4XhJ7kCqfgz6RqZmdDlQaBHcaawe1b6APY,3708
|
18
|
+
ttnn_visualizer/utils.py,sha256=CLNarkx1olUIL3owMgbOICTIHlqcVwbWKO3ZoXkJO74,6224
|
19
|
+
ttnn_visualizer/views.py,sha256=rkNCkjCmF3RWU40qlZPYRBF-LWO5qQTFSn4mntZx1YM,49392
|
20
|
+
ttnn_visualizer/bin/docker-entrypoint-web,sha256=uuv6aubpMCfOcuvDBxwBDITE8PN39teuwyJ2zA5KWuw,413
|
21
|
+
ttnn_visualizer/bin/pip3-install,sha256=nbSRT4GfJQIQ9KTNO3j-6b5WM4lrx9XA4GBlAURRMws,502
|
22
|
+
ttnn_visualizer/static/index.html,sha256=q-PyP3UHids9LgIA68gaKiPolgi9ENLEAZZshzNlVwU,1135
|
23
|
+
ttnn_visualizer/static/assets/allPaths-BQN_j7ek.js,sha256=2Gxw0xHwpwg1U724PFLqGlUkhCt8nj5Ug5QN2kfuYbE,309
|
24
|
+
ttnn_visualizer/static/assets/allPathsLoader-BvkkQ77q.js,sha256=pCkIJpl9CWONYrMvh2HgkLfyM97aeL1VolHsHpY3vtA,550
|
25
|
+
ttnn_visualizer/static/assets/index-B-fsa5Ru.js,sha256=IonL7d7ppdDr-_FRJZQPWI4HHFTiygYvZGVlUxHY9R8,294235
|
26
|
+
ttnn_visualizer/static/assets/index-Bng0kcmi.js,sha256=-1maa2zxiVOSnr0fZ_Jn9Ar2bDZKPQ6ajWvYX7wWTkI,7784223
|
27
|
+
ttnn_visualizer/static/assets/index-C-t6jBt9.css,sha256=ngV1lzCeoUs0nCQwylTY7QccuQpYEWDOQhBubspU8Pk,623810
|
28
|
+
ttnn_visualizer/static/assets/index-DLOviMB1.js,sha256=sI0W1vvwqvIwKP2_jglrwOhej3n5rJD72-d4ZhlUHqM,285612
|
29
|
+
ttnn_visualizer/static/assets/site-BTBrvHC5.webmanifest,sha256=Uy_XmnGuYFVf-OZuma2NvgEPdrCrevb3HZvaxSIHoA0,456
|
30
|
+
ttnn_visualizer/static/assets/splitPathsBySizeLoader-Cl0NRdfL.js,sha256=n8ok4d76dE0iokaoEjFp1Ntr8ZxRJrWTOPpftJ4lzDc,472
|
31
|
+
ttnn_visualizer/static/favicon/android-chrome-192x192.png,sha256=BZWA09Zxaa3fXbaeS6nhWo2e-DUSjm9ElzNQ_xTB5XU,6220
|
32
|
+
ttnn_visualizer/static/favicon/android-chrome-512x512.png,sha256=HBiJSZyguB3o8fMJuqIGcpeBy_9JOdImme3wD02UYCw,62626
|
33
|
+
ttnn_visualizer/static/favicon/favicon-32x32.png,sha256=Zw201qUsczQv1UvoQvJf5smQ2ss10xaTeWxmQNYCGtY,480
|
34
|
+
ttnn_visualizer/static/favicon/favicon.svg,sha256=wDPY3VrekJ_DE1TnJ2vUy602K3S4Xe9TgrdZ7jXK9c8,633
|
35
|
+
ttnn_visualizer/static/sample-data/cluster-desc.yaml,sha256=LMxOmsRUXtVVU5ogzYkXUozB3dg2IzqIRJQpV_O5qMU,29618
|
36
|
+
ttnn_visualizer/tests/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
37
|
+
ttnn_visualizer/tests/test_queries.py,sha256=D0wO_aQOLkcOSuiOEPgnIt_0zoQX53k2CDD3U9oPiFM,13881
|
38
|
+
ttnn_visualizer/tests/test_serializers.py,sha256=EOvhXD1x-5kG9fOdbWqnh3NetSbHJS_AE_aJjIlw-O4,18492
|
39
|
+
ttnn_visualizer-0.43.0.dist-info/LICENSE,sha256=-Y7CZK1-MxZZ7l0Rb414S0SZ9tdCby-bMGl_LmFFicM,14806
|
40
|
+
ttnn_visualizer-0.43.0.dist-info/LICENSE_understanding.txt,sha256=pymi-yb_RvYM9p2ZA4iSNsImcvhDBBxlGuJCY9dTq7M,233
|
41
|
+
ttnn_visualizer-0.43.0.dist-info/METADATA,sha256=B-9Is2if03hpxGMWp0b8Li_jYhzTnquruNsRyzZmTSo,7508
|
42
|
+
ttnn_visualizer-0.43.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
43
|
+
ttnn_visualizer-0.43.0.dist-info/entry_points.txt,sha256=QpuUpkmQ_mEHJTMqOBdU0MH2Z4WF_9iFsGACeyyAO1E,61
|
44
|
+
ttnn_visualizer-0.43.0.dist-info/top_level.txt,sha256=M1EGkvDOuIfbhDbcUdz2-TSdmCtDoQ2Uyag9k5JLDSY,16
|
45
|
+
ttnn_visualizer-0.43.0.dist-info/RECORD,,
|
ttnn_visualizer/ssh_client.py
DELETED
@@ -1,85 +0,0 @@
|
|
1
|
-
# SPDX-License-Identifier: Apache-2.0
|
2
|
-
#
|
3
|
-
# SPDX-FileCopyrightText: © 2025 Tenstorrent AI ULC
|
4
|
-
|
5
|
-
import paramiko
|
6
|
-
import os
|
7
|
-
from pathlib import Path
|
8
|
-
from paramiko.agent import Agent
|
9
|
-
from paramiko.ssh_exception import SSHException
|
10
|
-
|
11
|
-
from ttnn_visualizer.decorators import remote_exception_handler
|
12
|
-
from ttnn_visualizer.models import RemoteConnection
|
13
|
-
import logging
|
14
|
-
|
15
|
-
logger = logging.getLogger(__name__)
|
16
|
-
|
17
|
-
|
18
|
-
def initialize_ssh_client():
|
19
|
-
ssh = paramiko.SSHClient()
|
20
|
-
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
21
|
-
ssh.load_system_host_keys()
|
22
|
-
return ssh
|
23
|
-
|
24
|
-
|
25
|
-
def get_connection_args(remote_connection: RemoteConnection) -> dict:
|
26
|
-
use_agent = os.getenv("USE_SSH_AGENT", "true").lower() == "true"
|
27
|
-
ssh_config_path = Path(os.getenv("SSH_CONFIG_PATH", "~/.ssh/config")).expanduser()
|
28
|
-
|
29
|
-
if use_agent:
|
30
|
-
agent = Agent()
|
31
|
-
keys = agent.get_keys()
|
32
|
-
if not keys:
|
33
|
-
logger.error("No keys found in agent")
|
34
|
-
raise SSHException("No keys found")
|
35
|
-
return {"look_for_keys": True}
|
36
|
-
|
37
|
-
config = paramiko.SSHConfig.from_path(ssh_config_path).lookup(
|
38
|
-
remote_connection.host
|
39
|
-
)
|
40
|
-
if not config:
|
41
|
-
raise SSHException(f"Host not found in SSH config {remote_connection.host}")
|
42
|
-
|
43
|
-
return {"key_filename": config["identityfile"].pop(), "look_for_keys": False} # type: ignore
|
44
|
-
|
45
|
-
|
46
|
-
@remote_exception_handler
|
47
|
-
def get_client(remote_connection: RemoteConnection) -> paramiko.SSHClient:
|
48
|
-
ssh = initialize_ssh_client()
|
49
|
-
connection_args = get_connection_args(remote_connection)
|
50
|
-
|
51
|
-
ssh.connect(
|
52
|
-
remote_connection.host,
|
53
|
-
port=remote_connection.port,
|
54
|
-
username=remote_connection.username,
|
55
|
-
**connection_args,
|
56
|
-
)
|
57
|
-
return ssh
|
58
|
-
|
59
|
-
|
60
|
-
def check_permissions(client, directory):
|
61
|
-
"""Check if write and delete permissions are available in the remote directory."""
|
62
|
-
test_file = Path(directory) / "test_permission_file.txt"
|
63
|
-
touch_command = f"touch {test_file}"
|
64
|
-
remove_command = f"rm {test_file}"
|
65
|
-
|
66
|
-
stdin, stdout, stderr = client.exec_command(touch_command)
|
67
|
-
error = stderr.read().decode().strip()
|
68
|
-
if error:
|
69
|
-
raise Exception(f"No permission to create files in {directory}: {error}")
|
70
|
-
|
71
|
-
stdin, stdout, stderr = client.exec_command(remove_command)
|
72
|
-
error = stderr.read().decode().strip()
|
73
|
-
if error:
|
74
|
-
raise Exception(f"No permission to delete files in {directory}: {error}")
|
75
|
-
|
76
|
-
return True
|
77
|
-
|
78
|
-
|
79
|
-
def check_gzip_exists(client):
|
80
|
-
"""Check if gzip and tar exist on the remote server."""
|
81
|
-
stdin, stdout, stderr = client.exec_command("which gzip && which tar")
|
82
|
-
result = stdout.read().decode().strip()
|
83
|
-
if not result:
|
84
|
-
return False
|
85
|
-
return True
|