mcsmapi 0.1.6__py3-none-any.whl → 0.1.8b1__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.
- mcsmapi/__init__.py +3 -4
- mcsmapi/apis/daemon.py +33 -38
- mcsmapi/apis/file.py +122 -135
- mcsmapi/apis/image.py +28 -29
- mcsmapi/apis/instance.py +107 -126
- mcsmapi/apis/overview.py +12 -8
- mcsmapi/apis/user.py +37 -37
- mcsmapi/models/common.py +30 -0
- mcsmapi/models/daemon.py +60 -96
- mcsmapi/models/file.py +89 -78
- mcsmapi/models/image.py +93 -85
- mcsmapi/models/instance.py +155 -133
- mcsmapi/models/overview.py +148 -57
- mcsmapi/models/user.py +80 -57
- mcsmapi/pool.py +1 -0
- mcsmapi/request.py +20 -14
- {mcsmapi-0.1.6.dist-info → mcsmapi-0.1.8b1.dist-info}/METADATA +6 -3
- mcsmapi-0.1.8b1.dist-info/RECORD +24 -0
- mcsmapi-0.1.6.dist-info/RECORD +0 -23
- {mcsmapi-0.1.6.dist-info → mcsmapi-0.1.8b1.dist-info}/WHEEL +0 -0
- {mcsmapi-0.1.6.dist-info → mcsmapi-0.1.8b1.dist-info}/licenses/LICENSE +0 -0
- {mcsmapi-0.1.6.dist-info → mcsmapi-0.1.8b1.dist-info}/top_level.txt +0 -0
mcsmapi/__init__.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import urllib.parse
|
2
|
-
from mcsmapi.models.overview import OverviewModel
|
3
2
|
from mcsmapi.pool import ApiPool
|
4
3
|
from mcsmapi.apis.file import File
|
5
4
|
from mcsmapi.apis.user import User
|
@@ -11,12 +10,12 @@ from mcsmapi.request import Request
|
|
11
10
|
|
12
11
|
|
13
12
|
class MCSMAPI:
|
13
|
+
|
14
14
|
def __init__(self, url: str, timeout: int = 5) -> None:
|
15
15
|
split_url = urllib.parse.urlsplit(url)
|
16
16
|
Request.set_mcsm_url(
|
17
17
|
urllib.parse.urljoin(f"{split_url.scheme}://{split_url.netloc}", "")
|
18
18
|
)
|
19
|
-
self.authentication = None
|
20
19
|
Request.set_timeout(timeout)
|
21
20
|
|
22
21
|
def login(self, username: str, password: str) -> "MCSMAPI":
|
@@ -35,8 +34,8 @@ class MCSMAPI:
|
|
35
34
|
self.authentication = "apikey"
|
36
35
|
return self
|
37
36
|
|
38
|
-
def overview(self) ->
|
39
|
-
return Overview()
|
37
|
+
def overview(self) -> Overview:
|
38
|
+
return Overview()
|
40
39
|
|
41
40
|
def instance(self) -> Instance:
|
42
41
|
return Instance()
|
mcsmapi/apis/daemon.py
CHANGED
@@ -2,29 +2,28 @@ from typing import Any
|
|
2
2
|
from mcsmapi.pool import ApiPool
|
3
3
|
from mcsmapi.request import send
|
4
4
|
from mcsmapi.models.daemon import DaemonConfig, DaemonModel
|
5
|
-
from mcsmapi.models.daemon.instance import InstanceDetail
|
6
5
|
|
7
6
|
|
8
7
|
class Daemon:
|
9
|
-
|
8
|
+
@staticmethod
|
9
|
+
def show() -> list[DaemonConfig]:
|
10
10
|
"""
|
11
11
|
获取全部节点配置信息
|
12
12
|
|
13
|
-
|
14
|
-
- List[DaemonConfig]: 节点的配置信息列表
|
13
|
+
:returns: 节点的配置信息列表
|
15
14
|
"""
|
16
15
|
daemons = send(
|
17
16
|
"GET",
|
18
17
|
f"{ApiPool.SERVICE}/remote_services_list",
|
19
18
|
)
|
20
19
|
return [DaemonConfig(**daemon) for daemon in daemons]
|
21
|
-
|
22
|
-
|
20
|
+
|
21
|
+
@staticmethod
|
22
|
+
def system() -> list[DaemonModel]:
|
23
23
|
"""
|
24
24
|
获取全部节点的系统信息
|
25
|
-
|
26
|
-
|
27
|
-
- List[DaemonModel]: 节点系统信息列表
|
25
|
+
|
26
|
+
:returns: 节点系统信息列表
|
28
27
|
"""
|
29
28
|
daemons = send(
|
30
29
|
"GET",
|
@@ -32,66 +31,62 @@ class Daemon:
|
|
32
31
|
)
|
33
32
|
return [DaemonModel(**daemon) for daemon in daemons]
|
34
33
|
|
35
|
-
|
34
|
+
@staticmethod
|
35
|
+
def add(config: dict[str, Any]) -> str:
|
36
36
|
"""
|
37
|
-
|
37
|
+
新增一个节点
|
38
38
|
|
39
|
-
|
40
|
-
- config (dict): 节点的配置信息,以字典形式提供,缺失内容由DaemonConfig模型补全。
|
39
|
+
:params config: 节点的配置信息,以字典形式提供,缺失内容由DaemonConfig模型补全
|
41
40
|
|
42
|
-
|
43
|
-
- str: 新增节点的ID
|
41
|
+
:returns: 新增节点的UUID
|
44
42
|
"""
|
45
43
|
return send(
|
46
44
|
"POST",
|
47
45
|
f"{ApiPool.SERVICE}/remote_service",
|
48
|
-
data=DaemonConfig(**config).
|
46
|
+
data=DaemonConfig(**config).model_dump(),
|
49
47
|
)
|
50
48
|
|
51
|
-
|
49
|
+
@staticmethod
|
50
|
+
def delete(daemonId: str) -> bool:
|
52
51
|
"""
|
53
|
-
|
52
|
+
删除一个节点
|
54
53
|
|
55
|
-
|
56
|
-
- daemonId (str): 节点的唯一标识符。
|
54
|
+
:params daemonId: 节点的UUID
|
57
55
|
|
58
|
-
|
59
|
-
- bool: 删除成功后返回True
|
56
|
+
:returns: 删除成功后返回True
|
60
57
|
"""
|
61
58
|
return send(
|
62
59
|
"DELETE", f"{ApiPool.SERVICE}/remote_service", params={"uuid": daemonId}
|
63
60
|
)
|
64
61
|
|
65
|
-
|
62
|
+
@staticmethod
|
63
|
+
def link(daemonId: str) -> bool:
|
66
64
|
"""
|
67
|
-
|
65
|
+
连接一个节点
|
68
66
|
|
69
|
-
|
70
|
-
- daemonId (str): 节点的唯一标识符。
|
67
|
+
:params daemonId: 节点的UUID
|
71
68
|
|
72
|
-
|
73
|
-
- bool: 连接成功后返回True
|
69
|
+
:returns: 连接成功后返回True
|
74
70
|
"""
|
75
71
|
return send(
|
76
72
|
"GET", f"{ApiPool.SERVICE}/link_remote_service", params={"uuid": daemonId}
|
77
73
|
)
|
78
74
|
|
79
|
-
|
75
|
+
@staticmethod
|
76
|
+
def update(daemonId: str, config: dict[str, Any]) -> bool:
|
80
77
|
"""
|
81
|
-
|
82
|
-
|
83
|
-
**不建议直接使用此函数,建议调用overview()后在remote
|
78
|
+
更新一个节点的配置
|
79
|
+
|
80
|
+
**不建议直接使用此函数,建议调用overview()后在remote属性内使用节点对象的updateConfig方法按需更新**
|
84
81
|
|
85
|
-
|
86
|
-
|
87
|
-
- config (dict): 节点的配置信息,以字典形式提供,缺失内容由DaemonConfig模型补全。
|
82
|
+
:params daemonId: 节点的UUID
|
83
|
+
:params config: 节点的配置信息,以字典形式提供,缺失内容由DaemonConfig模型补全
|
88
84
|
|
89
|
-
|
90
|
-
- bool: 更新成功后返回True
|
85
|
+
:returns: 更新成功后返回True
|
91
86
|
"""
|
92
87
|
return send(
|
93
88
|
"PUT",
|
94
89
|
f"{ApiPool.SERVICE}/remote_service",
|
95
90
|
params={"uuid": daemonId},
|
96
|
-
data=DaemonConfig(**config).
|
91
|
+
data=DaemonConfig(**config).model_dump(),
|
97
92
|
)
|
mcsmapi/apis/file.py
CHANGED
@@ -1,33 +1,32 @@
|
|
1
|
+
from typing import Literal
|
1
2
|
from mcsmapi.pool import ApiPool
|
2
3
|
from mcsmapi.request import Request, send, upload
|
3
|
-
from mcsmapi.models.file import
|
4
|
+
from mcsmapi.models.file import FileDownloadConfig, FileList
|
4
5
|
import urllib.parse
|
5
6
|
import os
|
6
7
|
|
7
8
|
|
8
9
|
class File:
|
10
|
+
@staticmethod
|
9
11
|
def show(
|
10
|
-
self,
|
11
12
|
daemonId: str,
|
12
13
|
uuid: str,
|
13
14
|
target: str = "",
|
14
15
|
page: int = 0,
|
15
16
|
page_size: int = 100,
|
16
|
-
file_name: str = ""
|
17
|
+
file_name: str = "",
|
17
18
|
) -> FileList:
|
18
19
|
"""
|
19
20
|
获取文件列表
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- file_name (str, 可选): 用于在文件列表中过滤出名称包含指定字符串的文件或文件夹
|
22
|
+
:params daemonId: 节点的UUID
|
23
|
+
:params uuid: 实例的UUID
|
24
|
+
:params target: 用于文件过滤的目标路径
|
25
|
+
:params page: 指定分页的页码
|
26
|
+
:params page_size: 指定每页的文件数量
|
27
|
+
:params file_name: 用于在文件列表中过滤出名称包含指定字符串的文件或文件夹
|
28
28
|
|
29
|
-
|
30
|
-
- FileList: 包含文件列表信息和分页详情的FileList模型。
|
29
|
+
:returns: 包含文件列表信息和分页详情的FileList模型
|
31
30
|
"""
|
32
31
|
result = send(
|
33
32
|
"GET",
|
@@ -43,17 +42,16 @@ class File:
|
|
43
42
|
)
|
44
43
|
return FileList(**result, daemonId=daemonId, uuid=uuid)
|
45
44
|
|
46
|
-
|
45
|
+
@staticmethod
|
46
|
+
def content(daemonId: str, uuid: str, target: str) -> str:
|
47
47
|
"""
|
48
48
|
获取文件内容
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
- target (str): 文件的目标路径。
|
50
|
+
:params daemonId: 节点的UUID
|
51
|
+
:params uuid: 实例的UUID
|
52
|
+
:params target: 文件的目标路径
|
54
53
|
|
55
|
-
|
56
|
-
- str: 文件的内容信息。
|
54
|
+
:returns: 文件的内容信息
|
57
55
|
"""
|
58
56
|
return send(
|
59
57
|
"PUT",
|
@@ -62,18 +60,17 @@ class File:
|
|
62
60
|
data={"target": target},
|
63
61
|
)
|
64
62
|
|
65
|
-
|
63
|
+
@staticmethod
|
64
|
+
def update(daemonId: str, uuid: str, target: str, text: str) -> bool:
|
66
65
|
"""
|
67
66
|
更新文件内容
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
- text (str): 新的文件内容。
|
68
|
+
:params daemonId: 节点的UUID
|
69
|
+
:params uuid: 实例的UUID
|
70
|
+
:params target: 目标文件的路径
|
71
|
+
:params text: 新的文件内容
|
74
72
|
|
75
|
-
|
76
|
-
- bool: 更新成功后返回True。
|
73
|
+
:returns: 更新成功后返回True
|
77
74
|
"""
|
78
75
|
return send(
|
79
76
|
"PUT",
|
@@ -82,17 +79,16 @@ class File:
|
|
82
79
|
data={"target": target, "text": text},
|
83
80
|
)
|
84
81
|
|
85
|
-
|
82
|
+
@staticmethod
|
83
|
+
def download(daemonId: str, uuid: str, file_name: str) -> str:
|
86
84
|
"""
|
87
85
|
下载文件
|
88
86
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
- file_name (str): 要下载的文件名。路径+名字, 示例: /backup/world.zip
|
87
|
+
:params daemonId: 节点的UUID
|
88
|
+
:params uuid: 实例的UUID
|
89
|
+
:params file_name: 要下载的文件的实例内完整路径, eg: /backup/world.zip
|
93
90
|
|
94
|
-
|
95
|
-
- str: 文件下载URL。
|
91
|
+
:returns: 文件下载URL
|
96
92
|
"""
|
97
93
|
|
98
94
|
result = send(
|
@@ -100,49 +96,45 @@ class File:
|
|
100
96
|
f"{ApiPool.FILE}/download",
|
101
97
|
params={"daemonId": daemonId, "uuid": uuid, "file_name": file_name},
|
102
98
|
)
|
103
|
-
result =
|
99
|
+
result = FileDownloadConfig(**result)
|
104
100
|
protocol = Request.mcsm_url.split("://")[0]
|
105
101
|
base_url = urllib.parse.urljoin(f"{protocol}://{result.addr}", "download")
|
106
102
|
return urllib.parse.urljoin(base_url, f"{result.password}/{file_name}")
|
107
103
|
|
108
|
-
|
109
|
-
|
110
|
-
) -> bool:
|
104
|
+
@staticmethod
|
105
|
+
async def upload(daemonId: str, uuid: str, file: bytes, upload_dir: str) -> bool:
|
111
106
|
"""
|
112
107
|
上传文件
|
113
108
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
- upload_dir (str): 文件上传到的目标路径。
|
109
|
+
:params daemonId: 节点的UUID
|
110
|
+
:params uuid: 实例的UUID
|
111
|
+
:params file: 要上传的文件内容
|
112
|
+
:params upload_dir: 文件上传到的目标路径
|
119
113
|
|
120
|
-
|
121
|
-
- bool: 上传成功后返回True。
|
114
|
+
:returns: 上传成功后返回True
|
122
115
|
"""
|
123
116
|
result = send(
|
124
117
|
"POST",
|
125
118
|
f"{ApiPool.FILE}/upload",
|
126
119
|
params={"daemonId": daemonId, "uuid": uuid, "upload_dir": upload_dir},
|
127
120
|
)
|
128
|
-
result =
|
121
|
+
result = FileDownloadConfig(**result)
|
129
122
|
protocol = Request.mcsm_url.split("://")[0]
|
130
123
|
base_url = urllib.parse.urljoin(f"{protocol}://{result.addr}", "upload")
|
131
124
|
final_url = urllib.parse.urljoin(base_url, result.password)
|
132
125
|
await upload(final_url, file)
|
133
126
|
return True
|
134
127
|
|
135
|
-
|
128
|
+
@staticmethod
|
129
|
+
def copy(daemonId: str, uuid: str, copy_map: dict[str, str]) -> bool:
|
136
130
|
"""
|
137
|
-
|
131
|
+
复制多个文件夹或文件到指定位置
|
138
132
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
- copy_map (dict): 复制映射,格式为 {源路径: 目标路径}
|
133
|
+
:params daemonId: 节点的UUID
|
134
|
+
:params uuid: 实例的UUID
|
135
|
+
:params copy_map: 复制映射,格式为 {源路径: 目标路径}
|
143
136
|
|
144
|
-
|
145
|
-
- bool: 上传成功后返回True。
|
137
|
+
:returns: 复制成功后返回True
|
146
138
|
"""
|
147
139
|
targets = [[source, target] for source, target in copy_map.items()]
|
148
140
|
return send(
|
@@ -152,32 +144,30 @@ class File:
|
|
152
144
|
data={"targets": targets},
|
153
145
|
)
|
154
146
|
|
155
|
-
|
147
|
+
@staticmethod
|
148
|
+
def copyOne(daemonId: str, uuid: str, source: str, target: str) -> bool:
|
156
149
|
"""
|
157
|
-
|
150
|
+
复制单个文件或文件夹到指定位置
|
158
151
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
- target (str): 目标文件或文件夹的路径。
|
152
|
+
:params daemonId: 节点的UUID
|
153
|
+
:params uuid: 实例的UUID
|
154
|
+
:params source: 源文件或文件夹的路径
|
155
|
+
:params target: 目标文件或文件夹的路径
|
164
156
|
|
165
|
-
|
166
|
-
- bool: 移动成功后返回True。
|
157
|
+
:return: 移动成功后返回True
|
167
158
|
"""
|
168
|
-
return
|
159
|
+
return File.copy(daemonId, uuid, {source: target})
|
169
160
|
|
170
|
-
|
161
|
+
@staticmethod
|
162
|
+
def move(daemonId: str, uuid: str, copy_map: dict[str, str]) -> bool:
|
171
163
|
"""
|
172
|
-
|
164
|
+
移动多个文件或文件夹到指定位置
|
173
165
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
- copy_map (dict): 移动映射,格式为 {源路径: 目标路径}
|
166
|
+
:params daemonId: 节点的UUID
|
167
|
+
:params uuid: 实例的UUID
|
168
|
+
:params copy_map: 移动映射,格式为 {源路径: 目标路径}
|
178
169
|
|
179
|
-
|
180
|
-
- bool: 移动成功后返回True。
|
170
|
+
:returns: 移动成功后返回True
|
181
171
|
"""
|
182
172
|
targets = [[source, target] for source, target in copy_map.items()]
|
183
173
|
return send(
|
@@ -187,50 +177,48 @@ class File:
|
|
187
177
|
data={"targets": targets},
|
188
178
|
)
|
189
179
|
|
190
|
-
|
180
|
+
@staticmethod
|
181
|
+
def moveOne(daemonId: str, uuid: str, source: str, target: str) -> bool:
|
191
182
|
"""
|
192
|
-
|
183
|
+
从源路径移动单个文件或文件夹到目标路径
|
193
184
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
- target (str): 目标文件或文件夹的路径。
|
185
|
+
:params daemonId: 节点的UUID
|
186
|
+
:params uuid: 实例的UUID
|
187
|
+
:params source: 源文件或文件夹的路径
|
188
|
+
:params target: 目标文件或文件夹的路径
|
199
189
|
|
200
|
-
|
201
|
-
- bool: 移动成功后返回True。
|
190
|
+
:returns: 移动成功后返回True
|
202
191
|
"""
|
203
|
-
return
|
192
|
+
return File.move(daemonId, uuid, {source: target})
|
204
193
|
|
205
|
-
|
194
|
+
@staticmethod
|
195
|
+
def rename(daemonId: str, uuid: str, source: str, new_name: str) -> bool:
|
206
196
|
"""
|
207
|
-
|
197
|
+
重命名单个文件或文件夹
|
208
198
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
- new_name (str): 源文件或文件夹的新名字。
|
199
|
+
:params daemonId: 节点的UUID
|
200
|
+
:params uuid: 实例的UUID
|
201
|
+
:params source: 源文件或文件夹的路径
|
202
|
+
:params new_name: 源文件或文件夹的新名字
|
214
203
|
|
215
|
-
|
216
|
-
- bool: 重命名成功后返回True。
|
204
|
+
:returns: 重命名成功后返回True
|
217
205
|
"""
|
218
206
|
directory = os.path.dirname(source)
|
219
207
|
target = os.path.join(directory, new_name)
|
220
|
-
return
|
208
|
+
return File.moveOne(daemonId, uuid, source, target)
|
221
209
|
|
222
|
-
|
210
|
+
@staticmethod
|
211
|
+
def zip(daemonId: str, uuid: str, source: str, targets: list[str]) -> bool:
|
223
212
|
"""
|
224
|
-
|
213
|
+
压缩多个文件或文件夹到指定位置
|
225
214
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
- targets (list): 要压缩到的目标文件的路径。
|
215
|
+
:params daemonId: 节点的UUID
|
216
|
+
:params uuid: 实例的UUID
|
217
|
+
:params source: 要压缩到的目标文件的路径
|
218
|
+
:params targets: 需要压缩的文件路径
|
231
219
|
|
232
220
|
**返回:**
|
233
|
-
- bool: 压缩成功后返回True
|
221
|
+
- bool: 压缩成功后返回True
|
234
222
|
"""
|
235
223
|
return send(
|
236
224
|
"POST",
|
@@ -239,41 +227,42 @@ class File:
|
|
239
227
|
data={"type": 1, "code": "utf-8", "source": source, "targets": targets},
|
240
228
|
)
|
241
229
|
|
230
|
+
@staticmethod
|
242
231
|
def unzip(
|
243
|
-
|
232
|
+
daemonId: str,
|
233
|
+
uuid: str,
|
234
|
+
source: str,
|
235
|
+
targets: str,
|
236
|
+
code: Literal["utf-8", "gbk", "big5"] = "utf-8",
|
244
237
|
) -> bool:
|
245
238
|
"""
|
246
|
-
解压缩指定的zip
|
239
|
+
解压缩指定的zip文件到目标位置
|
247
240
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
- code (str, optional): 压缩文件的编码方式,默认为"utf-8"。
|
254
|
-
可选值: utf-8, gbk, big5
|
241
|
+
:params daemonId: 节点的UUID
|
242
|
+
:params uuid: 实例的UUID
|
243
|
+
:params source: 需要解压的zip文件路径
|
244
|
+
:params targets: 解压到的目标路径
|
245
|
+
:params code: 压缩文件的编码方式
|
255
246
|
|
256
|
-
|
257
|
-
- bool: 解压成功后返回True。
|
247
|
+
:returns: 解压成功后返回True
|
258
248
|
"""
|
259
249
|
return send(
|
260
250
|
"POST",
|
261
251
|
f"{ApiPool.FILE}/compress",
|
262
252
|
params={"daemonId": daemonId, "uuid": uuid},
|
263
|
-
data={"type": 2, "code": code, "source": source, "targets":
|
253
|
+
data={"type": 2, "code": code, "source": source, "targets": targets},
|
264
254
|
)
|
265
255
|
|
266
|
-
|
256
|
+
@staticmethod
|
257
|
+
def delete(daemonId: str, uuid: str, targets: list[str]) -> bool:
|
267
258
|
"""
|
268
|
-
|
259
|
+
删除多个文件或文件夹
|
269
260
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
- targets (list): 要删除的文件或文件夹的路径。
|
261
|
+
:params daemonId: 节点的UUID
|
262
|
+
:params uuid: 实例的UUID
|
263
|
+
:params targets: 要删除的文件或文件夹的路径
|
274
264
|
|
275
|
-
|
276
|
-
- bool: 删除成功后返回True。
|
265
|
+
:returns: 删除成功后返回True
|
277
266
|
"""
|
278
267
|
return send(
|
279
268
|
"DELETE",
|
@@ -282,17 +271,16 @@ class File:
|
|
282
271
|
data={"targets": targets},
|
283
272
|
)
|
284
273
|
|
285
|
-
|
274
|
+
@staticmethod
|
275
|
+
def createFile(daemonId: str, uuid: str, target: str) -> bool:
|
286
276
|
"""
|
287
|
-
|
277
|
+
创建文件
|
288
278
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
- target (str): 目标文件的路径,包含文件名。
|
279
|
+
:params daemonId: 节点的UUID
|
280
|
+
:params uuid: 实例的UUID
|
281
|
+
:params target: 目标文件的路径,包含文件名
|
293
282
|
|
294
|
-
|
295
|
-
- bool: 创建成功后返回True。
|
283
|
+
:returns: 创建成功后返回True
|
296
284
|
"""
|
297
285
|
return send(
|
298
286
|
"POST",
|
@@ -301,17 +289,16 @@ class File:
|
|
301
289
|
data={"target": target},
|
302
290
|
)
|
303
291
|
|
304
|
-
|
292
|
+
@staticmethod
|
293
|
+
def createFolder(daemonId: str, uuid: str, target: str) -> bool:
|
305
294
|
"""
|
306
295
|
创建文件夹
|
307
296
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
- target (str): 目标文件夹的路径。
|
297
|
+
:params daemonId: 节点的UUID
|
298
|
+
:params uuid: 实例的UUID
|
299
|
+
:params target: 目标文件夹的路径
|
312
300
|
|
313
|
-
|
314
|
-
- bool: 创建成功后返回True。
|
301
|
+
:returns: 创建成功后返回True
|
315
302
|
"""
|
316
303
|
return send(
|
317
304
|
"POST",
|