pywebexec 1.1.8__py3-none-any.whl → 1.1.10__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.
pywebexec/pywebexec.py CHANGED
@@ -342,7 +342,10 @@ def read_command_status(command_id):
342
342
  if not os.path.exists(status_file_path):
343
343
  return None
344
344
  with open(status_file_path, 'r') as f:
345
- status_data = json.load(f)
345
+ try:
346
+ status_data = json.load(f)
347
+ except json.JSONDecodeError:
348
+ return None
346
349
 
347
350
  # Cache the status if it is not "running"
348
351
  if status_data['status'] != 'running':
@@ -520,7 +523,7 @@ def list_commands():
520
523
  params = shlex.join(status['params'])
521
524
  except AttributeError:
522
525
  params = " ".join([shlex.quote(p) if " " in p else p for p in status['params']])
523
- command = status['command'] + ' ' + params
526
+ command = status.get('command', '-') + ' ' + params
524
527
  commands.append({
525
528
  'command_id': command_id,
526
529
  'status': status['status'],
@@ -89,10 +89,10 @@ form {
89
89
  background-image: url("/static/images/aborted.svg")
90
90
  }
91
91
  .copy_clip {
92
- padding-right: 25px;
92
+ padding-right: 20px;
93
93
  background-repeat: no-repeat;
94
94
  background-position: right top;
95
- background-size: 25px 16px;
95
+ background-size: 20px 12px;
96
96
  white-space: nowrap;
97
97
  }
98
98
  .copy_clip:hover {
@@ -33,7 +33,7 @@ async function fetchCommands() {
33
33
  commandRow.onclick = () => viewOutput(command.command_id);
34
34
  commandRow.innerHTML = `
35
35
  <td class="monospace">
36
- <span class="copy_clip" onclick="copyToClipboard('${command.command_id}', this)">${command.command_id.slice(0, 8)}</span>
36
+ <span class="copy_clip" onclick="copyToClipboard('${command.command_id}', this, event)">${command.command_id.slice(0, 8)}</span>
37
37
  </td>
38
38
  <td><span class="status-icon status-${command.status}"></span>${command.status}</td>
39
39
  <td>${formatTime(command.start_time)}</td>
@@ -41,8 +41,7 @@ async function fetchCommands() {
41
41
  <td>${command.exit_code}</td>
42
42
  <td>${command.command.replace(/^\.\//, '')}</td>
43
43
  <td>
44
- ${command.status === 'running' ? `<button onclick="stopCommand('${command.command_id}')">Stop</button>` : ` <button onclick="relaunchCommand('${command.command_id}')">Run</button>
45
- `}
44
+ ${command.status === 'running' ? `<button onclick="stopCommand('${command.command_id}')">Stop</button>` : `<button onclick="relaunchCommand('${command.command_id}')">Run</button>`}
46
45
  </td>
47
46
  <td class="monospace outcol">${command.last_output_line || ''}</td>
48
47
  `;
@@ -146,12 +145,14 @@ function formatDuration(startTime, endTime) {
146
145
  return `${hours}h ${minutes}m ${seconds}s`;
147
146
  }
148
147
 
149
- function copyToClipboard(text, element) {
148
+ function copyToClipboard(text, element, event) {
149
+ event.stopPropagation();
150
+ event.stopImmediatePropagation();
150
151
  navigator.clipboard.writeText(text).then(() => {
151
152
  element.classList.add('copy_clip_ok');
152
153
  setTimeout(() => {
153
154
  element.classList.remove('copy_clip_ok');
154
- }, 2000);
155
+ }, 1000);
155
156
  });
156
157
  }
157
158
 
pywebexec/version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.1.8'
16
- __version_tuple__ = version_tuple = (1, 1, 8)
15
+ __version__ = version = '1.1.10'
16
+ __version_tuple__ = version_tuple = (1, 1, 10)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pywebexec
3
- Version: 1.1.8
3
+ Version: 1.1.10
4
4
  Summary: Simple Python HTTP Exec Server
5
5
  Home-page: https://github.com/joknarf/pywebexec
6
6
  Author: Franck Jouvanceau
@@ -1,7 +1,7 @@
1
1
  pywebexec/__init__.py,sha256=4spIsVaF8RJt8S58AG_wWoORRNkws9Iwqprj27C3ljM,99
2
- pywebexec/pywebexec.py,sha256=fKJElVfBOK_xKlKLPxawrk2gvHT7u8HtK5MAoC2UqPw,21392
3
- pywebexec/version.py,sha256=25U1asvORbrAJKCcTUX6CWQKe10elb_RImEWqwOk88Y,411
4
- pywebexec/static/css/style.css,sha256=_WrN0deHXugf3xkOr2E2ptBzKYo9GoiaYJ4trzPn6ec,2902
2
+ pywebexec/pywebexec.py,sha256=nXo0K6dBS9zKRUEP1hFyGWpL3BV2sUku3CFeGi0QQ-w,21479
3
+ pywebexec/version.py,sha256=fMp4T8goXmzg6VCL_DrRlmTWnEa-W8ZBSuhlUd7orjI,413
4
+ pywebexec/static/css/style.css,sha256=rYpzhBftpZ9pw_FTZFwcAnGC9-EhVOOSy6w56Ybe-Wk,2902
5
5
  pywebexec/static/images/aborted.svg,sha256=_mP43hU5QdRLFZIknBgjx-dIXrHgQG23-QV27ApXK2A,381
6
6
  pywebexec/static/images/copy.svg,sha256=d9OwtGh5GzzZHzYcDrLfNxZYLth1Q64x7bRyYxu4Px0,622
7
7
  pywebexec/static/images/copy_ok.svg,sha256=mEqUVUhSq8xaJK2msQkxRawnz_KwlCZ-tok8QS6hJ3g,451
@@ -9,12 +9,12 @@ pywebexec/static/images/failed.svg,sha256=ADZ7IKrUyOXtqpivnz3VcH0-Wru-I5MOi3OJAk
9
9
  pywebexec/static/images/favicon.svg,sha256=ti80IfuDZwIvQcmJxkOeUaB1iMsiyOPmQmVO-h0y1IU,1126
10
10
  pywebexec/static/images/running.gif,sha256=iYuzQGkMxrakSIwt6gPieKCImGZoSAHmU5MUNZa7cpw,25696
11
11
  pywebexec/static/images/success.svg,sha256=PJDcCSTevJh7rkfSFLtc7P0pbeh8PVQBS8DaOLQemmc,489
12
- pywebexec/static/js/script.js,sha256=RrlozMlUx_7MJTf7IG98rzJsLgwEMyEV9bSW6QpQdZw,7088
12
+ pywebexec/static/js/script.js,sha256=3TGSrREfpBzp37yvTs0uCcs_hxWibEeApzJDvcC2JMY,7152
13
13
  pywebexec/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  pywebexec/templates/index.html,sha256=7dFHAmHXGMrK1-M6PIAbMS0bv7Pi5-6vDoyUk3irnQc,1346
15
- pywebexec-1.1.8.dist-info/LICENSE,sha256=gRJf0JPT_wsZJsUGlWPTS8Vypfl9vQ1qjp6sNbKykuA,1064
16
- pywebexec-1.1.8.dist-info/METADATA,sha256=axoc2iFeUTlBAuyYfJDSnKr8PYP-6r0pIR8VTFCD1Vs,6905
17
- pywebexec-1.1.8.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
18
- pywebexec-1.1.8.dist-info/entry_points.txt,sha256=l52GBkPCXRkmlHfEyoVauyfBdg8o-CAtC8qQpOIjJK0,55
19
- pywebexec-1.1.8.dist-info/top_level.txt,sha256=vHoHyzngrfGdm_nM7Xn_5iLmaCrf10XO1EhldgNLEQ8,10
20
- pywebexec-1.1.8.dist-info/RECORD,,
15
+ pywebexec-1.1.10.dist-info/LICENSE,sha256=gRJf0JPT_wsZJsUGlWPTS8Vypfl9vQ1qjp6sNbKykuA,1064
16
+ pywebexec-1.1.10.dist-info/METADATA,sha256=T9ocxAPjMleGfkYgb3pNVhhqKfkRiTV-awLYvBMsq-c,6906
17
+ pywebexec-1.1.10.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
18
+ pywebexec-1.1.10.dist-info/entry_points.txt,sha256=l52GBkPCXRkmlHfEyoVauyfBdg8o-CAtC8qQpOIjJK0,55
19
+ pywebexec-1.1.10.dist-info/top_level.txt,sha256=vHoHyzngrfGdm_nM7Xn_5iLmaCrf10XO1EhldgNLEQ8,10
20
+ pywebexec-1.1.10.dist-info/RECORD,,