5
5
"""
6
6
import re
7
7
import ast
8
- from .. externals import OrderedDict
8
+ from collections import OrderedDict
9
9
10
10
11
11
ASCCONV_RE = re .compile (
@@ -94,15 +94,20 @@ def assign2atoms(assign_ast, default_class=int):
94
94
target = target .value
95
95
prev_target_type = list
96
96
else :
97
- raise AscconvParseError (
98
- 'Unexpected LHS element {0}' .format (target ))
97
+ raise AscconvParseError (f'Unexpected LHS element { target } ' )
99
98
return reversed (atoms )
100
99
101
100
102
101
def _create_obj_in (atom , root ):
103
- """ Create object defined in `atom` in dict-like given by `root`
102
+ """ Find / create object defined in `atom` in dict-like given by `root`
103
+
104
+ Returns corresponding value if there is already a key matching
105
+ `atom.obj_id` in `root`.
104
106
105
- Return defined object.
107
+ Otherwise, create new object with ``atom.obj_type`, insert into dictionary,
108
+ and return new object.
109
+
110
+ Can therefore modify `root` in place.
106
111
"""
107
112
name = atom .obj_id
108
113
obj = root .get (name , NoValue )
@@ -114,9 +119,15 @@ def _create_obj_in(atom, root):
114
119
115
120
116
121
def _create_subscript_in (atom , root ):
117
- """ Create object defined in `atom` at index ``atom.obj_id`` in list `root`
122
+ """ Find / create and insert object defined by `atom` from list `root`
123
+
124
+ The `atom` has an index, defined in ``atom.obj_id``. If `root` is long
125
+ enough to contain this index, return the object at that index. Otherwise,
126
+ extend `root` with None elements to contain index ``atom.obj_id``, then
127
+ create a new object via ``atom.obj_type()``, insert at the end of the list,
128
+ and return this object.
118
129
119
- Return defined object .
130
+ Can therefore modify `root` in place .
120
131
"""
121
132
curr_n = len (root )
122
133
index = atom .obj_id
@@ -154,7 +165,7 @@ def obj_from_atoms(atoms, namespace):
154
165
root_obj = _create_subscript_in (el , root_obj )
155
166
if not isinstance (root_obj , el .obj_type ):
156
167
raise AscconvParseError (
157
- 'Unexpected type for {0 } in {1}' . format ( el . obj_id , prev_root ) )
168
+ f 'Unexpected type for { el . obj_id } in { prev_root } ' )
158
169
return prev_root , el .obj_id
159
170
160
171
@@ -166,7 +177,7 @@ def _get_value(assign):
166
177
return value .s
167
178
if isinstance (value , ast .UnaryOp ) and isinstance (value .op , ast .USub ):
168
179
return - value .operand .n
169
- raise AscconvParseError ('Unexpected RHS of assignment: {0}' . format ( value ) )
180
+ raise AscconvParseError (f 'Unexpected RHS of assignment: { value } ' )
170
181
171
182
172
183
def parse_ascconv (ascconv_str , str_delim = '"' ):
0 commit comments