rainbow-rb-utils 0.1.2.dev3__tar.gz → 0.1.2.dev4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/PKG-INFO +2 -2
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/pyproject.toml +2 -2
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/flow_manager.py +44 -10
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/manipulate.py +5 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow_rb_utils.egg-info/PKG-INFO +2 -2
- rainbow_rb_utils-0.1.2.dev4/src/rainbow_rb_utils.egg-info/requires.txt +2 -0
- rainbow_rb_utils-0.1.2.dev3/src/rainbow_rb_utils.egg-info/requires.txt +0 -2
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/README.md +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/setup.cfg +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/__init__.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/asyncio_helper.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/date.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/env.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/file.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/flatbuffer.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/helper.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/pagination.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/parser.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/path_utils.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/program.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/py.typed +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/service_exception.py +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow_rb_utils.egg-info/SOURCES.txt +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow_rb_utils.egg-info/dependency_links.txt +0 -0
- {rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow_rb_utils.egg-info/top_level.txt +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rainbow-rb-utils
|
|
3
|
-
Version: 0.1.2.
|
|
3
|
+
Version: 0.1.2.dev4
|
|
4
4
|
Summary: Rainbow Python Utilities
|
|
5
5
|
Author-email: Derek <dfd1123@rainbow-robotics.com>
|
|
6
6
|
Requires-Python: <3.14,>=3.11
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: psutil<8.0.0,>=7.0.0
|
|
9
|
-
Requires-Dist: rainbow-rb-log==0.1.2.
|
|
9
|
+
Requires-Dist: rainbow-rb-log==0.1.2.dev4
|
|
10
10
|
|
|
11
11
|
# rb_utils
|
|
12
12
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "rainbow-rb-utils"
|
|
7
|
-
version = "0.1.2.
|
|
7
|
+
version = "0.1.2.dev4"
|
|
8
8
|
requires-python = ">=3.11,<3.14"
|
|
9
9
|
description = "Rainbow Python Utilities"
|
|
10
10
|
authors = [
|
|
@@ -14,7 +14,7 @@ readme = "README.md"
|
|
|
14
14
|
|
|
15
15
|
dependencies = [
|
|
16
16
|
"psutil>=7.0.0,<8.0.0",
|
|
17
|
-
"rainbow-rb-log==0.1.2.
|
|
17
|
+
"rainbow-rb-log==0.1.2.dev4",
|
|
18
18
|
]
|
|
19
19
|
|
|
20
20
|
[tool.setuptools]
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/flow_manager.py
RENAMED
|
@@ -66,7 +66,28 @@ ALLOWED_CONSTS = {
|
|
|
66
66
|
|
|
67
67
|
EXPLICIT_EXPR_PATTERN = re.compile(r"\$[A-Za-z_]\w*")
|
|
68
68
|
RB_GLOBAL_PATTERN = re.compile(r"\bRB_[A-Za-z_0-9]*\b")
|
|
69
|
-
|
|
69
|
+
# get/update 는 get_var/update_var 별칭. `.get(`/`.update(` (dict 메서드) 은 제외
|
|
70
|
+
GET_VAR_PATTERN = re.compile(r"(?<![\w.])(?:get|update)(?:_var)?\s*\(")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def collect_rb_globals(value: Any) -> list[str]:
|
|
74
|
+
"""value(문자열/리스트/딕트 중첩) 안의 RB_ 이름을 순서대로, 중복 없이 모은다."""
|
|
75
|
+
found: dict[str, None] = {}
|
|
76
|
+
|
|
77
|
+
def _walk(v: Any) -> None:
|
|
78
|
+
if isinstance(v, str):
|
|
79
|
+
for name in RB_GLOBAL_PATTERN.findall(v):
|
|
80
|
+
found[name] = None
|
|
81
|
+
elif isinstance(v, list | tuple | set):
|
|
82
|
+
for item in v:
|
|
83
|
+
_walk(item)
|
|
84
|
+
elif isinstance(v, dict):
|
|
85
|
+
# eval_value 와 동일하게 값만 본다
|
|
86
|
+
for item in v.values():
|
|
87
|
+
_walk(item)
|
|
88
|
+
|
|
89
|
+
_walk(value)
|
|
90
|
+
return list(found)
|
|
70
91
|
|
|
71
92
|
|
|
72
93
|
def safe_eval_expr(
|
|
@@ -75,6 +96,7 @@ def safe_eval_expr(
|
|
|
75
96
|
get_global_variable: Callable[[str], Any] | None = None,
|
|
76
97
|
get_var: Callable[..., Any] | None = None,
|
|
77
98
|
on_write: Callable[[str, str], None] | None = None,
|
|
99
|
+
update_var: Callable[..., Any] | None = None,
|
|
78
100
|
) -> Any:
|
|
79
101
|
"""on_write: 대입/증감 시 (변수명, "local"|"global") 통보. 쓰기 없으면 호출 안 됨."""
|
|
80
102
|
if not isinstance(expr, str):
|
|
@@ -202,18 +224,25 @@ def safe_eval_expr(
|
|
|
202
224
|
return any(_eval(v) for v in node.values)
|
|
203
225
|
|
|
204
226
|
if isinstance(node, ast.Call):
|
|
205
|
-
if isinstance(node.func, ast.Name) and node.func.id
|
|
227
|
+
if isinstance(node.func, ast.Name) and node.func.id in ("get", "get_var"):
|
|
228
|
+
# get(name) = 자기 프로세스, get(target, name[, default]) = 다른 프로그램
|
|
229
|
+
fname = node.func.id
|
|
206
230
|
if get_var is None:
|
|
207
|
-
raise ValueError("
|
|
208
|
-
if len(node.args)
|
|
231
|
+
raise ValueError(f"{fname} is not available in this context")
|
|
232
|
+
if not 1 <= len(node.args) <= 3 or node.keywords:
|
|
209
233
|
raise ValueError(
|
|
210
|
-
"
|
|
234
|
+
f"{fname} requires {fname}(var_name) or "
|
|
235
|
+
f"{fname}(pid_or_model, var_name[, default])"
|
|
211
236
|
)
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
237
|
+
return get_var(*[_eval(a) for a in node.args])
|
|
238
|
+
if isinstance(node.func, ast.Name) and node.func.id in ("update", "update_var"):
|
|
239
|
+
# update({...}) = 자기 프로세스, update(target, {...}) = 다른 프로그램
|
|
240
|
+
fname = node.func.id
|
|
241
|
+
if update_var is None:
|
|
242
|
+
raise ValueError(f"{fname} is not available in this context")
|
|
243
|
+
if len(node.args) not in (1, 2) or node.keywords:
|
|
244
|
+
raise ValueError(f"{fname} requires {fname}({{...}}) or {fname}(target, {{...}})")
|
|
245
|
+
return update_var(*[_eval(a) for a in node.args])
|
|
217
246
|
fn = _eval(node.func)
|
|
218
247
|
if fn not in ALLOWED_CALLABLES:
|
|
219
248
|
raise ValueError(f"function not allowed: {fn}")
|
|
@@ -515,6 +544,7 @@ def eval_value(
|
|
|
515
544
|
get_global_variable: Callable[[str], Any] | None = None,
|
|
516
545
|
get_var: Callable[..., Any] | None = None,
|
|
517
546
|
on_write: Callable[[str, str], None] | None = None,
|
|
547
|
+
update_var: Callable[..., Any] | None = None,
|
|
518
548
|
) -> Any:
|
|
519
549
|
# 1) 문자열이면 → 기존 safe_eval_expr 호출
|
|
520
550
|
if isinstance(value, str):
|
|
@@ -524,6 +554,7 @@ def eval_value(
|
|
|
524
554
|
get_global_variable=get_global_variable,
|
|
525
555
|
get_var=get_var,
|
|
526
556
|
on_write=on_write,
|
|
557
|
+
update_var=update_var,
|
|
527
558
|
)
|
|
528
559
|
|
|
529
560
|
# 2) 리스트면 → 각 요소를 재귀적으로 평가
|
|
@@ -535,6 +566,7 @@ def eval_value(
|
|
|
535
566
|
get_global_variable=get_global_variable,
|
|
536
567
|
get_var=get_var,
|
|
537
568
|
on_write=on_write,
|
|
569
|
+
update_var=update_var,
|
|
538
570
|
)
|
|
539
571
|
for v in value
|
|
540
572
|
]
|
|
@@ -548,6 +580,7 @@ def eval_value(
|
|
|
548
580
|
get_global_variable=get_global_variable,
|
|
549
581
|
get_var=get_var,
|
|
550
582
|
on_write=on_write,
|
|
583
|
+
update_var=update_var,
|
|
551
584
|
)
|
|
552
585
|
for v in value
|
|
553
586
|
)
|
|
@@ -561,6 +594,7 @@ def eval_value(
|
|
|
561
594
|
get_global_variable=get_global_variable,
|
|
562
595
|
get_var=get_var,
|
|
563
596
|
on_write=on_write,
|
|
597
|
+
update_var=update_var,
|
|
564
598
|
)
|
|
565
599
|
for k, v in value.items()
|
|
566
600
|
}
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/manipulate.py
RENAMED
|
@@ -228,4 +228,9 @@ def parse_state_core_mv_to_dict(mv: memoryview) -> dict[str, object]:
|
|
|
228
228
|
"weldInfoRxCurrent": obj.WeldInfoRxCurrent(),
|
|
229
229
|
"weldInfoRxVoltage": obj.WeldInfoRxVoltage(),
|
|
230
230
|
"weldInfoRxFeedrate": obj.WeldInfoRxFeedrate(),
|
|
231
|
+
"safetyRawDataA0": obj.SafetyRawDataA0(),
|
|
232
|
+
"safetyRawDataA1": obj.SafetyRawDataA1(),
|
|
233
|
+
"safetyRawDataB0": obj.SafetyRawDataB0(),
|
|
234
|
+
"safetyRawDataB1": obj.SafetyRawDataB1(),
|
|
235
|
+
"realtimeFeedback": obj.RealtimeFeedback(),
|
|
231
236
|
}
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow_rb_utils.egg-info/PKG-INFO
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rainbow-rb-utils
|
|
3
|
-
Version: 0.1.2.
|
|
3
|
+
Version: 0.1.2.dev4
|
|
4
4
|
Summary: Rainbow Python Utilities
|
|
5
5
|
Author-email: Derek <dfd1123@rainbow-robotics.com>
|
|
6
6
|
Requires-Python: <3.14,>=3.11
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: psutil<8.0.0,>=7.0.0
|
|
9
|
-
Requires-Dist: rainbow-rb-log==0.1.2.
|
|
9
|
+
Requires-Dist: rainbow-rb-log==0.1.2.dev4
|
|
10
10
|
|
|
11
11
|
# rb_utils
|
|
12
12
|
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/__init__.py
RENAMED
|
File without changes
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/asyncio_helper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/flatbuffer.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/pagination.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_utils-0.1.2.dev3 → rainbow_rb_utils-0.1.2.dev4}/src/rainbow/rb_utils/path_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|