pywebexec 2.1.13__tar.gz → 2.1.15__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 (82) hide show
  1. {pywebexec-2.1.13/pywebexec.egg-info → pywebexec-2.1.15}/PKG-INFO +1 -1
  2. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/pywebexec.py +7 -3
  3. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/css/form.css +16 -2
  4. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/schemaform.js +36 -12
  5. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/version.py +2 -2
  6. {pywebexec-2.1.13 → pywebexec-2.1.15/pywebexec.egg-info}/PKG-INFO +1 -1
  7. {pywebexec-2.1.13 → pywebexec-2.1.15}/.github/workflows/python-publish.yml +0 -0
  8. {pywebexec-2.1.13 → pywebexec-2.1.15}/.gitignore +0 -0
  9. {pywebexec-2.1.13 → pywebexec-2.1.15}/LICENSE +0 -0
  10. {pywebexec-2.1.13 → pywebexec-2.1.15}/README.md +0 -0
  11. {pywebexec-2.1.13 → pywebexec-2.1.15}/pyproject.toml +0 -0
  12. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/__init__.py +0 -0
  13. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/host_ip.py +0 -0
  14. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/css/markdown.css +0 -0
  15. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/css/style.css +0 -0
  16. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/css/swagger-ui.css +0 -0
  17. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/css/swagger-ui.css.map +0 -0
  18. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/css/xterm.css +0 -0
  19. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/fonts/CommitMonoNerdFontMono-Regular.ttf +0 -0
  20. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/fonts/LICENSE +0 -0
  21. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/fonts/glyphicons-halflings-regular.eot +0 -0
  22. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/fonts/glyphicons-halflings-regular.svg +0 -0
  23. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/fonts/glyphicons-halflings-regular.ttf +0 -0
  24. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/fonts/glyphicons-halflings-regular.woff +0 -0
  25. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/fonts/glyphicons-halflings-regular.woff2 +0 -0
  26. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/aborted.svg +0 -0
  27. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/copy.svg +0 -0
  28. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/copy_ok.svg +0 -0
  29. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/down-arrow.svg +0 -0
  30. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/failed.svg +0 -0
  31. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/favicon.svg +0 -0
  32. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/fit-tty.svg +0 -0
  33. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/fit-win.svg +0 -0
  34. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/font-decrease.svg +0 -0
  35. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/font-increase.svg +0 -0
  36. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/norun.svg +0 -0
  37. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/pause.svg +0 -0
  38. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/popup.svg +0 -0
  39. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/resume.svg +0 -0
  40. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/running.svg +0 -0
  41. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/success.svg +0 -0
  42. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/images/swagger-ui.svg +0 -0
  43. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/executables.js +0 -0
  44. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/js-yaml/LICENSE +0 -0
  45. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/js-yaml/js-yaml.min.js +0 -0
  46. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/marked/LICENSE.md +0 -0
  47. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/marked/marked.min.js +0 -0
  48. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/popup.js +0 -0
  49. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/script.js +0 -0
  50. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/swagger-form.js +0 -0
  51. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/swagger-ui/LICENSE +0 -0
  52. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/swagger-ui/swagger-ui-bundle.js +0 -0
  53. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  54. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/LICENSE +0 -0
  55. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-canvas.js +0 -0
  56. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-canvas.js.map +0 -0
  57. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-fit.js +0 -0
  58. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-fit.js.map +0 -0
  59. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-unicode-graphemes.js +0 -0
  60. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-unicode-graphemes.js.map +0 -0
  61. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-unicode11.js +0 -0
  62. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/addon-unicode11.js.map +0 -0
  63. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/xterm.js +0 -0
  64. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/js/xterm/xterm.js.map +0 -0
  65. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/jsonform/LICENSE +0 -0
  66. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/jsonform/deps/README.md +0 -0
  67. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/jsonform/deps/img/glyphicons-halflings.png +0 -0
  68. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/jsonform/deps/jquery.min.js +0 -0
  69. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/jsonform/deps/underscore.js +0 -0
  70. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/static/jsonform/lib/jsonform.js +0 -0
  71. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/swagger.yaml +0 -0
  72. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/templates/__init__.py +0 -0
  73. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/templates/index.html +0 -0
  74. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/templates/popup.html +0 -0
  75. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec/templates/swagger_ui.html +0 -0
  76. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec.egg-info/SOURCES.txt +0 -0
  77. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec.egg-info/dependency_links.txt +0 -0
  78. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec.egg-info/entry_points.txt +0 -0
  79. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec.egg-info/requires.txt +0 -0
  80. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexec.egg-info/top_level.txt +0 -0
  81. {pywebexec-2.1.13 → pywebexec-2.1.15}/pywebexecdev +0 -0
  82. {pywebexec-2.1.13 → pywebexec-2.1.15}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pywebexec
3
- Version: 2.1.13
3
+ Version: 2.1.15
4
4
  Summary: Simple Python HTTP Exec Server
5
5
  Home-page: https://github.com/joknarf/pywebexec
6
6
  Author: Franck Jouvanceau
@@ -837,6 +837,7 @@ def run_dynamic_command(cmd):
837
837
  separator_params = exe.get("schema", {}).get("schema_options", {}).get("separator_params", {})
838
838
  noprefix = exe.get("schema", {}).get("schema_options", {}).get("noprefix_params", {})
839
839
  convert_params = exe.get("schema", {}).get("schema_options", {}).get("convert_params", {})
840
+ convert_values = exe.get("schema", {}).get("schema_options", {}).get("convert_values", {})
840
841
  schema_params = exe.get("schema", {}).get("properties", {})
841
842
  batch_param = exe.get("schema", {}).get("schema_options", {}).get("batch_param", None)
842
843
  batch_values = []
@@ -865,14 +866,17 @@ def run_dynamic_command(cmd):
865
866
  separator = ""
866
867
  else:
867
868
  prefix = f"--{param}"
868
- if isinstance(value, bool):
869
+ if isinstance(value, bool) and convert_params.get(param, None) is None:
869
870
  if value:
870
871
  params += f"{prefix} "
871
872
  continue
872
- if isinstance(value, dict):
873
+ if isinstance(value, dict) or convert_values.get(param, None) == "json":
873
874
  value = shlex.quote(json.dumps(value))
875
+ elif convert_values.get(param, None) == "quote":
876
+ value = shlex.quote(str(value))
877
+ else:
878
+ values = shlex.split(value) if isinstance(value, str) else value
874
879
  params += f"{prefix}{separator}"
875
- values = shlex.split(value) if isinstance(value, str) else value
876
880
  if param == batch_param and len(values)>1:
877
881
  batch_values = values
878
882
  value="@1"
@@ -196,9 +196,23 @@
196
196
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
197
197
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
198
198
  }
199
+ ._jsonform-array-deletelast {
200
+ display: none;
201
+ }
202
+ ._jsonform-array-buttons {
203
+ display: block;
204
+ width: 100%;
205
+ text-align: right;
206
+ }
207
+ i[title="Delete current"] {
208
+ top: 5px;
209
+ }
210
+ ._jsonform-array-addmore, ._jsonform-array-deletecurrent {
211
+ box-shadow: unset;
212
+ }
199
213
  }
200
214
 
201
215
  .swagger-ui textarea {
202
- min-height: 130px;
203
- overflow-y: hidden;
216
+ min-height: 130px;
217
+ overflow-y: hidden;
204
218
  }
@@ -13,7 +13,7 @@ function formInputHandle() {
13
13
  if (! inputHandlers.includes(input)) {
14
14
  val = input.value || input.placeholder;
15
15
  if (val) {
16
- size = Math.max(val.length - 2, 2)
16
+ size = Math.max(val.length, 2)
17
17
  if (input.type== 'number') {
18
18
  size += 2;
19
19
  }
@@ -27,16 +27,22 @@ function formInputHandle() {
27
27
  });
28
28
  }
29
29
 
30
- function extractKeysAndPlaceholders(obj, prefix = '') {
30
+ function extractKeysAndPlaceholders(obj, formoptions, prefix = '') {
31
31
  let result = [];
32
32
 
33
33
  for (let key in obj.properties) {
34
34
  if (obj.properties[key].type === 'object' && obj.properties[key].properties) {
35
- result = result.concat(extractKeysAndPlaceholders(obj.properties[key], prefix ? `${prefix}.${key}` : key));
35
+ result = result.concat(extractKeysAndPlaceholders(obj.properties[key], formoptions, prefix ? `${prefix}.${key}` : key));
36
36
  } else {
37
+ if (formoptions[`${prefix}.${key}`]) {
38
+ foptions = formoptions[`${prefix}.${key}`];
39
+ } else {
40
+ foptions = {};
41
+ }
37
42
  result.push({
38
43
  key: prefix ? `${prefix}.${key}` : key,
39
- placeholder: obj.properties[key].example || null
44
+ placeholder: obj.properties[key].example || null,
45
+ ... foptions
40
46
  });
41
47
  }
42
48
  }
@@ -44,12 +50,30 @@ function extractKeysAndPlaceholders(obj, prefix = '') {
44
50
  }
45
51
 
46
52
  function createSchemaForm(form, schema, onSubmit) {
47
- formDesc = extractKeysAndPlaceholders(schema);
53
+ if (schema && schema.schema_options) {
54
+ schema_options = schema.schema_options;
55
+ } else {
56
+ schema_options = {};
57
+ }
58
+ if (schema && schema.properties && schema.properties.params && schema.properties.params.schema_options) {
59
+ schema_params_options = schema.properties.params.schema_options;
60
+ } else {
61
+ schema_params_options = {};
62
+ }
63
+
64
+ formoptions = {};
65
+ if (schema_options && schema_options.form) {
66
+ formoptions = schema.schema_options.form;
67
+ } else if (schema_params_options && schema_params_options.form) {
68
+ for (let key in schema_params_options.form) {
69
+ formoptions[`params.${key}`] = schema_params_options.form[key];
70
+ }
71
+ }
72
+ formDesc = extractKeysAndPlaceholders(schema, formoptions);
48
73
  schemaForm = form[0];
49
74
  if (onSubmit != null) {
50
- console.log(schema.schema_options.batch_param)
51
- if (schema && schema.schema_options && schema.schema_options.batch_param) {
52
- schema.properties[schema.schema_options.batch_param].required = true;
75
+ if (schema_options && schema_options.batch_param) {
76
+ schema.properties[schema_options.batch_param].required = true;
53
77
  if (!schema.properties.parallel) {
54
78
  schema.properties['parallel'] = {
55
79
  type: 'integer',
@@ -75,7 +99,7 @@ function createSchemaForm(form, schema, onSubmit) {
75
99
  });
76
100
  }
77
101
  for (i = 0; i < formDesc.length; i++) {
78
- if (formDesc[i].key == schema.schema_options.batch_param) {
102
+ if (formDesc[i].key == schema_options.batch_param) {
79
103
  formDesc[i].type = 'textarea';
80
104
  formDesc[i].required = true;
81
105
  }
@@ -94,10 +118,10 @@ function createSchemaForm(form, schema, onSubmit) {
94
118
  title: 'Run',
95
119
  });
96
120
  } else {
97
- if (schema && schema.properties && schema.properties.params.schema_options && schema.properties.params.schema_options.batch_param) {
98
- schema.properties.params.properties[schema.properties.params.schema_options.batch_param].required = true;
121
+ if (schema_params_options && schema_params_options.batch_param) {
122
+ schema.properties.params.properties[schema_params_options.batch_param].required = true;
99
123
  for (i = 0; i < formDesc.length; i++) {
100
- if (formDesc[i].key == 'params.' + schema.properties.params.schema_options.batch_param) {
124
+ if (formDesc[i].key == 'params.' + schema_params_options.batch_param) {
101
125
  formDesc[i].type = 'textarea';
102
126
  formDesc[i].required = true;
103
127
  }
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '2.1.13'
21
- __version_tuple__ = version_tuple = (2, 1, 13)
20
+ __version__ = version = '2.1.15'
21
+ __version_tuple__ = version_tuple = (2, 1, 15)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pywebexec
3
- Version: 2.1.13
3
+ Version: 2.1.15
4
4
  Summary: Simple Python HTTP Exec Server
5
5
  Home-page: https://github.com/joknarf/pywebexec
6
6
  Author: Franck Jouvanceau
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes