@@ -19,9 +19,14 @@ def _check_path(path: str):
19
19
"The label must be a path of valid python identifier to be used as a getter"
20
20
"in the following template: span.[YOUR_LABEL], such as `label_` or `_.negated"
21
21
)
22
- if path [0 ].isalpha () or path [0 ] == "_" :
23
- return "." + path
24
- return path
22
+ parts = path .split ("." )
23
+ new_path = "span"
24
+ for part in parts :
25
+ if " " in part :
26
+ new_path = "getattr(" + new_path + f", { part !r} )"
27
+ elif len (part ) > 0 :
28
+ new_path += "." + part
29
+ return new_path
25
30
26
31
27
32
def make_binding_getter (attribute : Union [str , Binding ]):
@@ -47,7 +52,7 @@ def make_binding_getter(attribute: Union[str, Binding]):
47
52
exec (
48
53
f"def getter(span):\n "
49
54
f" try:\n "
50
- f" return span { path } == value\n "
55
+ f" return { path } == value\n "
51
56
f" except AttributeError:\n "
52
57
f" return False\n " ,
53
58
ctx ,
@@ -60,7 +65,7 @@ def make_binding_getter(attribute: Union[str, Binding]):
60
65
exec (
61
66
f"def getter(span):\n "
62
67
f" try:\n "
63
- f" return span { path } \n "
68
+ f" return { path } \n "
64
69
f" except AttributeError:\n "
65
70
f" return None\n " ,
66
71
ctx ,
@@ -88,12 +93,12 @@ def make_binding_setter(binding: Binding):
88
93
if isinstance (binding , tuple ):
89
94
path , value = binding
90
95
path = _check_path (path )
91
- fn_string = f"""def setter(span): span { path } = value"""
96
+ fn_string = f"""def setter(span): { path } = value"""
92
97
ctx = {"value" : value }
93
98
exec (fn_string , ctx , ctx )
94
99
else :
95
100
path = _check_path (binding )
96
- fn_string = f"""def setter(span, value): span { path } = value"""
101
+ fn_string = f"""def setter(span, value): { path } = value"""
97
102
ctx = {}
98
103
exec (fn_string , ctx , ctx )
99
104
return ctx ["setter" ]
0 commit comments