torchx-nightly 2025.5.5__py3-none-any.whl → 2025.5.7__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 torchx-nightly might be problematic. Click here for more details.
- torchx/util/types.py +27 -1
- {torchx_nightly-2025.5.5.dist-info → torchx_nightly-2025.5.7.dist-info}/METADATA +1 -1
- {torchx_nightly-2025.5.5.dist-info → torchx_nightly-2025.5.7.dist-info}/RECORD +7 -7
- {torchx_nightly-2025.5.5.dist-info → torchx_nightly-2025.5.7.dist-info}/LICENSE +0 -0
- {torchx_nightly-2025.5.5.dist-info → torchx_nightly-2025.5.7.dist-info}/WHEEL +0 -0
- {torchx_nightly-2025.5.5.dist-info → torchx_nightly-2025.5.7.dist-info}/entry_points.txt +0 -0
- {torchx_nightly-2025.5.5.dist-info → torchx_nightly-2025.5.7.dist-info}/top_level.txt +0 -0
torchx/util/types.py
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# pyre-strict
|
|
8
8
|
|
|
9
9
|
import inspect
|
|
10
|
+
import re
|
|
10
11
|
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar, Union
|
|
11
12
|
|
|
12
13
|
import typing_inspect
|
|
@@ -31,6 +32,9 @@ def to_dict(arg: str) -> Dict[str, str]:
|
|
|
31
32
|
When values are lists, the last delimiter is used as kv-pair delimiter
|
|
32
33
|
(e.g. ``FOO=v1,v2,BAR=v3``). Empty values of ``arg`` returns an empty map.
|
|
33
34
|
|
|
35
|
+
Values can be quoted with single or double quotes to include special characters
|
|
36
|
+
(``"="``, ``","``, ``";"``) without them being interpreted as separators.
|
|
37
|
+
|
|
34
38
|
Note that values that encode list literals are returned as list literals
|
|
35
39
|
NOT actual lists. The caller must further process each value in the returned
|
|
36
40
|
map, to cast/decode the value literals as specific types. In this case,
|
|
@@ -57,6 +61,7 @@ def to_dict(arg: str) -> Dict[str, str]:
|
|
|
57
61
|
to_dict("FOO=v1;v2,BAR=v3") == {"FOO": "v1;v2", "BAR": "v3"}
|
|
58
62
|
to_dict("FOO=v1;v2;BAR=v3") == {"FOO": "v1;v2", "BAR": "v3"}
|
|
59
63
|
|
|
64
|
+
to_dict('FOO="value with = and , and ;"') == {"FOO": "value with = and , and ;"}
|
|
60
65
|
"""
|
|
61
66
|
|
|
62
67
|
def parse_val_key(vk: str) -> Tuple[str, str]:
|
|
@@ -74,6 +79,10 @@ def to_dict(arg: str) -> Dict[str, str]:
|
|
|
74
79
|
return vk[0:idx].strip(), vk[idx + 1 :].strip()
|
|
75
80
|
|
|
76
81
|
def to_val(val: str) -> str:
|
|
82
|
+
if (val.startswith("'") and val.endswith("'")) or (
|
|
83
|
+
val.startswith('"') and val.endswith('"')
|
|
84
|
+
):
|
|
85
|
+
return val[1:-1]
|
|
77
86
|
return val if val != '""' and val != "''" else ""
|
|
78
87
|
|
|
79
88
|
arg_map: Dict[str, str] = {}
|
|
@@ -81,12 +90,23 @@ def to_dict(arg: str) -> Dict[str, str]:
|
|
|
81
90
|
if not arg:
|
|
82
91
|
return arg_map
|
|
83
92
|
|
|
93
|
+
# find quoted values
|
|
94
|
+
quoted_pattern = r'([\'"])((?:\\.|(?!\1).)*?)\1'
|
|
95
|
+
quoted_values: List[str] = []
|
|
96
|
+
|
|
97
|
+
def replace_quoted(match):
|
|
98
|
+
quoted_values.append(match.group(0))
|
|
99
|
+
return f"__QUOTED_{len(quoted_values) - 1}__"
|
|
100
|
+
|
|
101
|
+
# replace quoted values with placeholders
|
|
102
|
+
processed_arg = re.sub(quoted_pattern, replace_quoted, arg)
|
|
103
|
+
|
|
84
104
|
# split cfgs
|
|
85
105
|
cfg_kv_delim = "="
|
|
86
106
|
|
|
87
107
|
# ["FOO", "v1;v2,BAR", v3, "BAZ", "v4,v5"]
|
|
88
108
|
split_arg = [
|
|
89
|
-
s.strip() for s in
|
|
109
|
+
s.strip() for s in processed_arg.split(cfg_kv_delim) if s.strip()
|
|
90
110
|
] # remove empty
|
|
91
111
|
split_arg_len = len(split_arg)
|
|
92
112
|
|
|
@@ -98,10 +118,16 @@ def to_dict(arg: str) -> Dict[str, str]:
|
|
|
98
118
|
# middle elements are value_{n}<delim>key_{n+1}
|
|
99
119
|
for vk in split_arg[1 : split_arg_len - 1]: # python deals with
|
|
100
120
|
val, key_next = parse_val_key(vk)
|
|
121
|
+
for i, quoted in enumerate(quoted_values):
|
|
122
|
+
val = val.replace(f"__QUOTED_{i}__", quoted)
|
|
101
123
|
arg_map[key] = to_val(val)
|
|
102
124
|
key = key_next
|
|
125
|
+
|
|
103
126
|
val = split_arg[-1] # last element is always a value
|
|
127
|
+
for i, quoted in enumerate(quoted_values):
|
|
128
|
+
val = val.replace(f"__QUOTED_{i}__", quoted)
|
|
104
129
|
arg_map[key] = to_val(val)
|
|
130
|
+
|
|
105
131
|
return arg_map
|
|
106
132
|
|
|
107
133
|
|
|
@@ -110,14 +110,14 @@ torchx/util/modules.py,sha256=o4y_d07gTpJ4nIVBcoUVJ0JtXIHEsEC5kbgBM6NGpgA,2135
|
|
|
110
110
|
torchx/util/session.py,sha256=r6M_nyzXgcbk1GgYGZ324F_ehRGCqjjdVk4YgKxMj8M,1214
|
|
111
111
|
torchx/util/shlex.py,sha256=eXEKu8KC3zIcd8tEy9_s8Ds5oma8BORr-0VGWNpG2dk,463
|
|
112
112
|
torchx/util/strings.py,sha256=GkLWCmYS89Uv6bWc5hH0XwvHy7oQmprv2U7axC4A2e8,678
|
|
113
|
-
torchx/util/types.py,sha256=
|
|
113
|
+
torchx/util/types.py,sha256=msyHky81Du45OEzIhbSK-U2zJQyOCTQhRdq1qaYA7Uo,8552
|
|
114
114
|
torchx/workspace/__init__.py,sha256=FqN8AN4VhR1C_SBY10MggQvNZmyanbbuPuE-JCjkyUY,798
|
|
115
115
|
torchx/workspace/api.py,sha256=PtDkGTC5lX03pRoYpuMz2KCmM1ZOycRP1UknqvNb97Y,6341
|
|
116
116
|
torchx/workspace/dir_workspace.py,sha256=npNW_IjUZm_yS5r-8hrRkH46ndDd9a_eApT64m1S1T4,2268
|
|
117
117
|
torchx/workspace/docker_workspace.py,sha256=PFu2KQNVC-0p2aKJ-W_BKA9ZOmXdCY2ABEkCExp3udQ,10269
|
|
118
|
-
torchx_nightly-2025.5.
|
|
119
|
-
torchx_nightly-2025.5.
|
|
120
|
-
torchx_nightly-2025.5.
|
|
121
|
-
torchx_nightly-2025.5.
|
|
122
|
-
torchx_nightly-2025.5.
|
|
123
|
-
torchx_nightly-2025.5.
|
|
118
|
+
torchx_nightly-2025.5.7.dist-info/LICENSE,sha256=WVHfXhFC0Ia8LTKt_nJVYobdqTJVg_4J3Crrfm2A8KQ,1721
|
|
119
|
+
torchx_nightly-2025.5.7.dist-info/METADATA,sha256=kkb0YyzdvFFB3T4y79wcI9IaMYGNSeU0PSu4gZIJBKY,6119
|
|
120
|
+
torchx_nightly-2025.5.7.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
121
|
+
torchx_nightly-2025.5.7.dist-info/entry_points.txt,sha256=T328AMXeKI3JZnnxfkEew2ZcMN1oQDtkXjMz7lkV-P4,169
|
|
122
|
+
torchx_nightly-2025.5.7.dist-info/top_level.txt,sha256=pxew3bc2gsiViS0zADs0jb6kC5v8o_Yy_85fhHj_J1A,7
|
|
123
|
+
torchx_nightly-2025.5.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|