cloudpss 4.5.16__py3-none-any.whl → 4.5.17__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.
- cloudpss/job/job.py +7 -3
- cloudpss/model/implements/diagram.py +1 -1
- cloudpss/runner/runner.py +7 -3
- cloudpss/utils/parseDebugArgs.py +93 -0
- cloudpss/version.py +1 -1
- {cloudpss-4.5.16.dist-info → cloudpss-4.5.17.dist-info}/METADATA +1 -1
- {cloudpss-4.5.16.dist-info → cloudpss-4.5.17.dist-info}/RECORD +9 -8
- {cloudpss-4.5.16.dist-info → cloudpss-4.5.17.dist-info}/WHEEL +0 -0
- {cloudpss-4.5.16.dist-info → cloudpss-4.5.17.dist-info}/top_level.txt +0 -0
cloudpss/job/job.py
CHANGED
@@ -4,6 +4,7 @@ import re
|
|
4
4
|
import time
|
5
5
|
|
6
6
|
from cloudpss.job.result.result import Result
|
7
|
+
from cloudpss.utils.parseDebugArgs import parse_debug_args
|
7
8
|
from .result import getResultClass
|
8
9
|
|
9
10
|
from cloudpss.utils.IO import IO
|
@@ -134,9 +135,12 @@ class Job(Generic[T]):
|
|
134
135
|
debug = job["args"].get("@debug", None )
|
135
136
|
debugargs={}
|
136
137
|
if debug is not None:
|
137
|
-
|
138
|
-
|
139
|
-
debugargs
|
138
|
+
parsed = parse_debug_args(debug)
|
139
|
+
if parsed is not None:
|
140
|
+
debugargs = parsed
|
141
|
+
# t= [ i.split('=') for i in re.split(r'\s+',debug) if i.find('=')>0]
|
142
|
+
# for i in t:
|
143
|
+
# debugargs[i[0]]=i[1]
|
140
144
|
context=[
|
141
145
|
function,
|
142
146
|
f"model/@sdk/{str(int(time.time() * random.random()))}",
|
cloudpss/runner/runner.py
CHANGED
@@ -7,6 +7,7 @@ import random
|
|
7
7
|
from deprecated import deprecated
|
8
8
|
|
9
9
|
from cloudpss.utils.graphqlUtil import graphql_request
|
10
|
+
from cloudpss.utils.parseDebugArgs import parse_debug_args
|
10
11
|
from .receiver import Receiver
|
11
12
|
from .MessageStreamReceiver import MessageStreamReceiver
|
12
13
|
from .result import IESLabSimulationResult, PowerFlowResult, EMTResult, Result, IESResult
|
@@ -164,9 +165,12 @@ class Runner(Generic[T]):
|
|
164
165
|
debug = job["args"].get("@debug", None )
|
165
166
|
debugargs={}
|
166
167
|
if debug is not None:
|
167
|
-
|
168
|
-
|
169
|
-
debugargs
|
168
|
+
parsed = parse_debug_args(debug)
|
169
|
+
if parsed is not None:
|
170
|
+
debugargs = parsed
|
171
|
+
# t= [ i.split('=') for i in re.split(r'\s+',debug) if i.find('=')>0]
|
172
|
+
# for i in t:
|
173
|
+
# debugargs[i[0]]=i[1]
|
170
174
|
|
171
175
|
context= [
|
172
176
|
function,
|
@@ -0,0 +1,93 @@
|
|
1
|
+
def parse_debug_args(debug=None):
|
2
|
+
if not debug or not isinstance(debug, str):
|
3
|
+
return None
|
4
|
+
|
5
|
+
tokens = []
|
6
|
+
|
7
|
+
# 1. 先按照非转义的空格拆分字符串,获取每个 token
|
8
|
+
current_token = ''
|
9
|
+
escaping = False # 表示当前是否在处理转义字符
|
10
|
+
|
11
|
+
for char in debug:
|
12
|
+
if escaping:
|
13
|
+
# 如果上一个字符是 '\',则把当前字符直接添加到 token,并保留 '\' 以供二阶段使用
|
14
|
+
current_token += '\\' + char
|
15
|
+
escaping = False
|
16
|
+
elif char == '\\':
|
17
|
+
# 开始转义
|
18
|
+
escaping = True
|
19
|
+
elif char.isspace():
|
20
|
+
# 如果遇到空格 (并且不在转义状态),说明一个 token 结束
|
21
|
+
if current_token:
|
22
|
+
tokens.append(current_token)
|
23
|
+
current_token = ''
|
24
|
+
else:
|
25
|
+
# 普通字符,直接添加
|
26
|
+
current_token += char
|
27
|
+
|
28
|
+
# 最后一个 token 加入数组(如果有的话)
|
29
|
+
if current_token:
|
30
|
+
tokens.append(current_token)
|
31
|
+
|
32
|
+
if not tokens:
|
33
|
+
return None
|
34
|
+
|
35
|
+
# 2. 对每个 token,找第一个非转义的 '=' 分割 key/value
|
36
|
+
entries = []
|
37
|
+
|
38
|
+
for token in tokens:
|
39
|
+
key = ''
|
40
|
+
value = ''
|
41
|
+
has_equal = False
|
42
|
+
escaping = False
|
43
|
+
|
44
|
+
# 我们只需要区分第一处真正的 '='
|
45
|
+
for char in token:
|
46
|
+
if escaping:
|
47
|
+
# 处理转义字符
|
48
|
+
if char == 'b':
|
49
|
+
escaped_char = '\b'
|
50
|
+
elif char == 'f':
|
51
|
+
escaped_char = '\f'
|
52
|
+
elif char == 'n':
|
53
|
+
escaped_char = '\n'
|
54
|
+
elif char == 'r':
|
55
|
+
escaped_char = '\r'
|
56
|
+
elif char == 't':
|
57
|
+
escaped_char = '\t'
|
58
|
+
elif char == 'v':
|
59
|
+
escaped_char = '\v'
|
60
|
+
else:
|
61
|
+
escaped_char = char
|
62
|
+
|
63
|
+
# 直接添加当前字符
|
64
|
+
if not has_equal:
|
65
|
+
key += escaped_char
|
66
|
+
else:
|
67
|
+
if escaped_char in ['\\', '$']:
|
68
|
+
# 保留转义字符
|
69
|
+
value += '\\' + escaped_char
|
70
|
+
else:
|
71
|
+
value += escaped_char
|
72
|
+
escaping = False
|
73
|
+
elif char == '\\':
|
74
|
+
escaping = True
|
75
|
+
elif char == '=' and not has_equal:
|
76
|
+
# 遇到第一个非转义的 '=' 时,视为 key/value 分隔
|
77
|
+
has_equal = True
|
78
|
+
else:
|
79
|
+
# 普通字符
|
80
|
+
if not has_equal:
|
81
|
+
key += char
|
82
|
+
else:
|
83
|
+
value += char
|
84
|
+
|
85
|
+
# 添加 key 和 value 到 entries 列表
|
86
|
+
entries.append((key, value))
|
87
|
+
|
88
|
+
return dict(entries)
|
89
|
+
|
90
|
+
# 示例用法
|
91
|
+
# debug_str = r"TASK_CMD=cloudpssrun:mkl DOCKER_MOUNT=/dev/disk/by-id:/dev/disk/by-id:ro\n/home/cloudpss/NR_ADPSS_HVDC37.key:/usr/include/NR_ADPSS_HVDC37.key:ro\n"
|
92
|
+
# result = parse_debug_args(debug_str)
|
93
|
+
# print(result)
|
cloudpss/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = '4.5.
|
1
|
+
__version__ = '4.5.17'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
cloudpss/__init__.py,sha256=xnA-UjehYOzH6KV7vOXHwdbGEiw6g_OPKzrbZA9Fuc8,858
|
2
2
|
cloudpss/verify.py,sha256=KF4Gd59DGvCyIEkRD7rNnekWw22XxJpi3DW6keb6j4c,1498
|
3
|
-
cloudpss/version.py,sha256=
|
3
|
+
cloudpss/version.py,sha256=odzwOZGBQ9G--qb4MBWz3OXJ2nnIAWLMQIvvMeGjDxg,23
|
4
4
|
cloudpss/asyncio/__init__.py,sha256=CJGopQl_vz3z3fJsK7NjMX5uzkzfrJrbqKVhyYqlYWc,198
|
5
5
|
cloudpss/asyncio/job/__init__.py,sha256=3UIFZYjJTzuckM61o8kim1c3PWt2SSHTL72jrGu5IzI,51
|
6
6
|
cloudpss/asyncio/job/job.py,sha256=Bn2BEERw1J8YarFauTzVrGJK7nmaoMsdlrFUqiHRth4,3897
|
@@ -34,7 +34,7 @@ cloudpss/ieslab/__init__.py,sha256=gr1rXYw9vIAGOe60eg7LyMHP7QDXvNf4dJ5GTR_kj1Y,2
|
|
34
34
|
cloudpss/job/TemplateCompiler.py,sha256=MuJDTQ54wRo5bGSvBJBJjXJ7u463dwpRkaLwIwm_hLE,9936
|
35
35
|
cloudpss/job/TemplateManager.py,sha256=uOvctmE3P17aGWt_26d940FbRUSEs6iovFBb8T5xjd4,1115
|
36
36
|
cloudpss/job/__init__.py,sha256=3UIFZYjJTzuckM61o8kim1c3PWt2SSHTL72jrGu5IzI,51
|
37
|
-
cloudpss/job/job.py,sha256=
|
37
|
+
cloudpss/job/job.py,sha256=wPRLvfTsVjFFuxuJvbTiHyDMenNP3amzt4iLwxHpTEc,8647
|
38
38
|
cloudpss/job/jobReceiver.py,sha256=PNYxcN33LiXZVyc4tzhPlpWxKnyWO_ElKjJ9wsxsroI,925
|
39
39
|
cloudpss/job/messageStreamReceiver.py,sha256=cbCzECT75ywtR2H5d0gNrTW4HS6PrNWB6yh5LXT6HLw,5593
|
40
40
|
cloudpss/job/messageStreamSender.py,sha256=oNT4xpYR54MEk4W79GjkK4fxTTLq6DAhAA2f-v6Gzjc,2458
|
@@ -52,7 +52,7 @@ cloudpss/model/revision.py,sha256=E3H-FOXsiwy1MDZC-Ky-QkzvOb5HApYSXP0llf8yJXQ,40
|
|
52
52
|
cloudpss/model/topology.py,sha256=MJF3rQBLWus4RVO6L3Zwih7SWYjRWsLMcrcIBxCmIwM,2617
|
53
53
|
cloudpss/model/implements/__init__.py,sha256=88L_wF9SSzxsbtqwStWIPH4LxaKq7TVcssHQ62YBnls,67
|
54
54
|
cloudpss/model/implements/component.py,sha256=uNSpkZKChdXLiO40Ev4P3oQ1di2Hu4YjcBOb0I8Bf0c,734
|
55
|
-
cloudpss/model/implements/diagram.py,sha256
|
55
|
+
cloudpss/model/implements/diagram.py,sha256=GnNWgM8jKc9L2lMDv3YZJVGnMa6dvE4rljF7PnSXjrY,6133
|
56
56
|
cloudpss/model/implements/implement.py,sha256=Uld96tjXVDbVUNV8xscyy_nZWLHr3iP2DqA6S3p-XJE,954
|
57
57
|
cloudpss/project/__init__.py,sha256=fpskY-cJGmMcTg1naVzNPtJaRG1xmSc2CFjDTin64Cw,51
|
58
58
|
cloudpss/project/project.py,sha256=uFhOnM8ngo1_ZYz2uArtORKZquYNdOIVLXU_q1MDFI4,17698
|
@@ -64,7 +64,7 @@ cloudpss/runner/MessageStreamReceiver.py,sha256=dT-rKslQbRt3bMTGXupa1YrocHl2zTWO
|
|
64
64
|
cloudpss/runner/__init__.py,sha256=FxiYYmssbZgRjieySzi43yPiWEF6eNos2UsoFQeD2H8,341
|
65
65
|
cloudpss/runner/receiver.py,sha256=QU0RsbCt0EK7sCLHzfj8_QQsuPNfqXxpZi5JKm6roxA,4162
|
66
66
|
cloudpss/runner/result.py,sha256=Q8RcfUnvilxPo6yvtjH6dXePaCqrBjQCljur3rem2pU,13290
|
67
|
-
cloudpss/runner/runner.py,sha256=
|
67
|
+
cloudpss/runner/runner.py,sha256=w4sImN1nymnyNkSEBhtVw4MjGpUuz_tEJAXWg0lxB6g,10273
|
68
68
|
cloudpss/runner/storage.py,sha256=zFET_zwPIOF2Cnh9sgFiS0HFxV1OmVsU34bGUQ6PpkA,4162
|
69
69
|
cloudpss/runner/transform.py,sha256=krOgTZiJSJAb5QSwerAqlbC4Ma0PKi__0WOZlAxw4O8,11613
|
70
70
|
cloudpss/utils/IO.py,sha256=FsFp3V8I1-P0YiBGmjKwbMalBrVKMHUxTjFZFOtv0CQ,5357
|
@@ -73,8 +73,9 @@ cloudpss/utils/dataEncoder.py,sha256=5PUPb844eOGgFnYrMM8bdjdKH_MZz0lk-67uo8TvwEo
|
|
73
73
|
cloudpss/utils/graphqlUtil.py,sha256=_bdHFlusvZd5p4I1iVq5nEKqeC2RdyiXbnfv7oQBvQA,332
|
74
74
|
cloudpss/utils/httprequests.py,sha256=5FXdXU5GUrsmreL7nEnJe1eD564HyrT9_379SRzwjrU,1907
|
75
75
|
cloudpss/utils/matlab.py,sha256=SLwVt790BjklJK2XNELt9R2n_1ej9Y8QsTIdFkKXLWE,795
|
76
|
+
cloudpss/utils/parseDebugArgs.py,sha256=r8EptSHG9D-U7dT3pHFDclL-8G2La9w4GEjUAY-rsMc,3174
|
76
77
|
cloudpss/utils/yamlLoader.py,sha256=bv_vPDK_e0n_vZ5FwpDJ_NJWqMAwfU3AbhkvQIxPCy4,2677
|
77
|
-
cloudpss-4.5.
|
78
|
-
cloudpss-4.5.
|
79
|
-
cloudpss-4.5.
|
80
|
-
cloudpss-4.5.
|
78
|
+
cloudpss-4.5.17.dist-info/METADATA,sha256=6q0FDJOJ52yNhohvngxBiDMCfWWugYVxQbla7AD1_NY,2402
|
79
|
+
cloudpss-4.5.17.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
80
|
+
cloudpss-4.5.17.dist-info/top_level.txt,sha256=wS9qPU4-aWM9ouzMOx34Nlq-GkdQKpr9vBskwut1BD8,9
|
81
|
+
cloudpss-4.5.17.dist-info/RECORD,,
|
File without changes
|
File without changes
|