pywebexec 1.4.1__tar.gz → 1.4.3__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.
Files changed (35) hide show
  1. {pywebexec-1.4.1/pywebexec.egg-info → pywebexec-1.4.3}/PKG-INFO +1 -2
  2. {pywebexec-1.4.1 → pywebexec-1.4.3}/pyproject.toml +0 -1
  3. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/pywebexec.py +18 -20
  4. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/css/style.css +0 -5
  5. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/js/commands.js +3 -1
  6. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/js/script.js +11 -8
  7. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/version.py +2 -2
  8. {pywebexec-1.4.1 → pywebexec-1.4.3/pywebexec.egg-info}/PKG-INFO +1 -2
  9. {pywebexec-1.4.1 → pywebexec-1.4.3}/.github/workflows/python-publish.yml +0 -0
  10. {pywebexec-1.4.1 → pywebexec-1.4.3}/.gitignore +0 -0
  11. {pywebexec-1.4.1 → pywebexec-1.4.3}/LICENSE +0 -0
  12. {pywebexec-1.4.1 → pywebexec-1.4.3}/README.md +0 -0
  13. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/__init__.py +0 -0
  14. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/css/Consolas NF.ttf +0 -0
  15. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/css/xterm.css +0 -0
  16. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/aborted.svg +0 -0
  17. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/copy.svg +0 -0
  18. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/copy_ok.svg +0 -0
  19. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/down-arrow.svg +0 -0
  20. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/failed.svg +0 -0
  21. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/favicon.svg +0 -0
  22. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/running.gif +0 -0
  23. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/images/success.svg +0 -0
  24. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/js/xterm/LICENSE +0 -0
  25. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/js/xterm/ansi_up.min.js +0 -0
  26. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/js/xterm/xterm-addon-fit.js +0 -0
  27. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/static/js/xterm/xterm.js +0 -0
  28. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/templates/__init__.py +0 -0
  29. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec/templates/index.html +0 -0
  30. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec.egg-info/SOURCES.txt +0 -0
  31. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec.egg-info/dependency_links.txt +0 -0
  32. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec.egg-info/entry_points.txt +0 -0
  33. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec.egg-info/requires.txt +0 -0
  34. {pywebexec-1.4.1 → pywebexec-1.4.3}/pywebexec.egg-info/top_level.txt +0 -0
  35. {pywebexec-1.4.1 → pywebexec-1.4.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pywebexec
3
- Version: 1.4.1
3
+ Version: 1.4.3
4
4
  Summary: Simple Python HTTP Exec Server
5
5
  Home-page: https://github.com/joknarf/pywebexec
6
6
  Author: Franck Jouvanceau
@@ -36,7 +36,6 @@ Classifier: Intended Audience :: System Administrators
36
36
  Classifier: License :: OSI Approved :: MIT License
37
37
  Classifier: Operating System :: POSIX
38
38
  Classifier: Operating System :: Unix
39
- Classifier: Operating System :: Microsoft :: Windows
40
39
  Classifier: Operating System :: MacOS
41
40
  Classifier: Programming Language :: Python
42
41
  Classifier: Programming Language :: Python :: 3
@@ -28,7 +28,6 @@ classifiers = [
28
28
  "License :: OSI Approved :: MIT License",
29
29
  "Operating System :: POSIX",
30
30
  "Operating System :: Unix",
31
- "Operating System :: Microsoft :: Windows ",
32
31
  "Operating System :: MacOS",
33
32
  "Programming Language :: Python",
34
33
  "Programming Language :: Python :: 3",
@@ -454,27 +454,25 @@ def run_command(command, params, command_id, user):
454
454
  update_command_status(command_id, 'running', command=command, params=params, start_time=start_time, user=user)
455
455
  output_file_path = get_output_file_path(command_id)
456
456
  try:
457
- def spawn_tty():
458
- with open(output_file_path, 'wb') as fd:
459
- p = pexpect.spawn(command, params, ignore_sighup=True, timeout=None)
460
- update_command_status(command_id, 'running', pid=p.pid, user=user)
461
- p.setwinsize(24, 120)
462
- p.logfile = fd
463
- p.expect(pexpect.EOF)
464
- fd.flush()
465
- status = p.wait()
466
- end_time = datetime.now().isoformat()
467
- # Update the status based on the result
468
- if status is None:
469
- exit_code = -15
470
- update_command_status(command_id, 'aborted', end_time=end_time, exit_code=exit_code, user=user)
457
+ with open(output_file_path, 'wb') as fd:
458
+ p = pexpect.spawn(command, params, ignore_sighup=True, timeout=None)
459
+ update_command_status(command_id, 'running', pid=p.pid, user=user)
460
+ p.setwinsize(24, 125)
461
+ p.logfile = fd
462
+ p.expect(pexpect.EOF)
463
+ fd.flush()
464
+ status = p.wait()
465
+ end_time = datetime.now().isoformat()
466
+ # Update the status based on the result
467
+ if status is None:
468
+ exit_code = -15
469
+ update_command_status(command_id, 'aborted', end_time=end_time, exit_code=exit_code, user=user)
470
+ else:
471
+ exit_code = status
472
+ if exit_code == 0:
473
+ update_command_status(command_id, 'success', end_time=end_time, exit_code=exit_code, user=user)
471
474
  else:
472
- exit_code = status
473
- if exit_code == 0:
474
- update_command_status(command_id, 'success', end_time=end_time, exit_code=exit_code, user=user)
475
- else:
476
- update_command_status(command_id, 'failed', end_time=end_time, exit_code=exit_code, user=user)
477
- spawn_tty()
475
+ update_command_status(command_id, 'failed', end_time=end_time, exit_code=exit_code, user=user)
478
476
  except Exception as e:
479
477
  end_time = datetime.now().isoformat()
480
478
  update_command_status(command_id, 'failed', end_time=end_time, exit_code=1, user=user)
@@ -253,11 +253,6 @@ body.dimmed * {
253
253
  left: 50%;
254
254
  transform: translate(-50%, -50%);
255
255
  }
256
- .xterm-cursor {
257
- display: none;
258
- visibility: hidden;
259
- height: 0px;
260
- }
261
256
  /* allow wide chars in terminal */
262
257
  span {
263
258
  letter-spacing: -0.03px !important;
@@ -25,7 +25,7 @@ function filterCommands() {
25
25
  options[i].style.display = 'none';
26
26
  }
27
27
  }
28
- if (nbVisibleItems>1) {
28
+ if (nbVisibleItems > 1) {
29
29
  commandListSelect.size = Math.min(20, nbVisibleItems);
30
30
  commandListSelect.style.display = 'block';
31
31
  } else {
@@ -211,6 +211,8 @@ async function fetchExecutables() {
211
211
  alert("Failed to fetch executables");
212
212
  }
213
213
  commandListSelect.size = Math.min(20, commandListSelect.options.length);
214
+ if (commandListSelect.options.length == 1)
215
+ commandInput.value = commandListSelect.options[0].text;
214
216
  if (commandListSelect.options.length == 0)
215
217
  document.getElementById('launchForm').style.display = 'none';
216
218
 
@@ -2,13 +2,13 @@ let currentCommandId = null;
2
2
  let outputInterval = null;
3
3
  let nextOutputLink = null;
4
4
  let fullOutput = '';
5
-
5
+ let outputLength = 0;
6
6
 
7
7
  function initTerminal()
8
8
  {
9
9
  return new Terminal({
10
10
  cursorBlink: false,
11
- cursorHidden: true,
11
+ cursorInactiveStyle: 'none',
12
12
  disableStdin: true,
13
13
  convertEol: true,
14
14
  fontFamily: 'Consolas NF, monospace, courier-new, courier',
@@ -25,6 +25,7 @@ function initTerminal()
25
25
  brightBlack: "#243C4F",
26
26
  brightBlue: "#5584b1",
27
27
  },
28
+ customGlyphs: false,
28
29
  rescaleOverlappingGlyphs: true,
29
30
  });
30
31
  }
@@ -130,16 +131,14 @@ async function fetchOutput(url) {
130
131
  } else {
131
132
  slider = document.getElementById('outputSlider')
132
133
  percentage = slider.value;
134
+ fullOutput += data.output;
133
135
  if (percentage == 100)
134
- terminal.write(data.output);
136
+ terminal.write(data.output); //.replace(/ \r/g, "\r\n")); tty size mismatch
135
137
  else {
136
- length = Math.floor((fullOutput.length * percentage) / 100);
137
- newlength = fullOutput.length + data.output.length;
138
- percentage = Math.floor(length/newlength * 100);
138
+ percentage = Math.round((outputLength * 100)/fullOutput.length);
139
139
  slider.value = percentage;
140
140
  document.getElementById('outputPercentage').innerText = `${percentage}%`;
141
141
  }
142
- fullOutput += data.output;
143
142
  nextOutputLink = data.links.next;
144
143
  if (data.status != 'running') {
145
144
  clearInterval(outputInterval);
@@ -165,6 +164,10 @@ async function viewOutput(command_id) {
165
164
  return;
166
165
  }
167
166
  const data = await response.json();
167
+ if (data.command == 'term')
168
+ terminal.options.cursorInactiveStyle = 'outline';
169
+ else
170
+ terminal.options.cursorInactiveStyle = 'none';
168
171
  if (data.status === 'running') {
169
172
  fetchOutput(nextOutputLink);
170
173
  outputInterval = setInterval(() => fetchOutput(nextOutputLink), 1000);
@@ -298,7 +301,7 @@ function sliderUpdateOutput()
298
301
  {
299
302
  const slider = document.getElementById('outputSlider');
300
303
  const percentage = slider.value;
301
- const outputLength = Math.floor((fullOutput.length * percentage) / 100);
304
+ outputLength = Math.floor((fullOutput.length * percentage) / 100);
302
305
  const limitedOutput = fullOutput.slice(0, outputLength);
303
306
  terminal.clear();
304
307
  terminal.reset();
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.4.1'
16
- __version_tuple__ = version_tuple = (1, 4, 1)
15
+ __version__ = version = '1.4.3'
16
+ __version_tuple__ = version_tuple = (1, 4, 3)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pywebexec
3
- Version: 1.4.1
3
+ Version: 1.4.3
4
4
  Summary: Simple Python HTTP Exec Server
5
5
  Home-page: https://github.com/joknarf/pywebexec
6
6
  Author: Franck Jouvanceau
@@ -36,7 +36,6 @@ Classifier: Intended Audience :: System Administrators
36
36
  Classifier: License :: OSI Approved :: MIT License
37
37
  Classifier: Operating System :: POSIX
38
38
  Classifier: Operating System :: Unix
39
- Classifier: Operating System :: Microsoft :: Windows
40
39
  Classifier: Operating System :: MacOS
41
40
  Classifier: Programming Language :: Python
42
41
  Classifier: Programming Language :: Python :: 3
File without changes
File without changes
File without changes
File without changes