cmdbox 0.6.4.2__py3-none-any.whl → 0.6.6__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.

Potentially problematic release.


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

Files changed (140) hide show
  1. cmdbox/app/app.py +7 -0
  2. cmdbox/app/client.py +384 -383
  3. cmdbox/app/common.py +85 -7
  4. cmdbox/app/commons/convert.py +3 -1
  5. cmdbox/app/edge.py +12 -12
  6. cmdbox/app/feature.py +1 -1
  7. cmdbox/app/features/cli/{cmdbox_vision_install.py → _cmdbox_vision_install.py} +2 -10
  8. cmdbox/app/features/cli/_cmdbox_vision_predict.py +487 -0
  9. cmdbox/app/features/cli/{cmdbox_vision_start.py → _cmdbox_vision_start.py} +5 -1
  10. cmdbox/app/features/cli/cmdbox_audit_createdb.py +1 -11
  11. cmdbox/app/features/cli/cmdbox_audit_delete.py +0 -9
  12. cmdbox/app/features/cli/cmdbox_audit_search.py +0 -9
  13. cmdbox/app/features/cli/cmdbox_audit_write.py +0 -9
  14. cmdbox/app/features/cli/cmdbox_cmd_list.py +3 -3
  15. cmdbox/app/features/cli/cmdbox_cmd_load.py +3 -3
  16. cmdbox/app/features/cli/cmdbox_excel_cell_details.py +436 -0
  17. cmdbox/app/features/cli/cmdbox_excel_cell_search.py +276 -0
  18. cmdbox/app/features/cli/cmdbox_excel_cell_values.py +258 -0
  19. cmdbox/app/features/cli/cmdbox_excel_sheet_list.py +159 -0
  20. cmdbox/app/features/cli/cmdbox_tts_install.py +4 -11
  21. cmdbox/app/features/cli/cmdbox_tts_say.py +2 -10
  22. cmdbox/app/features/cli/cmdbox_tts_start.py +0 -9
  23. cmdbox/app/features/cli/cmdbox_tts_stop.py +0 -9
  24. cmdbox/app/features/cli/cmdbox_web_apikey_add.py +3 -3
  25. cmdbox/app/features/cli/cmdbox_web_apikey_del.py +3 -3
  26. cmdbox/app/features/cli/cmdbox_web_group_add.py +3 -3
  27. cmdbox/app/features/cli/cmdbox_web_group_del.py +3 -3
  28. cmdbox/app/features/cli/cmdbox_web_group_edit.py +3 -3
  29. cmdbox/app/features/cli/cmdbox_web_group_list.py +3 -3
  30. cmdbox/app/features/cli/cmdbox_web_start.py +10 -10
  31. cmdbox/app/features/cli/cmdbox_web_user_add.py +3 -3
  32. cmdbox/app/features/cli/cmdbox_web_user_del.py +3 -3
  33. cmdbox/app/features/cli/cmdbox_web_user_edit.py +3 -3
  34. cmdbox/app/features/cli/cmdbox_web_user_list.py +3 -3
  35. cmdbox/app/features/cli/excel_base.py +301 -0
  36. cmdbox/app/features/web/cmdbox_web_exec_cmd.py +12 -14
  37. cmdbox/app/filer.py +5 -2
  38. cmdbox/app/mcp.py +4 -3
  39. cmdbox/app/options.py +8 -0
  40. cmdbox/app/web.py +58 -39
  41. cmdbox/extensions/features.yml +3 -0
  42. cmdbox/extensions/sample_project/sample/app/features/cli/sample_server_time.py +0 -9
  43. cmdbox/licenses/LICENSE_Mako_1_3_10_MIT_License.txt +19 -0
  44. cmdbox/licenses/LICENSE_alembic_1_16_5_UNKNOWN.txt +19 -0
  45. cmdbox/licenses/{LICENSE_cffi_1_17_1_MIT_License.txt → LICENSE_cffi_2_0_0_UNKNOWN.txt} +2 -5
  46. cmdbox/licenses/LICENSE_debugpy_1_8_17_MIT_License.txt +24 -0
  47. cmdbox/licenses/LICENSE_et_xmlfile_2_0_0_MIT_License.txt +298 -0
  48. cmdbox/licenses/LICENSE_fastuuid_0_13_5_BSD_License.txt +29 -0
  49. cmdbox/licenses/LICENSE_google-cloud-monitoring_2_27_2_Apache_Software_License.txt +202 -0
  50. cmdbox/licenses/LICENSE_google-cloud-spanner_3_58_0_Apache_Software_License.txt +202 -0
  51. cmdbox/licenses/LICENSE_google-genai_1_40_0_Apache_Software_License.txt +202 -0
  52. cmdbox/licenses/LICENSE_grpc-interceptor_0_15_4_MIT_License.txt +21 -0
  53. cmdbox/licenses/{LICENSE_lazy-object-proxy_1_11_0_BSD_License.txt → LICENSE_lazy-object-proxy_1_12_0_UNKNOWN.txt} +1 -1
  54. cmdbox/licenses/LICENSE_openpyxl_3_1_5_MIT_License.txt +23 -0
  55. cmdbox/licenses/LICENSE_opentelemetry-exporter-otlp-proto-common_1_37_0_UNKNOWN.txt +201 -0
  56. cmdbox/licenses/LICENSE_opentelemetry-exporter-otlp-proto-http_1_37_0_UNKNOWN.txt +201 -0
  57. cmdbox/licenses/LICENSE_opentelemetry-proto_1_37_0_UNKNOWN.txt +201 -0
  58. cmdbox/licenses/LICENSE_opentelemetry-sdk_1_37_0_UNKNOWN.txt +201 -0
  59. cmdbox/licenses/LICENSE_opentelemetry-semantic-conventions_0_58b0_UNKNOWN.txt +201 -0
  60. cmdbox/licenses/LICENSE_sqlalchemy-spanner_1_16_0_Apache_Software_License.txt +202 -0
  61. cmdbox/licenses/LICENSE_sqlparse_0_5_3_BSD_License.txt +25 -0
  62. cmdbox/licenses/{LICENSE_uvicorn_0_35_0_BSD_License.txt → LICENSE_uvicorn_0_37_0_BSD_License.txt} +2 -1
  63. cmdbox/licenses/files.txt +82 -71
  64. cmdbox/version.py +2 -2
  65. cmdbox/web/assets/cmdbox/svgicon.js +9 -0
  66. {cmdbox-0.6.4.2.dist-info → cmdbox-0.6.6.dist-info}/METADATA +29 -29
  67. {cmdbox-0.6.4.2.dist-info → cmdbox-0.6.6.dist-info}/RECORD +133 -117
  68. cmdbox/app/features/cli/cmdbox_vision_predict.py +0 -192
  69. cmdbox/licenses/LICENSE_APScheduler_3_11_0_MIT_License.txt +0 -19
  70. cmdbox/licenses/LICENSE_backoff_2_2_1_MIT_License.txt +0 -21
  71. cmdbox/licenses/LICENSE_fastapi-sso_0_18_0_MIT_License.txt +0 -21
  72. cmdbox/licenses/LICENSE_litellm-enterprise_0_1_19_UNKNOWN.txt +0 -37
  73. cmdbox/licenses/LICENSE_oauthlib_3_3_1_BSD-3-Clause.txt +0 -27
  74. cmdbox/licenses/LICENSE_orjson_3_11_1_Apache_Software_License-MIT_License.txt +0 -201
  75. /cmdbox/licenses/{LICENSE_Authlib_1_6_1_BSD_License.txt → LICENSE_Authlib_1_6_5_BSD_License.txt} +0 -0
  76. /cmdbox/licenses/{LICENSE_MarkupSafe_3_0_2_BSD_License.txt → LICENSE_MarkupSafe_3_0_3_UNKNOWN.txt} +0 -0
  77. /cmdbox/licenses/{LICENSE_PyYAML_6_0_2_MIT_License.txt → LICENSE_PyYAML_6_0_3_MIT_License.txt} +0 -0
  78. /cmdbox/licenses/{LICENSE_anyio_4_10_0_UNKNOWN.txt → LICENSE_anyio_4_11_0_UNKNOWN.txt} +0 -0
  79. /cmdbox/licenses/{LICENSE_cachetools_5_5_2_MIT_License.txt → LICENSE_cachetools_6_2_0_MIT_License.txt} +0 -0
  80. /cmdbox/licenses/{LICENSE_click_8_2_1_UNKNOWN.txt → LICENSE_click_8_3_0_UNKNOWN.txt} +0 -0
  81. /cmdbox/licenses/{LICENSE_cryptography_45_0_6_Apache-2_0_OR_BSD-3-Clause.txt → LICENSE_cryptography_46_0_2_UNKNOWN.txt} +0 -0
  82. /cmdbox/licenses/{LICENSE_cyclopts_3_22_5_Apache_Software_License.txt → LICENSE_cyclopts_3_24_0_Apache_Software_License.txt} +0 -0
  83. /cmdbox/licenses/{LICENSE_dnspython_2_7_0_ISC_License-ISCL.txt → LICENSE_dnspython_2_8_0_ISC_License-ISCL.txt} +0 -0
  84. /cmdbox/licenses/{LICENSE_email_validator_2_2_0_The_Unlicense-Unlicense.txt → LICENSE_email-validator_2_3_0_The_Unlicense-Unlicense.txt} +0 -0
  85. /cmdbox/licenses/{LICENSE_fastapi_0_116_1_MIT_License.txt → LICENSE_fastapi_0_118_0_MIT_License.txt} +0 -0
  86. /cmdbox/licenses/{LICENSE_fastmcp_2_11_3_Apache_Software_License.txt → LICENSE_fastmcp_2_12_4_Apache_Software_License.txt} +0 -0
  87. /cmdbox/licenses/{LICENSE_filelock_3_18_0_The_Unlicense-Unlicense.txt → LICENSE_filelock_3_19_1_The_Unlicense-Unlicense.txt} +0 -0
  88. /cmdbox/licenses/{LICENSE_fsspec_2025_7_0_BSD_License.txt → LICENSE_fsspec_2025_9_0_UNKNOWN.txt} +0 -0
  89. /cmdbox/licenses/{LICENSE_gevent_25_5_1_MIT.txt → LICENSE_gevent_25_9_1_MIT.txt} +0 -0
  90. /cmdbox/licenses/{LICENSE_google-adk_1_10_0_Apache_Software_License.txt → LICENSE_google-adk_1_15_1_Apache_Software_License.txt} +0 -0
  91. /cmdbox/licenses/{LICENSE_google-api-core_2_25_1_Apache_Software_License.txt → LICENSE_google-api-core_2_25_2_Apache_Software_License.txt} +0 -0
  92. /cmdbox/licenses/{LICENSE_google-api-python-client_2_178_0_Apache_Software_License.txt → LICENSE_google-api-python-client_2_184_0_Apache_Software_License.txt} +0 -0
  93. /cmdbox/licenses/{LICENSE_google-auth_2_40_3_Apache_Software_License.txt → LICENSE_google-auth_2_41_1_Apache_Software_License.txt} +0 -0
  94. /cmdbox/licenses/{LICENSE_google-cloud-aiplatform_1_108_0_Apache_2_0.txt → LICENSE_google-cloud-aiplatform_1_119_0_Apache_2_0.txt} +0 -0
  95. /cmdbox/licenses/{LICENSE_google-cloud-bigquery_3_35_1_Apache_Software_License.txt → LICENSE_google-cloud-bigquery_3_38_0_Apache_Software_License.txt} +0 -0
  96. /cmdbox/licenses/{LICENSE_google-genai_1_29_0_Apache_Software_License.txt → LICENSE_google-cloud-bigtable_2_32_0_Apache_Software_License.txt} +0 -0
  97. /cmdbox/licenses/{LICENSE_grpcio-status_1_74_0_Apache_Software_License.txt → LICENSE_grpcio-status_1_75_1_Apache_Software_License.txt} +0 -0
  98. /cmdbox/licenses/{LICENSE_grpcio_1_74_0_Apache_Software_License.txt → LICENSE_grpcio_1_75_1_Apache_Software_License.txt} +0 -0
  99. /cmdbox/licenses/{LICENSE_httplib2_0_22_0_MIT_License.txt → LICENSE_httplib2_0_31_0_MIT_License.txt} +0 -0
  100. /cmdbox/licenses/{LICENSE_huggingface-hub_0_34_4_Apache_Software_License.txt → LICENSE_huggingface-hub_0_35_3_Apache_Software_License.txt} +0 -0
  101. /cmdbox/licenses/{LICENSE_jaraco_functools_4_2_1_UNKNOWN.txt → LICENSE_jaraco_functools_4_3_0_UNKNOWN.txt} +0 -0
  102. /cmdbox/licenses/{LICENSE_jiter_0_10_0_MIT_License.txt → LICENSE_jiter_0_11_0_MIT_License.txt} +0 -0
  103. /cmdbox/licenses/{LICENSE_jsonschema-specifications_2025_4_1_UNKNOWN.txt → LICENSE_jsonschema-specifications_2025_9_1_UNKNOWN.txt} +0 -0
  104. /cmdbox/licenses/{LICENSE_jsonschema_4_25_0_UNKNOWN.txt → LICENSE_jsonschema_4_25_1_UNKNOWN.txt} +0 -0
  105. /cmdbox/licenses/{LICENSE_litellm_1_75_5_post1_MIT_License.txt → LICENSE_litellm_1_77_5_MIT_License.txt} +0 -0
  106. /cmdbox/licenses/{LICENSE_mcp_1_12_4_MIT_License.txt → LICENSE_mcp_1_16_0_MIT_License.txt} +0 -0
  107. /cmdbox/licenses/{LICENSE_more-itertools_10_7_0_MIT_License.txt → LICENSE_more-itertools_10_8_0_UNKNOWN.txt} +0 -0
  108. /cmdbox/licenses/{LICENSE_numpy_2_3_2_BSD_License.txt → LICENSE_numpy_2_3_3_BSD_License.txt} +0 -0
  109. /cmdbox/licenses/{LICENSE_openai_1_99_9_Apache_Software_License.txt → LICENSE_openai_2_1_0_Apache_Software_License.txt} +0 -0
  110. /cmdbox/licenses/{LICENSE_opentelemetry-api_1_36_0_UNKNOWN.txt → LICENSE_opentelemetry-api_1_37_0_UNKNOWN.txt} +0 -0
  111. /cmdbox/licenses/{LICENSE_opentelemetry-sdk_1_36_0_UNKNOWN.txt → LICENSE_opentelemetry-exporter-gcp-logging_1_9_0a0_Apache_Software_License.txt} +0 -0
  112. /cmdbox/licenses/{LICENSE_opentelemetry-semantic-conventions_0_57b0_UNKNOWN.txt → LICENSE_opentelemetry-exporter-gcp-monitoring_1_9_0a0_Apache_Software_License.txt} +0 -0
  113. /cmdbox/licenses/{LICENSE_prompt_toolkit_3_0_51_BSD_License.txt → LICENSE_prompt_toolkit_3_0_52_BSD_License.txt} +0 -0
  114. /cmdbox/licenses/{LICENSE_protobuf_6_31_1_3-Clause_BSD_License.txt → LICENSE_protobuf_6_32_1_3-Clause_BSD_License.txt} +0 -0
  115. /cmdbox/licenses/{LICENSE_psycopg-binary_3_2_9_GNU_Lesser_General_Public_License_v3-LGPLv3.txt → LICENSE_psycopg-binary_3_2_10_GNU_Lesser_General_Public_License_v3-LGPLv3.txt} +0 -0
  116. /cmdbox/licenses/{LICENSE_psycopg_3_2_9_GNU_Lesser_General_Public_License_v3-LGPLv3.txt → LICENSE_psycopg_3_2_10_GNU_Lesser_General_Public_License_v3-LGPLv3.txt} +0 -0
  117. /cmdbox/licenses/{LICENSE_pycparser_2_22_BSD_License.txt → LICENSE_pycparser_2_23_BSD_License.txt} +0 -0
  118. /cmdbox/licenses/{LICENSE_pydantic-settings_2_10_1_MIT_License.txt → LICENSE_pydantic-settings_2_11_0_MIT_License.txt} +0 -0
  119. /cmdbox/licenses/{LICENSE_pydantic_2_11_7_MIT_License.txt → LICENSE_pydantic_2_11_10_MIT_License.txt} +0 -0
  120. /cmdbox/licenses/{LICENSE_pyparsing_3_2_3_MIT_License.txt → LICENSE_pyparsing_3_2_5_UNKNOWN.txt} +0 -0
  121. /cmdbox/licenses/{LICENSE_pyperclip_1_9_0_BSD_License.txt → LICENSE_pyperclip_1_11_0_BSD_License.txt} +0 -0
  122. /cmdbox/licenses/{LICENSE_questionary_2_1_0_MIT_License.txt → LICENSE_questionary_2_1_1_MIT_License.txt} +0 -0
  123. /cmdbox/licenses/{LICENSE_regex_2025_7_34_UNKNOWN.txt → LICENSE_regex_2025_9_18_UNKNOWN.txt} +0 -0
  124. /cmdbox/licenses/{LICENSE_requests_2_32_4_Apache_Software_License.txt → LICENSE_requests_2_32_5_Apache_Software_License.txt} +0 -0
  125. /cmdbox/licenses/{LICENSE_rpds-py_0_27_0_UNKNOWN.txt → LICENSE_rpds-py_0_27_1_UNKNOWN.txt} +0 -0
  126. /cmdbox/licenses/{LICENSE_shapely_2_1_1_BSD_License.txt → LICENSE_shapely_2_1_2_BSD_License.txt} +0 -0
  127. /cmdbox/licenses/{LICENSE_sphinx-sitemap_2_7_2_UNKNOWN.txt → LICENSE_sphinx-sitemap_2_8_0_UNKNOWN.txt} +0 -0
  128. /cmdbox/licenses/{LICENSE_starlette_0_47_2_BSD_License.txt → LICENSE_starlette_0_48_0_BSD_License.txt} +0 -0
  129. /cmdbox/licenses/{LICENSE_tenacity_9_1_2_Apache_Software_License.txt → LICENSE_tenacity_8_5_0_Apache_Software_License.txt} +0 -0
  130. /cmdbox/licenses/{LICENSE_tokenizers_0_21_4_Apache_Software_License.txt → LICENSE_tokenizers_0_22_1_Apache_Software_License.txt} +0 -0
  131. /cmdbox/licenses/{LICENSE_twine_6_1_0_Apache_Software_License.txt → LICENSE_twine_6_2_0_UNKNOWN.txt} +0 -0
  132. /cmdbox/licenses/{LICENSE_typing-inspection_0_4_1_UNKNOWN.txt → LICENSE_typing-inspection_0_4_2_UNKNOWN.txt} +0 -0
  133. /cmdbox/licenses/{LICENSE_typing_extensions_4_14_1_UNKNOWN.txt → LICENSE_typing_extensions_4_15_0_UNKNOWN.txt} +0 -0
  134. /cmdbox/licenses/{LICENSE_wcwidth_0_2_13_MIT_License.txt → LICENSE_wcwidth_0_2_14_MIT_License.txt} +0 -0
  135. /cmdbox/licenses/{LICENSE_zope_event_5_1_1_Zope_Public_License.txt → LICENSE_zope_event_6_0_Zope_Public_License.txt} +0 -0
  136. /cmdbox/licenses/{LICENSE_zope_interface_7_2_Zope_Public_License.txt → LICENSE_zope_interface_8_0_1_Zope_Public_License.txt} +0 -0
  137. {cmdbox-0.6.4.2.dist-info → cmdbox-0.6.6.dist-info}/WHEEL +0 -0
  138. {cmdbox-0.6.4.2.dist-info → cmdbox-0.6.6.dist-info}/entry_points.txt +0 -0
  139. {cmdbox-0.6.4.2.dist-info → cmdbox-0.6.6.dist-info}/licenses/LICENSE +0 -0
  140. {cmdbox-0.6.4.2.dist-info → cmdbox-0.6.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,159 @@
1
+ from cmdbox.app import common, filer
2
+ from cmdbox.app.commons import convert, redis_client
3
+ from cmdbox.app.features.cli import excel_base
4
+ from cmdbox.app.options import Options
5
+ from pathlib import Path
6
+ from typing import Dict, Any, List, Tuple
7
+ import argparse
8
+ import logging
9
+ import json
10
+
11
+
12
+ class ExcelSheetList(excel_base.ExcelBase):
13
+ def get_cmd(self):
14
+ """
15
+ この機能のコマンドを返します
16
+
17
+ Returns:
18
+ str: コマンド
19
+ """
20
+ return 'sheet_list'
21
+
22
+ def get_option(self):
23
+ """
24
+ この機能のオプションを返します
25
+
26
+ Returns:
27
+ Dict[str, Any]: オプション
28
+ """
29
+ opt = super().get_option()
30
+ opt['description_ja'] = "データフォルダ配下のExcelファイルのシート一覧を取得します。"
31
+ opt['description_en'] = "Retrieves the list of sheets in an Excel file located within the data folder."
32
+ return opt
33
+
34
+ def chk_args(self, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[bool, str, Any]:
35
+ """
36
+ 引数のチェックを行います
37
+
38
+ Args:
39
+ args (argparse.Namespace): 引数
40
+
41
+ Returns:
42
+ Tuple[bool, str]: チェック結果, メッセージ
43
+ """
44
+ if args.svname is None:
45
+ msg = dict(warn=f"Please specify the --svname option.")
46
+ common.print_format(msg, args.format, tm, args.output_json, args.output_json_append, pf=pf)
47
+ return self.RESP_WARN, msg, None
48
+ if args.scope is None:
49
+ msg = dict(warn=f"Please specify the --scope option.")
50
+ common.print_format(msg, args.format, tm, args.output_json, args.output_json_append, pf=pf)
51
+ return self.RESP_WARN, msg, None
52
+ if args.svpath is None:
53
+ msg = dict(warn=f"Please specify the --svpath option.")
54
+ common.print_format(msg, args.format, tm, args.output_json, args.output_json_append, pf=pf)
55
+ return self.RESP_WARN, msg, None
56
+ return self.RESP_SUCCESS, None, None
57
+
58
+ def excel_proc(self, abspath:Path, args:argparse.Namespace, logger:logging.Logger, tm:float, pf:List[Dict[str, float]]=[]) -> Dict[str, Any]:
59
+ """
60
+ Excel処理のベース
61
+
62
+ Args:
63
+ abspath (Path): Excelファイルの絶対パス
64
+ args (argparse.Namespace): 引数
65
+ logger (logging.Logger): ロガー
66
+ tm (float): 処理時間
67
+ pf (List[Dict[str, float]]): パフォーマンス情報
68
+
69
+ Returns:
70
+ Dict[str, Any]: 結果
71
+ """
72
+ res_json = self.sheet_list(abspath, logger)
73
+ return res_json
74
+
75
+ def get_svparam(self, args:argparse.Namespace) -> List[str]:
76
+ """
77
+ サーバーに送信するパラメーターを返します
78
+
79
+ Args:
80
+ args (argparse.Namespace): 引数
81
+
82
+ Returns:
83
+ List[str]: サーバーに送信するパラメーター
84
+ """
85
+ ret = [convert.str2b64str(str(args.svpath))]
86
+ return ret
87
+
88
+ def is_cluster_redirect(self):
89
+ """
90
+ クラスター宛のメッセージの場合、メッセージを転送するかどうかを返します
91
+
92
+ Returns:
93
+ bool: メッセージを転送する場合はTrue
94
+ """
95
+ return False
96
+
97
+ def svrun(self, data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient, msg:List[str],
98
+ sessions:Dict[str, Dict[str, Any]]) -> int:
99
+ """
100
+ この機能のサーバー側の実行を行います
101
+
102
+ Args:
103
+ data_dir (Path): データディレクトリ
104
+ logger (logging.Logger): ロガー
105
+ redis_cli (redis_client.RedisClient): Redisクライアント
106
+ msg (List[str]): 受信メッセージ
107
+ sessions (Dict[str, Dict[str, Any]]): セッション情報
108
+
109
+ Returns:
110
+ int: 終了コード
111
+ """
112
+ svpath = convert.b64str2str(msg[2])
113
+
114
+ try:
115
+ f = filer.Filer(data_dir, logger)
116
+ chk, abspath, res = f._file_exists(svpath)
117
+ if not chk:
118
+ logger.warning(f"File not found. {svpath}")
119
+ redis_cli.rpush(msg[1], res)
120
+ return self.RESP_WARN
121
+ res = self.sheet_list(abspath, logger)
122
+ redis_cli.rpush(msg[1], res)
123
+ except Exception as e:
124
+ logger.warning(f"Failed to sheet list: {e}", exc_info=True)
125
+ redis_cli.rpush(msg[1], dict(warn=f"Failed to sheet list: {e}"))
126
+ return self.RESP_WARN
127
+ return self.RESP_SUCCESS
128
+
129
+ def sheet_list(self, filepath:str, logger:logging.Logger) -> Dict[str, Any]:
130
+ """
131
+ 指定したワークブックのシート一覧を取得します。
132
+
133
+ Args:
134
+ filepath (str): ワークブックのパス
135
+ logger (logging.Logger): ロガー
136
+ Returns:
137
+ dict: シートの情報
138
+ """
139
+ wb:Workbook = None
140
+ try:
141
+ from openpyxl.cell import Cell
142
+ from openpyxl.workbook.workbook import Workbook
143
+ from openpyxl.worksheet.worksheet import Worksheet
144
+ import openpyxl
145
+
146
+ wb:Workbook = openpyxl.load_workbook(filename=filepath, read_only=True)
147
+ sheetinfo = {}
148
+ for sheet in wb.worksheets:
149
+ sheetinfo[sheet.title] = dict(max_row=sheet.max_row, max_column=sheet.max_column, sheet_state=sheet.sheet_state)
150
+
151
+ res = dict(success=sheetinfo)
152
+ return res
153
+ except Exception as e:
154
+ msg = dict(warn=f"Failed to sheet list: {e}")
155
+ logger.warning(f"Failed to sheet list: {e}", exc_info=True)
156
+ return msg
157
+ finally:
158
+ if wb is not None:
159
+ wb.close()
@@ -98,15 +98,6 @@ class TtsInstall(feature.UnsupportEdgeFeature):
98
98
  description_en="Specify the wheel file for the TTS engine."),
99
99
  ]
100
100
  )
101
-
102
- def get_svcmd(self):
103
- """
104
- この機能のサーバー側のコマンドを返します
105
-
106
- Returns:
107
- str: サーバー側のコマンド
108
- """
109
- return 'tts_install'
110
101
 
111
102
  def apprun(self, logger:logging.Logger, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[int, Dict[str, Any], Any]:
112
103
  """
@@ -254,8 +245,9 @@ class TtsInstall(feature.UnsupportEdgeFeature):
254
245
  _msg = f"Failed to download VoiceVox core: {responce.status_code} {responce.reason}. {downloader_url}"
255
246
  logger.error(_msg, exc_info=True)
256
247
  return dict(warn=_msg)
257
- with open(dlfile, mode='wb') as f:
248
+ def _wd(f):
258
249
  f.write(responce.content)
250
+ common.save_file(dlfile, _wd, mode='wb')
259
251
  # ダウンローダーの実行権限を付与
260
252
  if voicevox_os != 'windows':
261
253
  dlfile.chmod(dlfile.stat().st_mode | 0o111)
@@ -296,8 +288,9 @@ class TtsInstall(feature.UnsupportEdgeFeature):
296
288
  _msg = f"Failed to download VoiceVox whl: {responce.status_code} {responce.reason}. {whl_url}"
297
289
  logger.error(_msg, exc_info=True)
298
290
  return dict(warn=_msg)
299
- with open(voicevox_whl, mode='wb') as f:
291
+ def _ww(f):
300
292
  f.write(responce.content)
293
+ common.save_file(voicevox_whl, _ww, mode='wb')
301
294
  # whlファイルをpipでインストール
302
295
  if logger.level == logging.DEBUG:
303
296
  logger.debug(f"pip install {voicevox_whl}")
@@ -81,23 +81,15 @@ class TtsSay(cmdbox_tts_start.TtsStart):
81
81
  if 'success' in ret and 'data' in ret['success']:
82
82
  wav_b64 = ret['success']['data']
83
83
  wav_data = convert.b64str2bytes(wav_b64)
84
- with open(args.tts_output, 'wb') as f:
84
+ def _w(f):
85
85
  f.write(wav_data)
86
+ common.save_file(args.tts_output, _w, mode='wb')
86
87
  del ret['success']['data'] # 音声データは削除
87
88
  common.print_format(ret, False, tm, None, False, pf=pf)
88
89
  if 'success' not in ret:
89
90
  return self.RESP_WARN, ret, cl
90
91
  return self.RESP_SUCCESS, ret, cl
91
92
 
92
- def get_svcmd(self):
93
- """
94
- この機能のサーバー側のコマンドを返します
95
-
96
- Returns:
97
- str: サーバー側のコマンド
98
- """
99
- return 'tts_say'
100
-
101
93
  def is_cluster_redirect(self):
102
94
  """
103
95
  クラスター宛のメッセージの場合、メッセージを転送するかどうかを返します
@@ -190,15 +190,6 @@ class TtsStart(feature.UnsupportEdgeFeature):
190
190
  description_en="Specify the model of the TTS engine to use."),
191
191
  ]
192
192
  )
193
-
194
- def get_svcmd(self):
195
- """
196
- この機能のサーバー側のコマンドを返します
197
-
198
- Returns:
199
- str: サーバー側のコマンド
200
- """
201
- return 'tts_start'
202
193
 
203
194
  def apprun(self, logger:logging.Logger, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[int, Dict[str, Any], Any]:
204
195
  """
@@ -28,15 +28,6 @@ class TtsStop(cmdbox_tts_start.TtsStart):
28
28
  opt['description_en'] = "Stops the Text-to-Speech (TTS) engine."
29
29
  return opt
30
30
 
31
- def get_svcmd(self):
32
- """
33
- この機能のサーバー側のコマンドを返します
34
-
35
- Returns:
36
- str: サーバー側のコマンド
37
- """
38
- return 'tts_stop'
39
-
40
31
  def svrun(self, data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient, msg:List[str],
41
32
  sessions:Dict[str, Dict[str, Any]]) -> int:
42
33
  """
@@ -43,9 +43,9 @@ class WebApikeyAdd(feature.UnsupportEdgeFeature):
43
43
  dict(opt="apikey_name", type=Options.T_STR, default=None, required=True, multi=False, hide=False, choice=None,
44
44
  description_ja="このユーザーのApiKey名を指定します。",
45
45
  description_en="Specify the ApiKey name for this user."),
46
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
47
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
48
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
46
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
47
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
48
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
49
49
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
50
50
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
51
51
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -43,9 +43,9 @@ class WebApikeyDel(feature.UnsupportEdgeFeature):
43
43
  dict(opt="apikey_name", type=Options.T_STR, default=None, required=True, multi=False, hide=False, choice=None,
44
44
  description_ja="このユーザーのApiKey名を指定します。",
45
45
  description_en="Specify the ApiKey name for this user."),
46
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
47
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
48
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
46
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=False, multi=False, hide=True, choice=None, fileio="in",
47
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
48
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
49
49
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
50
50
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
51
51
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -46,9 +46,9 @@ class WebGroupAdd(feature.UnsupportEdgeFeature):
46
46
  dict(opt="group_parent", type=Options.T_STR, default=None, required=False, multi=False, hide=False, choice=None,
47
47
  description_ja="親グループ名を指定します。",
48
48
  description_en="Specifies the parent group name."),
49
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
50
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
51
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
49
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
50
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
51
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
52
52
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
53
53
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
54
54
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -40,9 +40,9 @@ class WebGroupDel(feature.UnsupportEdgeFeature):
40
40
  dict(opt="group_id", type=Options.T_INT, default=None, required=True, multi=False, hide=False, choice=None,
41
41
  description_ja="グループIDを指定します。",
42
42
  description_en="Specify the group ID. Do not duplicate other groups."),
43
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
44
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
45
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
43
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
44
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
45
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
46
46
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
47
47
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
48
48
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -46,9 +46,9 @@ class WebGroupEdit(feature.UnsupportEdgeFeature):
46
46
  dict(opt="group_parent", type=Options.T_STR, default=None, required=False, multi=False, hide=False, choice=None,
47
47
  description_ja="親グループ名を指定します。",
48
48
  description_en="Specifies the parent group name."),
49
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
50
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
51
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
49
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
50
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
51
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
52
52
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
53
53
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
54
54
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -40,9 +40,9 @@ class WebGroupList(feature.UnsupportEdgeFeature):
40
40
  dict(opt="group_name", type=Options.T_STR, default=None, required=False, multi=False, hide=False, choice=None,
41
41
  description_ja="グループ名を指定して取得します。省略した時は全てのグループを取得します。",
42
42
  description_en="Retrieved by specifying a group name. If omitted, all groups are retrieved."),
43
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
44
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
45
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
43
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
44
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
45
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
46
46
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
47
47
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
48
48
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -78,9 +78,9 @@ class WebStart(feature.UnsupportEdgeFeature, agent_base.AgentBase):
78
78
  dict(opt="ssl_ca_certs", type=Options.T_FILE, default=None, required=False, multi=False, hide=True, choice=None, fileio="in",
79
79
  description_ja="SSLサーバーCA証明書ファイルを指定します。",
80
80
  description_en="Specify the SSL server CA certificate file."),
81
- dict(opt="signin_file", type=Options.T_FILE, default=None, required=False, multi=False, hide=True, choice=None, fileio="in",
82
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
83
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
81
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=False, multi=False, hide=False, choice=None, fileio="in",
82
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
83
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
84
84
  dict(opt="session_domain", type=Options.T_STR, default=None, required=False, multi=False, hide=True, choice=None,
85
85
  description_ja="サインインしたユーザーのセッションが有効なドメインを指定します。",
86
86
  description_en="Specify the domain for which the signed-in user's session is valid."),
@@ -93,12 +93,12 @@ class WebStart(feature.UnsupportEdgeFeature, agent_base.AgentBase):
93
93
  dict(opt="session_timeout", type=Options.T_INT, default="900", required=False, multi=False, hide=True, choice=None,
94
94
  description_ja="サインインしたユーザーのセッションタイムアウトの時間を秒で指定します。",
95
95
  description_en="Specify the session timeout in seconds for signed-in users."),
96
- dict(opt="guvicorn_workers", type=Options.T_INT, default=multiprocessing.cpu_count()*2, required=False, multi=False, hide=True, choice=None,
97
- description_ja="guvicornワーカー数を指定します。Linux環境でのみ有効です。-1又は未指定の場合はCPU数の2倍を使用します。",
98
- description_en="Specifies the number of guvicorn workers, valid only in Linux environment. If -1 or unspecified, twice the number of CPUs is used."),
99
- dict(opt="guvicorn_timeout", type=Options.T_INT, default=30, required=False, multi=False, hide=True, choice=None,
100
- description_ja="guvicornワーカーのタイムアウトの時間を秒で指定します。",
101
- description_en="Specify the timeout duration of the guvicorn worker in seconds."),
96
+ dict(opt="gunicorn_workers", type=Options.T_INT, default=multiprocessing.cpu_count()*2, required=False, multi=False, hide=True, choice=None,
97
+ description_ja="gunicornワーカー数を指定します。Linux環境でのみ有効です。-1又は未指定の場合はCPU数の2倍を使用します。",
98
+ description_en="Specifies the number of gunicorn workers, valid only in Linux environment. If -1 or unspecified, twice the number of CPUs is used."),
99
+ dict(opt="gunicorn_timeout", type=Options.T_INT, default=30, required=False, multi=False, hide=True, choice=None,
100
+ description_ja="gunicornワーカーのタイムアウトの時間を秒で指定します。",
101
+ description_en="Specify the timeout duration of the gunicorn worker in seconds."),
102
102
  dict(opt="client_only", type=Options.T_BOOL, default=False, required=False, multi=False, hide=True, choice=[True, False],
103
103
  description_ja="サーバーへの接続を行わないようにします。",
104
104
  description_en="Do not make connections to the server."),
@@ -232,5 +232,5 @@ class WebStart(feature.UnsupportEdgeFeature, agent_base.AgentBase):
232
232
  ssl_cert=args.ssl_cert, ssl_key=args.ssl_key, ssl_keypass=args.ssl_keypass, ssl_ca_certs=args.ssl_ca_certs,
233
233
  session_domain=args.session_domain, session_path=args.session_path,
234
234
  session_secure=args.session_secure, session_timeout=args.session_timeout,
235
- outputs_key=args.outputs_key, guvicorn_workers=args.guvicorn_workers, guvicorn_timeout=args.guvicorn_timeout,
235
+ outputs_key=args.outputs_key, gunicorn_workers=args.gunicorn_workers, gunicorn_timeout=args.gunicorn_timeout,
236
236
  agent_runner=agent_runner, mcp=mcp,)
@@ -55,9 +55,9 @@ class WebUserAdd(feature.UnsupportEdgeFeature):
55
55
  dict(opt="user_group", type=Options.T_STR, default=None, required=True, multi=True, hide=False, choice=None,
56
56
  description_ja="ユーザーが所属するグループを指定します。",
57
57
  description_en="Specifies the groups to which the user belongs."),
58
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
59
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
60
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
58
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
59
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
60
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
61
61
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
62
62
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
63
63
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -40,9 +40,9 @@ class WebUserDel(feature.UnsupportEdgeFeature):
40
40
  dict(opt="user_id", type=Options.T_INT, default=None, required=True, multi=False, hide=False, choice=None,
41
41
  description_ja="ユーザーIDを指定します。",
42
42
  description_en="Specify the user ID."),
43
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
44
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
45
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
43
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
44
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
45
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
46
46
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
47
47
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
48
48
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -55,9 +55,9 @@ class WebUserEdit(feature.UnsupportEdgeFeature):
55
55
  dict(opt="user_group", type=Options.T_STR, default=None, required=True, multi=True, hide=False, choice=None,
56
56
  description_ja="ユーザーが所属するグループを指定します。",
57
57
  description_en="Specifies the groups to which the user belongs."),
58
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
59
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
60
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
58
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
59
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
60
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
61
61
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
62
62
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
63
63
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),
@@ -40,9 +40,9 @@ class WebUserList(feature.UnsupportEdgeFeature):
40
40
  dict(opt="user_name", type=Options.T_STR, default=None, required=False, multi=False, hide=False, choice=None,
41
41
  description_ja="ユーザー名を指定して取得します。省略した時は全てのユーザーを取得します。",
42
42
  description_en="Retrieved by specifying a user name. If omitted, all users are retrieved."),
43
- dict(opt="signin_file", type=Options.T_FILE, default=f".{self.ver.__appid__}/user_list.yml", required=True, multi=False, hide=False, choice=None, fileio="in",
44
- description_ja="サインイン可能なユーザーとパスワードを記載したファイルを指定します。省略した時は認証を要求しません。",
45
- description_en="Specify a file containing users and passwords with which they can signin. If omitted, no authentication is required."),
43
+ dict(opt="signin_file", type=Options.T_FILE, default=None, required=True, multi=False, hide=False, choice=None, fileio="in",
44
+ description_ja=f"サインイン可能なユーザーとパスワードを記載したファイルを指定します。通常 '.{self.ver.__appid__}/user_list.yml' を指定します。",
45
+ description_en=f"Specify a file containing users and passwords with which they can signin.Typically, specify '.{self.ver.__appid__}/user_list.yml'."),
46
46
  dict(opt="stdout_log", type=Options.T_BOOL, default=True, required=False, multi=False, hide=True, choice=[True, False],
47
47
  description_ja="GUIモードでのみ使用可能です。コマンド実行時の標準出力をConsole logに出力します。",
48
48
  description_en="Available only in GUI mode. Outputs standard output during command execution to Console log."),