Skip to content

Commit aeaf0dc

Browse files
committed
py37 ast.Str
1 parent 81a5214 commit aeaf0dc

File tree

2 files changed

+14
-48
lines changed

2 files changed

+14
-48
lines changed

nbdev/maker.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,13 @@ def _import2relative(cells, lib_name=None):
177177
def _retr_mdoc(cells):
178178
"Search for `_doc_` variable, used to create module docstring"
179179
trees = L(cells).map(NbCell.parsed_).concat()
180-
r1 = [o for o in trees if isinstance(o, _assign_types)]
181-
res = [nested_attr(o, 'value.value') for o in r1 if getattr(o.targets[0],'id',None)=='_doc_']
182-
return f'"""{res[0]}"""\n\n' if res else ""
180+
for o in trees:
181+
if isinstance(o, _assign_types) and getattr(o.targets[0],'id',None)=='_doc_':
182+
v = try_attrs(o.value, 'value', 's') # py37 uses `ast.Str.s`
183+
return f'"""{v}"""\n\n'
184+
return ""
183185

184-
# %% ../nbs/09_API/02_maker.ipynb 34
186+
# %% ../nbs/09_API/02_maker.ipynb 33
185187
@patch
186188
def make(self:ModuleMaker, cells, all_cells=None, lib_path=None):
187189
"Write module containing `cells` with `__all__` generated from `all_cells`"
@@ -208,7 +210,7 @@ def make(self:ModuleMaker, cells, all_cells=None, lib_path=None):
208210
write_cells(cells[last_future:], self.hdr, f)
209211
f.write('\n')
210212

211-
# %% ../nbs/09_API/02_maker.ipynb 39
213+
# %% ../nbs/09_API/02_maker.ipynb 38
212214
@patch
213215
def _update_all(self:ModuleMaker, all_cells, alls):
214216
return pformat(alls + self.make_all(all_cells), width=160)
@@ -220,7 +222,7 @@ def _make_exists(self:ModuleMaker, cells, all_cells=None):
220222
update_var('__all__', partial(self._update_all, all_cells), fn=self.fname)
221223
with self.fname.open('a') as f: write_cells(cells, self.hdr, f)
222224

223-
# %% ../nbs/09_API/02_maker.ipynb 45
225+
# %% ../nbs/09_API/02_maker.ipynb 44
224226
def _basic_export_nb2(fname, name, dest=None):
225227
"A basic exporter to bootstrap nbdev using `ModuleMaker`"
226228
if dest is None: dest = get_config().lib_path

nbs/09_API/02_maker.ipynb

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -469,54 +469,18 @@
469469
"def _retr_mdoc(cells):\n",
470470
" \"Search for `_doc_` variable, used to create module docstring\"\n",
471471
" trees = L(cells).map(NbCell.parsed_).concat()\n",
472-
" r1 = [o for o in trees if isinstance(o, _assign_types)]\n",
473-
" res = [nested_attr(o, 'value.value') for o in r1 if getattr(o.targets[0],'id',None)=='_doc_']\n",
474-
" return f'\"\"\"{res[0]}\"\"\"\\n\\n' if res else \"\""
472+
" for o in trees:\n",
473+
" if isinstance(o, _assign_types) and getattr(o.targets[0],'id',None)=='_doc_':\n",
474+
" v = try_attrs(o.value, 'value', 's') # py37 uses `ast.Str.s`\n",
475+
" return f'\"\"\"{v}\"\"\"\\n\\n' \n",
476+
" return \"\""
475477
]
476478
},
477479
{
478480
"cell_type": "code",
479481
"execution_count": null,
480482
"metadata": {},
481-
"outputs": [
482-
{
483-
"ename": "Exception",
484-
"evalue": "([\"Assign(targets=[Name(id='a', ctx=Store())], value=Constant(value='b'))\", \"Assign(targets=[Name(id='_doc_', ctx=Store())], value=Constant(value='hi'))\"], [<ast.Assign object at 0x114aaa6a0>, <ast.Assign object at 0x114aaa610>], [<ast.Assign object at 0x114aaa6a0>, <ast.Assign object at 0x114aaa610>], ['hi'])",
485-
"output_type": "error",
486-
"traceback": [
487-
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
488-
"\u001b[0;31mException\u001b[0m Traceback (most recent call last)",
489-
"Input \u001b[0;32mIn [30]\u001b[0m, in \u001b[0;36m<cell line: 5>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m r1 \u001b[38;5;241m=\u001b[39m [o \u001b[38;5;28;01mfor\u001b[39;00m o \u001b[38;5;129;01min\u001b[39;00m trees \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(o, _assign_types)]\n\u001b[1;32m 4\u001b[0m res \u001b[38;5;241m=\u001b[39m [nested_attr(o, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvalue.value\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m o \u001b[38;5;129;01min\u001b[39;00m r1 \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(o\u001b[38;5;241m.\u001b[39mtargets[\u001b[38;5;241m0\u001b[39m],\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mid\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;28;01mNone\u001b[39;00m)\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_doc_\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(([ast\u001b[38;5;241m.\u001b[39mdump(o) \u001b[38;5;28;01mfor\u001b[39;00m o \u001b[38;5;129;01min\u001b[39;00m r1], trees, r1, res))\n",
490-
"\u001b[0;31mException\u001b[0m: ([\"Assign(targets=[Name(id='a', ctx=Store())], value=Constant(value='b'))\", \"Assign(targets=[Name(id='_doc_', ctx=Store())], value=Constant(value='hi'))\"], [<ast.Assign object at 0x114aaa6a0>, <ast.Assign object at 0x114aaa610>], [<ast.Assign object at 0x114aaa6a0>, <ast.Assign object at 0x114aaa610>], ['hi'])"
491-
]
492-
}
493-
],
494-
"source": [
495-
"cells = make_code_cells(\"a = 'b'\\n_doc_ = 'hi'\")\n",
496-
"trees = L(cells).map(NbCell.parsed_).concat()\n",
497-
"r1 = [o for o in trees if isinstance(o, _assign_types)]\n",
498-
"res = [nested_attr(o, 'value.value') for o in r1 if getattr(o.targets[0],'id',None)=='_doc_']\n",
499-
"raise Exception(([ast.dump(o) for o in r1], trees, r1, res))"
500-
]
501-
},
502-
{
503-
"cell_type": "code",
504-
"execution_count": null,
505-
"metadata": {},
506-
"outputs": [
507-
{
508-
"ename": "Exception",
509-
"evalue": "(['a', '_doc_'], [<ast.Assign object at 0x11e5fda60>, <ast.Assign object at 0x1037c4220>], [<ast.Assign object at 0x11e5fda60>, <ast.Assign object at 0x1037c4220>], ['hi'])",
510-
"output_type": "error",
511-
"traceback": [
512-
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
513-
"\u001b[0;31mException\u001b[0m Traceback (most recent call last)",
514-
"Input \u001b[0;32mIn [33]\u001b[0m, in \u001b[0;36m<cell line: 3>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m#|hide\u001b[39;00m\n\u001b[1;32m 2\u001b[0m c \u001b[38;5;241m=\u001b[39m make_code_cells(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma = \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m_doc_ = \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhi\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m----> 3\u001b[0m test_eq(\u001b[43m_retr_mdoc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mc\u001b[49m\u001b[43m)\u001b[49m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhi\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n",
515-
"Input \u001b[0;32mIn [32]\u001b[0m, in \u001b[0;36m_retr_mdoc\u001b[0;34m(cells)\u001b[0m\n\u001b[1;32m 5\u001b[0m r1 \u001b[38;5;241m=\u001b[39m [o \u001b[38;5;28;01mfor\u001b[39;00m o \u001b[38;5;129;01min\u001b[39;00m trees \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(o, _assign_types)]\n\u001b[1;32m 6\u001b[0m res \u001b[38;5;241m=\u001b[39m [nested_attr(o, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvalue.value\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m o \u001b[38;5;129;01min\u001b[39;00m r1 \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(o\u001b[38;5;241m.\u001b[39mtargets[\u001b[38;5;241m0\u001b[39m],\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mid\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;28;01mNone\u001b[39;00m)\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_doc_\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m----> 7\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(([\u001b[38;5;28mgetattr\u001b[39m(o\u001b[38;5;241m.\u001b[39mtargets[\u001b[38;5;241m0\u001b[39m],\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mid\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;28;01mfor\u001b[39;00m o \u001b[38;5;129;01min\u001b[39;00m r1], trees, r1, res))\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mres[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
516-
"\u001b[0;31mException\u001b[0m: (['a', '_doc_'], [<ast.Assign object at 0x11e5fda60>, <ast.Assign object at 0x1037c4220>], [<ast.Assign object at 0x11e5fda60>, <ast.Assign object at 0x1037c4220>], ['hi'])"
517-
]
518-
}
519-
],
483+
"outputs": [],
520484
"source": [
521485
"#|hide\n",
522486
"c = make_code_cells(\"a = 'b'\\n_doc_ = 'hi'\")\n",

0 commit comments

Comments
 (0)