cmdbox 0.5.3__py3-none-any.whl → 0.5.3.1__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.
- cmdbox/app/feature.py +2 -0
- cmdbox/app/features/cli/audit_base.py +1 -1
- cmdbox/app/features/cli/cmdbox_audit_createdb.py +1 -1
- cmdbox/app/features/cli/cmdbox_audit_write.py +4 -0
- cmdbox/app/features/cli/cmdbox_client_file_copy.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_file_download.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_file_list.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_file_mkdir.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_file_move.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_file_remove.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_file_rmdir.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_file_upload.py +1 -1
- cmdbox/app/features/cli/cmdbox_client_server_info.py +1 -1
- cmdbox/app/features/cli/cmdbox_gui_start.py +1 -1
- cmdbox/app/features/cli/cmdbox_server_start.py +1 -1
- cmdbox/app/features/cli/cmdbox_server_stop.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_apikey_add.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_apikey_del.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_group_add.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_group_del.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_group_edit.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_group_list.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_start.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_user_add.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_user_del.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_user_edit.py +1 -1
- cmdbox/app/features/cli/cmdbox_web_user_list.py +1 -1
- cmdbox/app/features/web/cmdbox_web_audit.py +7 -1
- cmdbox/app/features/web/cmdbox_web_exec_cmd.py +2 -2
- cmdbox/app/options.py +9 -0
- cmdbox/app/server.py +15 -3
- cmdbox/extensions/features.yml +4 -4
- cmdbox/extensions/sample_project/sample/app/features/cli/sample_server_time.py +1 -1
- cmdbox/licenses/LICENSE.Jinja2.3.1.4(BSD License).txt +28 -0
- cmdbox/licenses/LICENSE.Pygments.2.18.0(BSD License).txt +25 -0
- cmdbox/licenses/LICENSE.Sphinx.8.1.3(BSD License).txt +31 -0
- cmdbox/licenses/LICENSE.anyio.4.6.2.post1(MIT License).txt +20 -0
- cmdbox/licenses/LICENSE.argcomplete.3.5.1(Apache Software License).txt +177 -0
- cmdbox/licenses/LICENSE.babel.2.16.0(BSD License).txt +27 -0
- cmdbox/licenses/LICENSE.certifi.2024.8.30(Mozilla Public License 2.0 (MPL 2.0)).txt +20 -0
- cmdbox/licenses/LICENSE.charset-normalizer.3.4.0(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.click.8.1.7(BSD License).txt +28 -0
- cmdbox/licenses/LICENSE.cryptography.43.0.3(Apache Software License; BSD License).txt +3 -0
- cmdbox/licenses/LICENSE.fastapi.0.115.5(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.importlib_metadata.8.5.0(Apache Software License).txt +202 -0
- cmdbox/licenses/LICENSE.keyring.25.5.0(MIT License).txt +17 -0
- cmdbox/licenses/LICENSE.more-itertools.10.5.0(MIT License).txt +19 -0
- cmdbox/licenses/LICENSE.nh3.0.2.18(MIT).txt +1 -0
- cmdbox/licenses/LICENSE.numpy.2.1.3(BSD License).txt +950 -0
- cmdbox/licenses/LICENSE.pillow.11.0.0(CMU License (MIT-CMU)).txt +1226 -0
- cmdbox/licenses/LICENSE.pkginfo.1.10.0(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.prettytable.3.12.0(BSD License).txt +30 -0
- cmdbox/licenses/LICENSE.pydantic.2.10.2(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.pydantic_core.2.27.1(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.python-dotenv.1.0.1(BSD License).txt +27 -0
- cmdbox/licenses/LICENSE.python-multipart.0.0.17(Apache Software License).txt +14 -0
- cmdbox/licenses/LICENSE.redis.5.2.0(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.rich.13.9.4(MIT License).txt +19 -0
- cmdbox/licenses/LICENSE.six.1.16.0(MIT License).txt +18 -0
- cmdbox/licenses/LICENSE.sphinx-intl.2.3.0(BSD License).txt +25 -0
- cmdbox/licenses/LICENSE.starlette.0.41.3(BSD License).txt +27 -0
- cmdbox/licenses/LICENSE.tomli.2.1.0(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.twine.5.1.1(Apache Software License).txt +174 -0
- cmdbox/licenses/LICENSE.typing_extensions.4.12.2(Python Software Foundation License).txt +279 -0
- cmdbox/licenses/LICENSE.urllib3.2.2.3(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.uvicorn.0.32.1(BSD License).txt +27 -0
- cmdbox/licenses/LICENSE.watchfiles.1.0.0(MIT License).txt +21 -0
- cmdbox/licenses/LICENSE.websockets.14.1(BSD License).txt +24 -0
- cmdbox/licenses/LICENSE.zope.interface.7.1.1(Zope Public License).txt +44 -0
- cmdbox/version.py +1 -1
- cmdbox/web/assets/cmdbox/audit.js +98 -34
- cmdbox/web/audit.html +69 -44
- {cmdbox-0.5.3.dist-info → cmdbox-0.5.3.1.dist-info}/METADATA +6 -6
- {cmdbox-0.5.3.dist-info → cmdbox-0.5.3.1.dist-info}/RECORD +78 -42
- {cmdbox-0.5.3.dist-info → cmdbox-0.5.3.1.dist-info}/LICENSE +0 -0
- {cmdbox-0.5.3.dist-info → cmdbox-0.5.3.1.dist-info}/WHEEL +0 -0
- {cmdbox-0.5.3.dist-info → cmdbox-0.5.3.1.dist-info}/entry_points.txt +0 -0
- {cmdbox-0.5.3.dist-info → cmdbox-0.5.3.1.dist-info}/top_level.txt +0 -0
cmdbox/app/feature.py
CHANGED
|
@@ -22,10 +22,12 @@ class Feature(object):
|
|
|
22
22
|
default_host:str = os.environ.get('REDIS_HOST', 'localhost')
|
|
23
23
|
default_port:int = int(os.environ.get('REDIS_PORT', '6379'))
|
|
24
24
|
default_pass:str = os.environ.get('REDIS_PASSWORD', 'password')
|
|
25
|
+
default_svname:str = os.environ.get('SVNAME', 'server')
|
|
25
26
|
|
|
26
27
|
def __init__(self, appcls, ver):
|
|
27
28
|
self.ver = ver
|
|
28
29
|
self.appcls = appcls
|
|
30
|
+
self.default_svname:str = ver.__appid__
|
|
29
31
|
|
|
30
32
|
def get_mode(self) -> Union[str, List[str]]:
|
|
31
33
|
"""
|
|
@@ -31,7 +31,7 @@ class AuditBase(feature.ResultEdgeFeature):
|
|
|
31
31
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
32
32
|
discription_ja=f"Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `{self.default_pass}` を使用します。",
|
|
33
33
|
discription_en=f"Specify the access password of the Redis server (optional). If omitted, `{self.default_pass}` is used."),
|
|
34
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
34
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
35
35
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
36
36
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
37
37
|
|
|
@@ -70,7 +70,7 @@ class AuditCreatedb(feature.UnsupportEdgeFeature):
|
|
|
70
70
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
71
71
|
discription_ja=f"Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `{self.default_pass}` を使用します。",
|
|
72
72
|
discription_en=f"Specify the access password of the Redis server (optional). If omitted, `{self.default_pass}` is used."),
|
|
73
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
73
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
74
74
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
75
75
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
76
76
|
dict(opt="retry_count", type=Options.T_INT, default=3, required=False, multi=False, hide=True, choice=None,
|
|
@@ -123,6 +123,8 @@ class AuditWrite(audit_base.AuditBase):
|
|
|
123
123
|
pg_password_b64 = convert.str2b64str(args.pg_password)
|
|
124
124
|
pg_dbname_b64 = convert.str2b64str(args.pg_dbname)
|
|
125
125
|
|
|
126
|
+
if logger.level == logging.DEBUG:
|
|
127
|
+
logger.debug(f"audit write args: {args}")
|
|
126
128
|
cl = client.Client(logger, redis_host=args.host, redis_port=args.port, redis_password=args.password, svname=args.svname)
|
|
127
129
|
cl.redis_cli.send_cmd(self.get_svcmd(),
|
|
128
130
|
[audit_type_b64, clmsg_id_b64, clmsg_date_b64, clmsg_src_b64, clmsg_title_b64, clmsg_user_b64, clmsg_body_b64, clmsg_tag_b64,
|
|
@@ -157,6 +159,8 @@ class AuditWrite(audit_base.AuditBase):
|
|
|
157
159
|
Returns:
|
|
158
160
|
int: 終了コード
|
|
159
161
|
"""
|
|
162
|
+
if logger.level == logging.DEBUG:
|
|
163
|
+
logger.debug(f"audit write svrun msg: {msg}")
|
|
160
164
|
audit_type = convert.b64str2str(msg[2])
|
|
161
165
|
clmsg_id = convert.b64str2str(msg[3])
|
|
162
166
|
clmsg_date = convert.b64str2str(msg[4])
|
|
@@ -47,7 +47,7 @@ class ClientFileCopy(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="from_path", type=Options.T_STR, default=None, required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientFileDownload(feature.OneshotEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="svpath", type=Options.T_STR, default="/", required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientFileList(feature.OneshotResultEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="svpath", type=Options.T_STR, default="/", required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientFileMkdir(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="svpath", type=Options.T_STR, default="/", required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientFileMove(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="from_path", type=Options.T_STR, default=None, required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientFileRemove(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="svpath", type=Options.T_STR, default="/", required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientFileRmdir(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="svpath", type=Options.T_STR, default="/", required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientFileUpload(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="svpath", type=Options.T_STR, default="/", required=True, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ClientServerInfo(feature.OneshotResultEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="retry_count", type=Options.T_INT, default=3, required=False, multi=False, hide=True, choice=None,
|
|
@@ -47,7 +47,7 @@ class GuiStart(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class ServerStart(feature.OneshotNotifyEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class ServerStop(feature.OneshotNotifyEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="retry_count", type=Options.T_INT, default=3, required=False, multi=False, hide=True, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebApikeyAdd(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebApikeyDel(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebGroupAdd(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebGroupDel(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebGroupEdit(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebGroupList(feature.OneshotResultEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -47,7 +47,7 @@ class WebStart(feature.UnsupportEdgeFeature):
|
|
|
47
47
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
48
48
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
49
49
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
50
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
50
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
51
51
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
52
52
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
53
53
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebUserAdd(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebUserDel(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebUserEdit(feature.UnsupportEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -46,7 +46,7 @@ class WebUserList(feature.OneshotResultEdgeFeature):
|
|
|
46
46
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
47
47
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
48
48
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
49
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
49
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
50
50
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
51
51
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
52
52
|
dict(opt="data", type=Options.T_FILE, default=common.HOME_DIR / f".{self.ver.__appid__}", required=False, multi=False, hide=False, choice=None,
|
|
@@ -41,9 +41,13 @@ class Audit(feature.WebFeature):
|
|
|
41
41
|
if web.signin.get_data() is None:
|
|
42
42
|
return dict(error='signin_file_data is None.')
|
|
43
43
|
if not hasattr(web.options, 'audit_search') or web.options.audit_search is None:
|
|
44
|
-
|
|
44
|
+
return dict(warn='audit feature is disabled.')
|
|
45
45
|
opt = await req.json()
|
|
46
46
|
opt = {**opt, **web.options.audit_search_args.copy()}
|
|
47
|
+
opt['host'] = web.redis_host
|
|
48
|
+
opt['port'] = web.redis_port
|
|
49
|
+
opt['password'] = web.redis_password
|
|
50
|
+
opt['svname'] = web.svname
|
|
47
51
|
args = argparse.Namespace(**{k:common.chopdq(v) for k,v in opt.items()})
|
|
48
52
|
status, ret_main, _ = web.options.audit_search.apprun(web.logger, args, time.perf_counter(), [])
|
|
49
53
|
if status != 0:
|
|
@@ -55,6 +59,8 @@ class Audit(feature.WebFeature):
|
|
|
55
59
|
signin = web.signin.check_signin(req, res)
|
|
56
60
|
if signin is not None:
|
|
57
61
|
return signin
|
|
62
|
+
if not hasattr(web.options, 'audit_search_args'):
|
|
63
|
+
return dict(warn='audit feature is disabled.')
|
|
58
64
|
return dict(success=web.options.audit_search_args)
|
|
59
65
|
|
|
60
66
|
def toolmenu(self, web:Web) -> Dict[str, Any]:
|
|
@@ -136,9 +136,9 @@ class ExecCmd(cmdbox_web_load_cmd.LoadCmd):
|
|
|
136
136
|
found = True
|
|
137
137
|
if not found or o not in loaded: continue
|
|
138
138
|
opt[o] = loaded[o]
|
|
139
|
-
if isinstance(feat, cmdbox_audit_write.AuditWrite) and o in _options.audit_write_args:
|
|
139
|
+
if isinstance(feat, cmdbox_audit_write.AuditWrite) and hasattr(_options, 'audit_write_args') and o in _options.audit_write_args:
|
|
140
140
|
opt[o] = _options.audit_write_args[o]
|
|
141
|
-
elif isinstance(feat, cmdbox_audit_search.AuditSearch) and o in _options.audit_search_args:
|
|
141
|
+
elif isinstance(feat, cmdbox_audit_search.AuditSearch) and hasattr(_options, 'audit_search_args') and o in _options.audit_search_args:
|
|
142
142
|
opt[o] = _options.audit_search_args[o]
|
|
143
143
|
except:
|
|
144
144
|
pass
|
cmdbox/app/options.py
CHANGED
|
@@ -713,6 +713,11 @@ class Options:
|
|
|
713
713
|
user (str): メッセージを発生させたユーザー名
|
|
714
714
|
kwargs (Any): 呼び出し元で使用しているキーワード引数
|
|
715
715
|
"""
|
|
716
|
+
if not hasattr(self, 'audit_write_args') or self.audit_write_args is None:
|
|
717
|
+
return
|
|
718
|
+
yml = self.features_yml_data
|
|
719
|
+
if yml is None or 'audit' not in yml or 'enabled' not in yml['audit'] or not yml['audit']['enabled']:
|
|
720
|
+
return
|
|
716
721
|
if not hasattr(self, 'audit_write') or self.audit_write is None:
|
|
717
722
|
raise Exception('audit write feature is not found.')
|
|
718
723
|
clmsg_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + common.get_tzoffset_str()
|
|
@@ -761,6 +766,10 @@ class Options:
|
|
|
761
766
|
else:
|
|
762
767
|
clmsg_body[key] = common.to_str(val, 100)
|
|
763
768
|
opt[key] = val
|
|
769
|
+
if hasattr(arg, 'redis_host'): opt['host'] = arg.redis_host
|
|
770
|
+
if hasattr(arg, 'redis_port'): opt['port'] = arg.redis_port
|
|
771
|
+
if hasattr(arg, 'redis_password'): opt['password'] = arg.redis_password
|
|
772
|
+
if hasattr(arg, 'svname'): opt['svname'] = arg.svname
|
|
764
773
|
if hasattr(arg, 'clmsg_id'): opt['clmsg_id'] = arg.clmsg_id
|
|
765
774
|
elif isinstance(arg, web.Web):
|
|
766
775
|
opt['host'] = arg.redis_host
|
cmdbox/app/server.py
CHANGED
|
@@ -133,6 +133,7 @@ class Server(filer.Filer):
|
|
|
133
133
|
|
|
134
134
|
while self.is_running:
|
|
135
135
|
try:
|
|
136
|
+
msg = None
|
|
136
137
|
# ブロッキングリストから要素を取り出す
|
|
137
138
|
ctime = time.time()
|
|
138
139
|
self.redis_cli.hset(self.redis_cli.hbname, 'ctime', ctime)
|
|
@@ -186,18 +187,29 @@ class Server(filer.Filer):
|
|
|
186
187
|
except exceptions.TimeoutError:
|
|
187
188
|
pass
|
|
188
189
|
except exceptions.ConnectionError as e:
|
|
189
|
-
self.logger.warning(f"Connection to the server was lost. {e}",
|
|
190
|
+
self.logger.warning(f"Connection to the server was lost. {e}", exc_info=True)
|
|
190
191
|
if not self.redis_cli.check_server(find_svname=False, retry_count=self.retry_count, retry_interval=self.retry_interval, outstatus=True):
|
|
191
192
|
self.is_running = False
|
|
192
193
|
break
|
|
193
194
|
except OSError as e:
|
|
194
|
-
self.logger.warning(f"OSError. {e}",
|
|
195
|
+
self.logger.warning(f"OSError. {e}. This message is not executable in the server environment. ({msg})", exc_info=True)
|
|
196
|
+
if msg is not None and len(msg) > 1:
|
|
197
|
+
self.redis_cli.rpush(msg[1], dict(warn=f"OSError. {e}. This message is not executable in the server environment. ({msg[0]})"))
|
|
198
|
+
error_cnt += 1
|
|
199
|
+
self.redis_cli.hset(self.redis_cli.hbname, 'error_cnt', error_cnt)
|
|
200
|
+
pass
|
|
201
|
+
except IndexError as e:
|
|
202
|
+
self.logger.warning(f"IndexError. {e}. The message received by the server is invalid. ({msg})", exc_info=True)
|
|
203
|
+
if msg is not None and len(msg) > 1:
|
|
204
|
+
self.redis_cli.rpush(msg[1], dict(warn=f"IndexError. {e}. The message received by the server is invalid. ({msg[0]})"))
|
|
205
|
+
error_cnt += 1
|
|
206
|
+
self.redis_cli.hset(self.redis_cli.hbname, 'error_cnt', error_cnt)
|
|
195
207
|
pass
|
|
196
208
|
except KeyboardInterrupt as e:
|
|
197
209
|
self.is_running = False
|
|
198
210
|
break
|
|
199
211
|
except Exception as e:
|
|
200
|
-
self.logger.warning(f"Unknown error occurred. {e}", exc_info=True)
|
|
212
|
+
self.logger.warning(f"Unknown error occurred. {e}. Service will be stopped due to unknown cause.({msg})", exc_info=True)
|
|
201
213
|
self.is_running = False
|
|
202
214
|
break
|
|
203
215
|
self.redis_cli.delete(self.redis_cli.svname)
|
cmdbox/extensions/features.yml
CHANGED
|
@@ -46,10 +46,10 @@ audit:
|
|
|
46
46
|
mode: audit # Specify the mode of the feature to be searched.
|
|
47
47
|
cmd: search # Specify the command to be searched.
|
|
48
48
|
options: # Specify the options for the audit function.
|
|
49
|
-
host: localhost # Specify the service host of the audit Redis server.
|
|
50
|
-
port: 6379 # Specify the service port of the audit Redis server.
|
|
51
|
-
password: password # Specify the access password of the audit Redis server.
|
|
52
|
-
svname:
|
|
49
|
+
host: localhost # Specify the service host of the audit Redis server.However, if it is specified as a command line argument, it is ignored.
|
|
50
|
+
port: 6379 # Specify the service port of the audit Redis server.However, if it is specified as a command line argument, it is ignored.
|
|
51
|
+
password: password # Specify the access password of the audit Redis server.However, if it is specified as a command line argument, it is ignored.
|
|
52
|
+
svname: cmdbox # Specify the audit service name of the inference server.However, if it is specified as a command line argument, it is ignored.
|
|
53
53
|
retry_count: 3 # Specifies the number of reconnections to the audit Redis server.If less than 0 is specified, reconnection is forever.
|
|
54
54
|
retry_interval: 1 # Specifies the number of seconds before reconnecting to the audit Redis server.
|
|
55
55
|
timeout: 15 # Specify the maximum waiting time until the server responds.
|
|
@@ -48,7 +48,7 @@ class ServerTime(feature.Feature):
|
|
|
48
48
|
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None,
|
|
49
49
|
discription_ja="Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `password` を使用します。",
|
|
50
50
|
discription_en="Specify the access password of the Redis server (optional). If omitted, `password` is used."),
|
|
51
|
-
dict(opt="svname", type=Options.T_STR, default=
|
|
51
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None,
|
|
52
52
|
discription_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
53
53
|
discription_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
54
54
|
dict(opt="timedelta", type=Options.T_INT, default=9, required=False, multi=False, hide=False, choice=None,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Copyright 2007 Pallets
|
|
2
|
+
|
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
|
4
|
+
modification, are permitted provided that the following conditions are
|
|
5
|
+
met:
|
|
6
|
+
|
|
7
|
+
1. Redistributions of source code must retain the above copyright
|
|
8
|
+
notice, this list of conditions and the following disclaimer.
|
|
9
|
+
|
|
10
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
11
|
+
notice, this list of conditions and the following disclaimer in the
|
|
12
|
+
documentation and/or other materials provided with the distribution.
|
|
13
|
+
|
|
14
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
15
|
+
contributors may be used to endorse or promote products derived from
|
|
16
|
+
this software without specific prior written permission.
|
|
17
|
+
|
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
19
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
20
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
21
|
+
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
22
|
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
23
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
|
24
|
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
25
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
26
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
27
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
28
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Copyright (c) 2006-2022 by the respective authors (see AUTHORS file).
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
|
5
|
+
modification, are permitted provided that the following conditions are
|
|
6
|
+
met:
|
|
7
|
+
|
|
8
|
+
* Redistributions of source code must retain the above copyright
|
|
9
|
+
notice, this list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
* Redistributions in binary form must reproduce the above copyright
|
|
12
|
+
notice, this list of conditions and the following disclaimer in the
|
|
13
|
+
documentation and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
16
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
17
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
18
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
19
|
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
20
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
21
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
22
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
23
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
24
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
25
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
License for Sphinx
|
|
2
|
+
==================
|
|
3
|
+
|
|
4
|
+
Unless otherwise indicated, all code in the Sphinx project is licenced under the
|
|
5
|
+
two clause BSD licence below.
|
|
6
|
+
|
|
7
|
+
Copyright (c) 2007-2024 by the Sphinx team (see AUTHORS file).
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions are
|
|
12
|
+
met:
|
|
13
|
+
|
|
14
|
+
* Redistributions of source code must retain the above copyright
|
|
15
|
+
notice, this list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
* Redistributions in binary form must reproduce the above copyright
|
|
18
|
+
notice, this list of conditions and the following disclaimer in the
|
|
19
|
+
documentation and/or other materials provided with the distribution.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
24
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
25
|
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
26
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
27
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
28
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
29
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
30
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
31
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2018 Alex Grönholm
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|