cmdbox 0.5.1.2__tar.gz → 0.5.2__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.

Potentially problematic release.


This version of cmdbox might be problematic. Click here for more details.

Files changed (286) hide show
  1. cmdbox-0.5.2/PKG-INFO +426 -0
  2. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/README.md +21 -0
  3. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/app.py +4 -2
  4. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/auth/signin.py +633 -631
  5. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/client.py +10 -10
  6. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/common.py +50 -6
  7. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/commons/convert.py +9 -0
  8. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/commons/module.py +113 -113
  9. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/commons/redis_client.py +40 -29
  10. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/edge.py +4 -4
  11. cmdbox-0.5.2/cmdbox/app/features/cli/audit_base.py +135 -0
  12. cmdbox-0.5.2/cmdbox/app/features/cli/cmdbox_audit_createdb.py +224 -0
  13. cmdbox-0.5.2/cmdbox/app/features/cli/cmdbox_audit_delete.py +299 -0
  14. cmdbox-0.5.2/cmdbox/app/features/cli/cmdbox_audit_search.py +350 -0
  15. cmdbox-0.5.2/cmdbox/app/features/cli/cmdbox_audit_write.py +240 -0
  16. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_copy.py +207 -207
  17. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_download.py +207 -207
  18. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_list.py +193 -193
  19. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_mkdir.py +191 -191
  20. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_move.py +199 -199
  21. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_remove.py +190 -190
  22. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_rmdir.py +190 -190
  23. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_file_upload.py +212 -212
  24. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_client_server_info.py +166 -166
  25. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_server_list.py +88 -88
  26. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_server_stop.py +138 -138
  27. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_del_cmd.py +2 -0
  28. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_del_pipe.py +1 -0
  29. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_do_signin.py +12 -2
  30. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_do_signout.py +1 -0
  31. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_exec_cmd.py +25 -1
  32. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_exec_pipe.py +1 -0
  33. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_filer download.py +43 -42
  34. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_filer.py +1 -0
  35. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_filer_upload.py +65 -64
  36. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_gui.py +166 -165
  37. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_load_pin.py +43 -43
  38. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_raw_pipe.py +87 -87
  39. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_save_cmd.py +1 -0
  40. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_save_pin.py +42 -42
  41. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_save_pipe.py +1 -0
  42. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_users.py +12 -0
  43. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/options.py +767 -601
  44. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/features.yml +20 -0
  45. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_client_time.py +82 -82
  46. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_server_time.py +145 -145
  47. cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.Sphinx.8.1.3(BSD License).txt → cmdbox-0.5.2/cmdbox/licenses/LICENSE.Sphinx.8.2.3(UNKNOWN).txt +1 -1
  48. cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.babel.2.16.0(BSD License).txt → cmdbox-0.5.2/cmdbox/licenses/LICENSE.babel.2.17.0(BSD License).txt +1 -1
  49. cmdbox-0.5.2/cmdbox/licenses/LICENSE.charset-normalizer.3.4.1(MIT License).txt +21 -0
  50. cmdbox-0.5.2/cmdbox/licenses/LICENSE.gunicorn.23.0.0(MIT License).txt +23 -0
  51. cmdbox-0.5.2/cmdbox/licenses/LICENSE.importlib_metadata.8.6.1(Apache Software License).txt +202 -0
  52. cmdbox-0.5.2/cmdbox/licenses/LICENSE.nh3.0.2.21(MIT).txt +21 -0
  53. cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.pillow.11.0.0(CMU License (MIT-CMU)).txt → cmdbox-0.5.2/cmdbox/licenses/LICENSE.pillow.11.1.0(CMU License (MIT-CMU)).txt +27 -40
  54. cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.charset-normalizer.3.4.0(MIT License).txt → cmdbox-0.5.2/cmdbox/licenses/LICENSE.plyer.2.1.0(MIT License).txt +5 -7
  55. cmdbox-0.5.2/cmdbox/licenses/LICENSE.prompt_toolkit.3.0.50(BSD License).txt +27 -0
  56. cmdbox-0.5.2/cmdbox/licenses/LICENSE.psycopg-binary.3.2.6(GNU Lesser General Public License v3 (LGPLv3)).txt +165 -0
  57. cmdbox-0.5.2/cmdbox/licenses/LICENSE.psycopg-pool.3.2.6(GNU Lesser General Public License v3 (LGPLv3)).txt +165 -0
  58. cmdbox-0.5.2/cmdbox/licenses/LICENSE.psycopg.3.2.6(GNU Lesser General Public License v3 (LGPLv3)).txt +165 -0
  59. cmdbox-0.5.2/cmdbox/licenses/LICENSE.pycryptodome.3.22.0(BSD License; Public Domain).txt +61 -0
  60. cmdbox-0.5.2/cmdbox/licenses/LICENSE.pystray.0.19.5(GNU Lesser General Public License v3 (LGPLv3)).txt +674 -0
  61. cmdbox-0.5.2/cmdbox/licenses/LICENSE.questionary.2.1.0(MIT License).txt +19 -0
  62. cmdbox-0.5.2/cmdbox/licenses/LICENSE.roman-numerals-py.3.1.0(CC0 1.0 Universal (CC0 1.0) Public Domain Dedication; Zero-Clause BSD (0BSD)).txt +146 -0
  63. cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.six.1.16.0(MIT License).txt → cmdbox-0.5.2/cmdbox/licenses/LICENSE.six.1.17.0(MIT License).txt +1 -1
  64. cmdbox-0.5.2/cmdbox/licenses/LICENSE.typing-inspection.0.4.0(MIT License).txt +21 -0
  65. cmdbox-0.5.2/cmdbox/licenses/LICENSE.tzdata.2025.2(Apache Software License).txt +15 -0
  66. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/files.txt +48 -36
  67. cmdbox-0.5.2/cmdbox/logconf_audit.yml +30 -0
  68. cmdbox-0.5.2/cmdbox/logconf_cmdbox.yml +30 -0
  69. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/version.py +2 -2
  70. cmdbox-0.5.2/cmdbox/web/assets/cmdbox/color_mode.css +516 -0
  71. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/common.js +19 -0
  72. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/list_cmd.js +9 -10
  73. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/main.js +2 -2
  74. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/result.js +2 -2
  75. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/signin.js +2 -2
  76. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/users.js +2 -3
  77. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/view_result.js +1 -1
  78. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/filer/main.js +2 -2
  79. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/filer.html +16 -2
  80. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/gui.html +15 -1
  81. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/result.html +15 -1
  82. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/signin.html +35 -14
  83. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/users.html +15 -1
  84. cmdbox-0.5.2/cmdbox.egg-info/PKG-INFO +426 -0
  85. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox.egg-info/SOURCES.txt +56 -36
  86. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox.egg-info/entry_points.txt +0 -1
  87. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox.egg-info/requires.txt +1 -0
  88. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/setup.py +1 -0
  89. cmdbox-0.5.1.2/PKG-INFO +0 -405
  90. cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.nh3.0.2.18(MIT).txt +0 -1
  91. cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.pkginfo.1.10.0(MIT License).txt +0 -21
  92. cmdbox-0.5.1.2/cmdbox.egg-info/PKG-INFO +0 -405
  93. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/LICENSE +0 -0
  94. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/MANIFEST.in +0 -0
  95. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/__init__.py +0 -0
  96. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/__main__.py +0 -0
  97. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/__init__.py +0 -0
  98. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/commons/loghandler.py +0 -0
  99. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/feature.py +0 -0
  100. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_edge_config.py +0 -0
  101. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_edge_start.py +0 -0
  102. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_gui_start.py +0 -0
  103. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_gui_stop.py +0 -0
  104. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_server_start.py +0 -0
  105. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_apikey_add.py +0 -0
  106. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_apikey_del.py +0 -0
  107. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_gencert.py +0 -0
  108. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_genpass.py +0 -0
  109. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_group_add.py +0 -0
  110. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_group_del.py +0 -0
  111. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_group_edit.py +0 -0
  112. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_group_list.py +0 -0
  113. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_start.py +0 -0
  114. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_stop.py +0 -0
  115. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_user_add.py +0 -0
  116. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_user_del.py +0 -0
  117. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_user_edit.py +0 -0
  118. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/cli/cmdbox_web_user_list.py +0 -0
  119. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_assets.py +0 -0
  120. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_bbforce_cmd.py +0 -0
  121. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_copyright.py +0 -0
  122. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_get_cmd_choices.py +0 -0
  123. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_get_cmds.py +0 -0
  124. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_get_modes.py +0 -0
  125. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_get_server_opt.py +0 -0
  126. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_gui_callback.py +0 -0
  127. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_list_cmd.py +0 -0
  128. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_list_pipe.py +0 -0
  129. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_load_cmd.py +0 -0
  130. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_load_pipe.py +0 -0
  131. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_raw_cmd.py +0 -0
  132. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_result.py +0 -0
  133. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_signin.py +0 -0
  134. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_usesignout.py +0 -0
  135. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_versions_cmdbox.py +0 -0
  136. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/features/web/cmdbox_web_versions_used.py +0 -0
  137. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/filer.py +0 -0
  138. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/server.py +0 -0
  139. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/app/web.py +0 -0
  140. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/config.yml +0 -0
  141. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/.vscode/launch.json +0 -0
  142. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/requirements.txt +0 -0
  143. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/__init__.py +0 -0
  144. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/__main__.py +0 -0
  145. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/app/app.py +0 -0
  146. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/extensions/features.yml +0 -0
  147. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/extensions/user_list.yml +0 -0
  148. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/logconf_sample.yml +0 -0
  149. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/version.py +0 -0
  150. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/web/assets/sample/favicon.ico +0 -0
  151. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/sample_project/sample/web/assets/sample/icon.png +0 -0
  152. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/extensions/user_list.yml +0 -0
  153. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.Jinja2.3.1.4(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.Jinja2.3.1.6(BSD License).txt +0 -0
  154. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.MarkupSafe.3.0.2(BSD License).txt +0 -0
  155. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.PyYAML.6.0.2(MIT License).txt +0 -0
  156. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.Pygments.2.18.0(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.Pygments.2.19.1(BSD License).txt +0 -0
  157. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.alabaster.1.0.0(BSD License).txt +0 -0
  158. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.annotated-types.0.7.0(MIT License).txt +0 -0
  159. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.anyio.4.6.2.post1(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.anyio.4.9.0(MIT License).txt +0 -0
  160. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.argcomplete.3.5.1(Apache Software License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.argcomplete.3.6.1(Apache Software License).txt +0 -0
  161. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.backports.tarfile.1.2.0(MIT License).txt +0 -0
  162. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.certifi.2024.8.30(Mozilla Public License 2.0 (MPL 2.0)).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.certifi.2025.1.31(Mozilla Public License 2.0 (MPL 2.0)).txt +0 -0
  163. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.cffi.1.17.1(MIT License).txt +0 -0
  164. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.click.8.1.7(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.click.8.1.8(BSD License).txt +0 -0
  165. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.colorama.0.4.6(BSD License).txt +0 -0
  166. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.cryptography.43.0.3(Apache Software License; BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.cryptography.44.0.2(Apache Software License; BSD License).txt +0 -0
  167. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.docutils.0.21.2(BSD License; GNU General Public License (GPL); Public Domain; Python Software Foundation License).txt +0 -0
  168. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.fastapi.0.115.5(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.fastapi.0.115.12(MIT License).txt +0 -0
  169. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.gevent.24.11.1(MIT License).txt +0 -0
  170. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.greenlet.3.1.1(MIT License).txt +0 -0
  171. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.h11.0.14.0(MIT License).txt +0 -0
  172. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.httptools.0.6.4(MIT License).txt +0 -0
  173. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.importlib_metadata.8.5.0(Apache Software License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.id.1.5.0(Apache Software License).txt +0 -0
  174. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.idna.3.10(BSD License).txt +0 -0
  175. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.imagesize.1.4.1(MIT License).txt +0 -0
  176. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.itsdangerous.2.2.0(BSD License).txt +0 -0
  177. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.jaraco.classes.3.4.0(MIT License).txt +0 -0
  178. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.jaraco.context.6.0.1(MIT License).txt +0 -0
  179. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.jaraco.functools.4.1.0(MIT License).txt +0 -0
  180. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.keyring.25.5.0(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.keyring.25.6.0(MIT License).txt +0 -0
  181. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.markdown-it-py.3.0.0(MIT License).txt +0 -0
  182. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.mdurl.0.1.2(MIT License).txt +0 -0
  183. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.more-itertools.10.5.0(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.more-itertools.10.6.0(MIT License).txt +0 -0
  184. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.numpy.2.1.3(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.numpy.2.2.4(BSD License).txt +0 -0
  185. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.packaging.24.2(Apache Software License; BSD License).txt +0 -0
  186. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.pip.24.0(MIT License).txt +0 -0
  187. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.prettytable.3.12.0(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.prettytable.3.16.0(UNKNOWN).txt +0 -0
  188. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.pycparser.2.22(BSD License).txt +0 -0
  189. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.pydantic.2.10.2(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.pydantic.2.11.1(MIT License).txt +0 -0
  190. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.pydantic_core.2.27.1(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.pydantic_core.2.33.0(MIT License).txt +0 -0
  191. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.python-dotenv.1.0.1(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.python-dotenv.1.1.0(BSD License).txt +0 -0
  192. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.python-multipart.0.0.17(Apache Software License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.python-multipart.0.0.20(Apache Software License).txt +0 -0
  193. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.pywin32-ctypes.0.2.3(BSD-3-Clause).txt +0 -0
  194. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.readme_renderer.44.0(Apache Software License).txt +0 -0
  195. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.redis.5.2.0(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.redis.5.2.1(MIT License).txt +0 -0
  196. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.requests-toolbelt.1.0.0(Apache Software License).txt +0 -0
  197. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.requests.2.32.3(Apache Software License).txt +0 -0
  198. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.rfc3986.2.0.0(Apache Software License).txt +0 -0
  199. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.rich.13.9.4(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.rich.14.0.0(MIT License).txt +0 -0
  200. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.setuptools.65.5.0(MIT License).txt +0 -0
  201. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sniffio.1.3.1(Apache Software License; MIT License).txt +0 -0
  202. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.snowballstemmer.2.2.0(BSD License).txt +0 -0
  203. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.sphinx-intl.2.3.0(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.sphinx-intl.2.3.1(BSD License).txt +0 -0
  204. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinx-rtd-theme.3.0.2(MIT License).txt +0 -0
  205. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinx-sitemap.2.6.0(MIT License).txt +0 -0
  206. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinx_fontawesome.0.0.6(GNU General Public License v2 (GPLv2)).txt +0 -0
  207. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinxcontrib-applehelp.2.0.0(BSD License).txt +0 -0
  208. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinxcontrib-devhelp.2.0.0(BSD License).txt +0 -0
  209. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinxcontrib-htmlhelp.2.1.0(BSD License).txt +0 -0
  210. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinxcontrib-jquery.4.1(BSD License).txt +0 -0
  211. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinxcontrib-jsmath.1.0.1(BSD License).txt +0 -0
  212. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinxcontrib-qthelp.2.0.0(BSD License).txt +0 -0
  213. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.sphinxcontrib-serializinghtml.2.0.0(BSD License).txt +0 -0
  214. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.starlette.0.41.3(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.starlette.0.46.1(BSD License).txt +0 -0
  215. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.tabulate.0.9.0(MIT License).txt +0 -0
  216. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.tomli.2.1.0(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.tomli.2.2.1(MIT License).txt +0 -0
  217. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.twine.5.1.1(Apache Software License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.twine.6.1.0(Apache Software License).txt +0 -0
  218. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.typing_extensions.4.12.2(Python Software Foundation License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.typing_extensions.4.13.0(UNKNOWN).txt +0 -0
  219. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.urllib3.2.2.3(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.urllib3.2.3.0(MIT License).txt +0 -0
  220. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.uvicorn.0.32.1(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.uvicorn.0.34.0(BSD License).txt +0 -0
  221. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.watchfiles.1.0.0(MIT License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.watchfiles.1.0.4(MIT License).txt +0 -0
  222. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.wcwidth.0.2.13(MIT License).txt +0 -0
  223. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.websockets.14.1(BSD License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.websockets.15.0.1(BSD License).txt +0 -0
  224. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.wheel.0.45.1(MIT License).txt +0 -0
  225. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.zipp.3.21.0(MIT License).txt +0 -0
  226. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/licenses/LICENSE.zope.event.5.0(Zope Public License).txt +0 -0
  227. /cmdbox-0.5.1.2/cmdbox/licenses/LICENSE.zope.interface.7.1.1(Zope Public License).txt → /cmdbox-0.5.2/cmdbox/licenses/LICENSE.zope.interface.7.2(Zope Public License).txt +0 -0
  228. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/logconf_client.yml +0 -0
  229. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/logconf_edge.yml +0 -0
  230. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/logconf_gui.yml +0 -0
  231. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/logconf_server.yml +0 -0
  232. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/logconf_web.yml +0 -0
  233. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/bootstrap/bootstrap.bundle.min.5.3.0.js +0 -0
  234. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/bootstrap/bootstrap.min.5.3.0.css +0 -0
  235. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/favicon.ico +0 -0
  236. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/filer_modal.js +0 -0
  237. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/icon.png +0 -0
  238. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/list_pipe.js +0 -0
  239. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/open_capture.js +0 -0
  240. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/open_output_json.js +0 -0
  241. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/cmdbox/view_raw.js +0 -0
  242. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/encodingjs/LICENSE.txt +0 -0
  243. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/encodingjs/encoding.js +0 -0
  244. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/encodingjs/encoding.min.js +0 -0
  245. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/filer/filer.js +0 -0
  246. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/filer/main.css +0 -0
  247. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/highlight/default.css +0 -0
  248. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/highlight/highlight.min.js +0 -0
  249. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/highlight/styles/tokyo-night-dark.min.css +0 -0
  250. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery/jquery.min.3.2.0.js +0 -0
  251. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-linedtextarea/README.md +0 -0
  252. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea-license.txt +0 -0
  253. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.css +0 -0
  254. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.html +0 -0
  255. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.js +0 -0
  256. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-resizable/jquery-resizable.min.js +0 -0
  257. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/AUTHORS.txt +0 -0
  258. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/LICENSE.txt +0 -0
  259. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
  260. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
  261. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
  262. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
  263. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
  264. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  265. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/jquery-ui.min.css +0 -0
  266. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/jquery-ui.min.js +0 -0
  267. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/jquery-ui.structure.min.css +0 -0
  268. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/jquery-ui.theme.min.css +0 -0
  269. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/jquery-ui/package.json +0 -0
  270. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/lightbox2/css/lightbox.min.css +0 -0
  271. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/lightbox2/images/close.png +0 -0
  272. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/lightbox2/images/loading.gif +0 -0
  273. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/lightbox2/images/next.png +0 -0
  274. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/lightbox2/images/prev.png +0 -0
  275. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/lightbox2/js/lightbox.min.js +0 -0
  276. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/split-pane/split-pane.css +0 -0
  277. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/split-pane/split-pane.js +0 -0
  278. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/tree-menu/css/tree-menu.css +0 -0
  279. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/tree-menu/image/file.png +0 -0
  280. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/tree-menu/image/folder-close.png +0 -0
  281. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/tree-menu/image/folder-open.png +0 -0
  282. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets/tree-menu/js/tree-menu.js +0 -0
  283. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox/web/assets_license_list.txt +0 -0
  284. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox.egg-info/dependency_links.txt +0 -0
  285. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/cmdbox.egg-info/top_level.txt +0 -0
  286. {cmdbox-0.5.1.2 → cmdbox-0.5.2}/setup.cfg +0 -0
cmdbox-0.5.2/PKG-INFO ADDED
@@ -0,0 +1,426 @@
1
+ Metadata-Version: 2.1
2
+ Name: cmdbox
3
+ Version: 0.5.2
4
+ Summary: cmdbox: It is a command line application with a plugin mechanism.
5
+ Home-page: https://github.com/hamacom2004jp/cmdbox
6
+ Download-URL: https://github.com/hamacom2004jp/cmdbox
7
+ Author: hamacom2004jp
8
+ Author-email: hamacom2004jp@gmail.com
9
+ Maintainer: hamacom2004jp
10
+ Maintainer-email: hamacom2004jp@gmail.com
11
+ License: MIT
12
+ Keywords: cli restapi redis fastapi
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Information Technology
16
+ Classifier: Intended Audience :: System Administrators
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Natural Language :: Japanese
19
+ Classifier: Programming Language :: Python
20
+ Classifier: Topic :: Utilities
21
+ Requires-Python: >=3.8
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+
25
+ # cmdbox (Command Development Application)
26
+
27
+ - It is a command development application with a plugin mechanism.
28
+ - Documentation is [here](https://hamacom2004jp.github.io/cmdbox/).
29
+ - With cmdbox, you can easily implement commands with complex options.
30
+ - The implemented commands can be called from the CLI / RESTAPI / Web / Edge screen.
31
+ - The implemented commands can be executed on a remote server via redis.
32
+
33
+ ![cmdbox operation image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/orverview.drawio.png)
34
+
35
+ # Install
36
+
37
+ - Install cmdbox with the following command.
38
+
39
+ ```bash
40
+ pip install cmdbox
41
+ cmdbox -v
42
+ ```
43
+
44
+ - Also install the docker version of the redis server.
45
+
46
+ ```bash
47
+ docker run -p 6379:6379 --name redis -it ubuntu/redis:latest
48
+ ```
49
+
50
+ # Tutorial
51
+
52
+ - Open the ```.sample/sample_project``` folder in the current directory with VSCode.
53
+
54
+ ![image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/ss/readme001.png)
55
+
56
+ - Install dependent libraries.
57
+
58
+ ```bash
59
+ python -m venv .venv
60
+ . .venv/bin/activate
61
+ pip install -r requirements.txt
62
+ ```
63
+
64
+ - Run the project.
65
+
66
+ ![image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/ss/readme002.png)
67
+
68
+ - The localhost web screen will open.
69
+
70
+ ![image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/ss/readme003.png)
71
+
72
+ - Enter ```user01 / user01``` for the initial ID and PW to sign in.
73
+ - Using this web screen, you can easily execute the commands implemented in cmdbox.
74
+
75
+ ![image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/ss/readme004.png)
76
+
77
+ - Let's look at the command to get a list of files as an example.
78
+ - Press the plus button under Commands to open the Add dialog.
79
+ - Then enter the following.
80
+
81
+ ![image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/ss/readme005.png)
82
+
83
+ - Press the ```Save``` button once and then press the ```Execute``` button.
84
+ - The results of the command execution are displayed.
85
+
86
+ ![image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/ss/readme006.png)
87
+
88
+ - Open the saved ```client_time``` and press the ```Raw``` button.
89
+ - You will see how to execute the same command on the command line; the RESTAPI URL is also displayed.
90
+
91
+ ![image](https://github.com/hamacom2004jp/cmdbox/raw/main/docs_src/static/ss/readme007.png)
92
+
93
+
94
+ ## How to implement a new command using cmdbox
95
+
96
+ - Under the ```sample/app/features/cli``` folder, you will find an implementation of the ```sample_client_time``` mentioned earlier.
97
+ - The implementation is as follows. (Slightly abbreviated display)
98
+ - Create the following code and save it in the ```sample/app/features/cli``` folder.
99
+
100
+ ```python
101
+ from cmdbox.app import common, feature
102
+ from typing import Dict, Any, Tuple, Union, List
103
+ import argparse
104
+ import datetime
105
+ import logging
106
+
107
+
108
+ class ClientTime(feature.Feature):
109
+ def get_mode(self) -> Union[str, List[str]]:
110
+ return "client"
111
+
112
+ def get_cmd(self):
113
+ return 'time'
114
+
115
+ def get_option(self):
116
+ return dict(
117
+ type=Options.T_STR, default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
118
+ discription_ja="クライアント側の現在時刻を表示します。",
119
+ discription_en="Displays the current time at the client side.",
120
+ choice=[
121
+ dict(opt="timedelta", type=Options.T_INT, default=9, required=False, multi=False, hide=False, choice=None,
122
+ discription_ja="時差の時間数を指定します。",
123
+ discription_en="Specify the number of hours of time difference."),
124
+ ])
125
+
126
+ def apprun(self, logger:logging.Logger, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[int, Dict[str, Any], Any]:
127
+ tz = datetime.timezone(datetime.timedelta(hours=args.timedelta))
128
+ dt = datetime.datetime.now(tz)
129
+ ret = dict(success=dict(data=dt.strftime('%Y-%m-%d %H:%M:%S')))
130
+ common.print_format(ret, args.format, tm, args.output_json, args.output_json_append, pf=pf)
131
+ if 'success' not in ret:
132
+ return 1, ret, None
133
+ return 0, ret, None
134
+
135
+ def edgerun(self, opt, tool, logger, timeout, prevres = None):
136
+ status, res = tool.exec_cmd(opt, logger, timeout, prevres)
137
+ tool.notify(res)
138
+ yield 1, res
139
+ ```
140
+
141
+ - If you want to implement server-side processing, please refer to ```sample_server_time```.
142
+
143
+ ```python
144
+ from cmdbox.app import common, client, feature
145
+ from cmdbox.app.commons import redis_client
146
+ from cmdbox.app.options import Options
147
+ from pathlib import Path
148
+ from typing import Dict, Any, Tuple, Union, List
149
+ import argparse
150
+ import datetime
151
+ import logging
152
+
153
+
154
+ class ServerTime(feature.Feature):
155
+ def get_mode(self) -> Union[str, List[str]]:
156
+ return "server"
157
+
158
+ def get_cmd(self):
159
+ return 'time'
160
+
161
+ def get_option(self):
162
+ return dict(
163
+ type=Options.T_STR, default=None, required=False, multi=False, hide=False, use_redis=self.USE_REDIS_FALSE,
164
+ discription_ja="サーバー側の現在時刻を表示します。",
165
+ discription_en="Displays the current time at the server side.",
166
+ choice=[
167
+ dict(opt="host", type=Options.T_STR, default=self.default_host, required=True, multi=False, hide=True, choice=None,
168
+ discription_ja="Redisサーバーのサービスホストを指定します。",
169
+ discription_en="Specify the service host of the Redis server."),
170
+ dict(opt="port", type=Options.T_INT, default=self.default_port, required=True, multi=False, hide=True, choice=None,
171
+ discription_ja="Redisサーバーのサービスポートを指定します。",
172
+ discription_en="Specify the service port of the Redis server."),
173
+ dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None,
174
+ discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
175
+ discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
176
+ dict(opt="svname", type=Options.T_STR, default="server", required=True, multi=False, hide=True, choice=None,
177
+ discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
178
+ discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
179
+ dict(opt="timedelta", type=Options.T_INT, default=9, required=False, multi=False, hide=False, choice=None,
180
+ discription_ja="時差の時間数を指定します。",
181
+ discription_en="Specify the number of hours of time difference."),
182
+ dict(opt="retry_count", type=Options.T_INT, default=3, required=False, multi=False, hide=True, choice=None,
183
+ discription_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
184
+ discription_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
185
+ dict(opt="retry_interval", type=Options.T_INT, default=5, required=False, multi=False, hide=True, choice=None,
186
+ discription_ja="Redisサーバーに再接続までの秒数を指定します。",
187
+ discription_en="Specifies the number of seconds before reconnecting to the Redis server."),
188
+ dict(opt="timeout", type=Options.T_INT, default="15", required=False, multi=False, hide=True, choice=None,
189
+ discription_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
190
+ discription_en="Specify the maximum waiting time until the server responds."),
191
+ ])
192
+
193
+ def get_svcmd(self):
194
+ return 'server_time'
195
+
196
+ def apprun(self, logger:logging.Logger, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[int, Dict[str, Any], Any]:
197
+ cl = client.Client(logger, redis_host=args.host, redis_port=args.port, redis_password=args.password, svname=args.svname)
198
+ ret = cl.redis_cli.send_cmd(self.get_svcmd(), [str(args.timedelta)],
199
+ retry_count=args.retry_count, retry_interval=args.retry_interval, timeout=args.timeout)
200
+ common.print_format(ret, args.format, tm, args.output_json, args.output_json_append, pf=pf)
201
+ if 'success' not in ret:
202
+ return 1, ret, None
203
+ return 0, ret, None
204
+
205
+ def is_cluster_redirect(self):
206
+ return False
207
+
208
+ def svrun(self, data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient, msg:List[str],
209
+ sessions:Dict[str, Dict[str, Any]]) -> int:
210
+ td = 9 if msg[2] == None else int(msg[2])
211
+ tz = datetime.timezone(datetime.timedelta(hours=td))
212
+ dt = datetime.datetime.now(tz)
213
+ ret = dict(success=dict(data=dt.strftime('%Y-%m-%d %H:%M:%S')))
214
+ redis_cli.rpush(msg[1], ret)
215
+ return self.RESP_SCCESS
216
+
217
+ def edgerun(self, opt, tool, logger, timeout, prevres = None):
218
+ status, res = tool.exec_cmd(opt, logger, timeout, prevres)
219
+ tool.notify(res)
220
+ yield 1, res
221
+ ```
222
+
223
+ - Open the file ```sample/extensions/features.yml```. The file should look something like this.
224
+ - This file specifies where new commands are to be read.
225
+ - For example, if you want to add a package to read, add a new ```package``` and ```prefix``` to ```features.cli```.
226
+ - Note that ```features.web``` can be used to add a new web screen.
227
+ - If you only want to call commands added in ```features.cli``` via RESTAPI, no additional implementation is needed in ```features.web```.
228
+
229
+
230
+ ```yml
231
+ features:
232
+ cli: # Specify a list of package names in which the module implementing the command is located.
233
+ - package: cmdbox.app.features.cli # Package Name. Classes inheriting from cmdbox.app.feature.Feature.
234
+ prefix: cmdbox_ # Module name prefix. Modules that begin with this letter are eligible.
235
+ exclude_modules: [] # Specify the module name to exclude from the list of modules to be loaded.
236
+ web: # Specify a list of package names with modules that implement web screens and RESTAPIs.
237
+ - package: cmdbox.app.features.web # Package Name. Classes inheriting from cmdbox.app.feature.WebFeature .
238
+ prefix: cmdbox_web_ # Module name prefix. Modules that begin with this letter are eligible.
239
+ args: # Specifies default or forced arguments for the specified command.
240
+ cli: # Specify rules to apply default values or force arguments.
241
+ - rule: # Specify the rules for applying default values and forced arguments for each command line option.
242
+ # e.g. mode: web
243
+ default: # Specify a default value for each item to be set when a rule is matched.
244
+ # e.g. doc_root: f"{Path(self.ver.__file__).parent / 'web'}"
245
+ coercion: # Specify a coercion value for each item to be set when a rule is matched.
246
+ # e.g. doc_root: f"{Path(self.ver.__file__).parent / 'web'}"
247
+ aliases: # Specify the alias for the specified command.
248
+ cli: # Specify the alias for the command line.
249
+ - source: # Specifies the command from which the alias originates.
250
+ mode: # Specify the mode of the source command. The exact match "mode" is selected.
251
+ # e.g. client
252
+ cmd: # Specify the source command to be aliased. The regex match "cmd" is selected.
253
+ # e.g. (.+)_(.+)
254
+ target: # Specifies the command to be aliased to.
255
+ mode: # Specify the mode of the target command. Create an alias for this “mode”.
256
+ # e.g. CLIENT
257
+ cmd: # Specify the target command to be aliased. Create an alias for this “cmd”, referring to the regular expression group of source by "{n}".
258
+ # e.g. {2}_{1}
259
+ move: # Specify whether to move the regular expression group of the source to the target.
260
+ # e.g. true
261
+ web: # Specify the alias for the RESTAPI.
262
+ - source: # Specifies the RESTAPI from which the alias originates.
263
+ path: # Specify the path of the source RESTAPI. The regex match "path" is selected.
264
+ # e.g. /exec_(.+)
265
+ target: # Specifies the RESTAPI to be aliased to.
266
+ path: # Specify the path of the target RESTAPI. Create an alias for this “path”, referring to the regular expression group of source by "{n}".
267
+ # e.g. /{1}_exec
268
+ move: # Specify whether to move the regular expression group of the source to the target.
269
+ # e.g. true
270
+ audit:
271
+ enabled: true # Specify whether to enable the audit function.
272
+ feature:
273
+ mode: audit # Specify the mode of the feature to be audited.
274
+ cmd: write # Specify the command to be audited.
275
+ options: # Specify the options for the audit function.
276
+ host: localhost # Specify the service host of the audit Redis server.
277
+ port: 6379 # Specify the service port of the audit Redis server.
278
+ password: password # Specify the access password of the audit Redis server.
279
+ svname: server # Specify the audit service name of the inference server.
280
+ retry_count: 3 # Specifies the number of reconnections to the audit Redis server.If less than 0 is specified, reconnection is forever.
281
+ retry_interval: 1 # Specifies the number of seconds before reconnecting to the audit Redis server.
282
+ timeout: 1 # Specify the maximum waiting time until the server responds.
283
+ pg_enabled: False # Specify True if using the postgresql database server.
284
+ pg_host: localhost # Specify the postgresql host.
285
+ pg_port: 5432 # Specify the postgresql port.
286
+ pg_user: postgres # Specify the postgresql user name.
287
+ pg_password: password # Specify the postgresql password.
288
+ pg_dbname: audit # Specify the postgresql database name.
289
+ retention_period_days: 365 # Specify the number of days to retain audit logs.
290
+
291
+ ```
292
+
293
+ - The following files should also be known when using commands on the web screen or RESTAPI.
294
+ - Open the file ```sample/extensions/user_list.yml```. The file should look something like this.
295
+ - This file manages the users and groups that are allowed Web access and their rules.
296
+ - The rule of the previous command is ```allow``` for users in the ```user``` group in ```cmdrule.rules```.
297
+
298
+
299
+ ```yml
300
+ users: # A list of users, each of which is a map that contains the following fields.
301
+ - uid: 1 # An ID that identifies a user. No two users can have the same ID.
302
+ name: admin # A name that identifies the user. No two users can have the same name.
303
+ password: XXXXXXXXXXX # The user's password. The value is hashed with the hash function specified in the next hash field.
304
+ hash: plain # The hash function used to hash the password, which can be plain, md5, sha1, or sha256, or oauth2.
305
+ groups: [admin] # A list of groups to which the user belongs, as specified in the groups field.
306
+ email: admin@aaa.bbb.jp # The email address of the user, used when authenticating using the provider specified in the oauth2 field.
307
+ - uid: 101
308
+ name: user01
309
+ password: XXXXXXXXXXX
310
+ hash: md5
311
+ groups: [user]
312
+ email: user01@aaa.bbb.jp
313
+ - uid: 102
314
+ name: user02
315
+ password: XXXXXXXXXXX
316
+ hash: sha1
317
+ groups: [readonly]
318
+ email: user02@aaa.bbb.jp
319
+ - uid: 103
320
+ name: user03
321
+ password: XXXXXXXXXXX
322
+ hash: sha256
323
+ groups: [editor]
324
+ email: user03@aaa.bbb.jp
325
+ groups: # A list of groups, each of which is a map that contains the following fields.
326
+ - gid: 1 # An ID that identifies a group. No two groups can have the same ID.
327
+ name: admin # A name that identifies the group. No two groups can have the same name.
328
+ - gid: 2
329
+ name: guest
330
+ - gid: 101
331
+ name: user
332
+ - gid: 102
333
+ name: readonly
334
+ parent: user # The parent group of the group. If the parent group is not specified, the group is a top-level group.
335
+ - gid: 103
336
+ name: editor
337
+ parent: user
338
+ cmdrule: # A list of command rules, Specify a rule that determines whether or not a command is executable when executed by a user in web mode.
339
+ policy: deny # Specify the default policy for the rule. The value can be allow or deny.
340
+ rules: # Specify rules to allow or deny execution of the command, depending on the group the user belongs to.
341
+ - groups: [admin]
342
+ rule: allow
343
+ - groups: [user] # Specify the groups to which the rule applies.
344
+ mode: client # Specify the "mode" as the condition for applying the rule.
345
+ cmds: [file_download, file_list, server_info] # Specify the "cmd" to which the rule applies. Multiple items can be specified in a list.
346
+ rule: allow # Specifies whether or not the specified command is allowed for the specified group. The value can be allow or deny.
347
+ - groups: [user]
348
+ mode: server
349
+ cmds: [list]
350
+ rule: allow
351
+ - groups: [user, guest]
352
+ mode: web
353
+ cmds: [genpass]
354
+ rule: allow
355
+ - groups: [editor]
356
+ mode: client
357
+ cmds: [file_copy, file_mkdir, file_move, file_remove, file_rmdir, file_upload]
358
+ rule: allow
359
+ pathrule: # List of RESTAPI rules, rules that determine whether or not a RESTAPI can be executed when a user in web mode accesses it.
360
+ policy: deny # Specify the default policy for the rule. The value can be allow or deny.
361
+ rules: # Specify rules to allow or deny execution of the RESTAPI, depending on the group the user belongs to.
362
+ - groups: [admin] # Specify the groups to which the rule applies.
363
+ paths: [/] # Specify the "path" to which the rule applies. Multiple items can be specified in a list.
364
+ rule: allow # Specifies whether or not the specified RESTAPI is allowed for the specified group. The value can be allow or deny.
365
+ - groups: [guest]
366
+ paths: [/signin, /assets, /copyright, /dosignin, /dosignout, /password/change,
367
+ /gui, /get_server_opt, /usesignout, /versions_cmdbox, /versions_used]
368
+ rule: allow
369
+ - groups: [user]
370
+ paths: [/signin, /assets, /bbforce_cmd, /copyright, /dosignin, /dosignout, /password/change,
371
+ /exec_cmd, /exec_pipe, /filer, /gui, /get_server_opt, /usesignout, /versions_cmdbox, /versions_used]
372
+ rule: allow
373
+ - groups: [readonly]
374
+ paths: [/gui/del_cmd, /gui/del_pipe, /gui/save_cmd, /gui/save_pipe]
375
+ rule: deny
376
+ - groups: [editor]
377
+ paths: [/gui/del_cmd, /gui/del_pipe, /gui/save_cmd, /gui/save_pipe]
378
+ rule: allow
379
+ password: # Password settings.
380
+ policy: # Password policy settings.
381
+ enabled: true # Specify whether or not to enable password policy.
382
+ not_same_before: true # Specify whether or not to allow the same password as the previous one.
383
+ min_length: 16 # Specify the minimum length of the password.
384
+ max_length: 64 # Specify the maximum length of the password.
385
+ min_lowercase: 1 # Specify the minimum number of lowercase letters in the password.
386
+ min_uppercase: 1 # Specify the minimum number of uppercase letters in the password.
387
+ min_digit: 1 # Specify the minimum number of digits in the password.
388
+ min_symbol: 1 # Specify the minimum number of symbol characters in the password.
389
+ not_contain_username: true # Specify whether or not to include the username in the password.
390
+ expiration: # Password expiration settings.
391
+ enabled: true # Specify whether or not to enable password expiration.
392
+ period: 90 # Specify the number of days after which the password will expire.
393
+ notify: 7 # Specify the number of days before the password expires that a notification will be sent.
394
+ lockout: # Account lockout settings.
395
+ enabled: true # Specify whether or not to enable account lockout.
396
+ threshold: 5 # Specify the number of failed login attempts before the account is locked.
397
+ reset: 30 # Specify the number of minutes after which the failed login count will be reset.
398
+ oauth2: # OAuth2 settings.
399
+ providers: # This is a per-provider setting for OAuth2.
400
+ google: # Google's OAuth2 configuration.
401
+ enabled: false # Specify whether to enable Google's OAuth2.
402
+ client_id: XXXXXXXXXXX # Specify Google's OAuth2 client ID.
403
+ client_secret: XXXXXXXXXXX # Specify Google's OAuth2 client secret.
404
+ redirect_uri: https://localhost:8443/oauth2/google/callback # Specify Google's OAuth2 redirect URI.
405
+ scope: ['email'] # Specify the scope you want to retrieve with Google's OAuth2. Usually, just reading the email is sufficient.
406
+ signin_module: # Specify the module name that implements the sign-in. see, cmdbox.app.signin.SignIn
407
+ note: # Specify a description such as Google's OAuth2 reference site.
408
+ - https://developers.google.com/identity/protocols/oauth2/web-server?hl=ja#httprest
409
+ github: # OAuth2 settings for GitHub.
410
+ enabled: false # Specify whether to enable OAuth2 for GitHub.
411
+ client_id: XXXXXXXXXXX # Specify the OAuth2 client ID for GitHub.
412
+ client_secret: XXXXXXXXXXX # Specify the GitHub OAuth2 client secret.
413
+ redirect_uri: https://localhost:8443/oauth2/github/callback # Specify the OAuth2 redirect URI for GitHub.
414
+ scope: ['user:email'] # Specify the scope you want to get from GitHub's OAuth2. Usually, just reading the email is sufficient.
415
+ signin_module: # Specify the module name that implements the sign-in. see, cmdbox.app.signin.SignIn
416
+ note: # Specify a description, such as a reference site for OAuth2 on GitHub.
417
+ - https://docs.github.com/ja/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#scopes
418
+ ```
419
+
420
+ - See the documentation for references to each file.
421
+ - Documentation is [here](https://hamacom2004jp.github.io/cmdbox/).
422
+
423
+
424
+ # Lisence
425
+
426
+ This project is licensed under the MIT License, see the LICENSE file for details
@@ -243,6 +243,27 @@ aliases: # Specify the alias for the specified co
243
243
  # e.g. /{1}_exec
244
244
  move: # Specify whether to move the regular expression group of the source to the target.
245
245
  # e.g. true
246
+ audit:
247
+ enabled: true # Specify whether to enable the audit function.
248
+ feature:
249
+ mode: audit # Specify the mode of the feature to be audited.
250
+ cmd: write # Specify the command to be audited.
251
+ options: # Specify the options for the audit function.
252
+ host: localhost # Specify the service host of the audit Redis server.
253
+ port: 6379 # Specify the service port of the audit Redis server.
254
+ password: password # Specify the access password of the audit Redis server.
255
+ svname: server # Specify the audit service name of the inference server.
256
+ retry_count: 3 # Specifies the number of reconnections to the audit Redis server.If less than 0 is specified, reconnection is forever.
257
+ retry_interval: 1 # Specifies the number of seconds before reconnecting to the audit Redis server.
258
+ timeout: 1 # Specify the maximum waiting time until the server responds.
259
+ pg_enabled: False # Specify True if using the postgresql database server.
260
+ pg_host: localhost # Specify the postgresql host.
261
+ pg_port: 5432 # Specify the postgresql port.
262
+ pg_user: postgres # Specify the postgresql user name.
263
+ pg_password: password # Specify the postgresql password.
264
+ pg_dbname: audit # Specify the postgresql database name.
265
+ retention_period_days: 365 # Specify the number of days to retain audit logs.
266
+
246
267
  ```
247
268
 
248
269
  - The following files should also be known when using commands on the web screen or RESTAPI.
@@ -67,6 +67,7 @@ class CmdBoxApp:
67
67
  self.options.load_svcmd(pn, prefix=self.cli_features_prefix[i], excludes=[], appcls=self.appcls, ver=self.ver, logger=self.default_logger)
68
68
  self.options.load_features_file('cli', self.options.load_svcmd, self.appcls, self.ver, self.default_logger)
69
69
  self.options.load_features_aliases_cli(self.default_logger)
70
+ self.options.load_features_audit(self.default_logger)
70
71
  efeatureloadtime = time.perf_counter()
71
72
 
72
73
  # コマンド引数の生成
@@ -109,7 +110,7 @@ class CmdBoxApp:
109
110
  args_dict[key] = d
110
111
  # featuresの初期値を適用する
111
112
  self.options.load_features_args(args_dict)
112
- args = argparse.Namespace(**args_dict)
113
+ args = argparse.Namespace(**{k:common.chopdq(v) for k,v in args_dict.items()})
113
114
  eargsparsetime = time.perf_counter()
114
115
 
115
116
  ret = dict(success=f"Start command. {args}")
@@ -123,7 +124,7 @@ class CmdBoxApp:
123
124
 
124
125
  smakesampletime = time.perf_counter()
125
126
  common.mklogdir(args.data)
126
- common.copy_sample(args.data, ver=self.ver)
127
+ #common.copy_sample(args.data, ver=self.ver)
127
128
  common.copy_sample(Path.cwd(), ver=self.ver)
128
129
  emakesampletime = time.perf_counter()
129
130
 
@@ -152,6 +153,7 @@ class CmdBoxApp:
152
153
  pf.append(dict(key="app_argsparse", val=f"{eargsparsetime-sargsparsetime:.03f}s"))
153
154
  pf.append(dict(key="app_makesample", val=f"{emakesampletime-smakesampletime:.03f}s"))
154
155
  pf.append(dict(key="app_loggerinit", val=f"{eloggerinittime-sloggerinittime:.03f}s"))
156
+ self.options.audit_exec(args, logger, feat, audit_type=options.Options.AT_EVENT)
155
157
  status, ret, obj = common.exec_sync(feat.apprun, logger, args, smaintime, pf)
156
158
  return status, ret, obj
157
159
  else: