diff --git a/05_inspecttools.ipynb b/05_inspecttools.ipynb index 4123838..9b3c018 100644 --- a/05_inspecttools.ipynb +++ b/05_inspecttools.ipynb @@ -156,6 +156,7 @@ " - `resolve(\"sympy.sets.sets.Interval\")` -> ``\n", " - `resolve(\"mylist[2]\")` -> third element of mylist\"\"\"\n", " global _last\n", + " if not isinstance(sym, str): return (_last := sym)\n", " if (sym := sym.strip()) == '_last': return _last\n", " g = _find_frame_dict('__dialog_name')\n", " if match := re.match(r'^(\\w+)\\[(\\d+)\\]$', sym):\n", @@ -313,7 +314,7 @@ " elif hasattr(obj, '__module__') and not inspect.ismodule(obj): obj = obj.__class__\n", " try: fname = inspect.getfile(obj)\n", " except (OSError, TypeError): fname = \"\"\n", - " try: return f\"File: {fname}\\n\\n{inspect.getsource(obj)}\"\n", + " try: return f\"# File: {fname}\\n\\n{inspect.getsource(obj)}\"\n", " except (OSError, TypeError): pass\n", " name = getattr(obj, '__name__', None)\n", " if not name: raise OSError(f\"Cannot get source for {sym}\")\n", @@ -322,7 +323,7 @@ " src = ''.join(lines)\n", " if match := re.search(pat, src, re.MULTILINE):\n", " start = src[:match.start()].count('\\n')\n", - " if extracted := _src_from_lines(lines, start): return f\"File: {fname}\\n\\n{extracted}\"\n", + " if extracted := _src_from_lines(lines, start): return f\"# File: {fname}\\n\\n{extracted}\"\n", " raise OSError(f\"Source for {name} not found\")" ] }, @@ -344,7 +345,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "File: /Users/jhoward/aai-ws/fastcore/fastcore/foundation.py\n", + "# File: /Users/pczapla/aai-ws/fastcore/fastcore/foundation.py\n", "\n", "@patch\n", "@curryable\n", @@ -360,6 +361,32 @@ "print(symsrc('a.argfirst'))" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1f9820e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# File: /Users/pczapla/aai-ws/fastcore/fastcore/foundation.py\n", + "\n", + "@patch\n", + "@curryable\n", + "def argfirst(self:L, f, negate=False):\n", + " \"Return index of first matching item\"\n", + " if negate: f = not_(f)\n", + " return first(i for i,o in self.enumerate() if f(o))\n", + "\n" + ] + } + ], + "source": [ + "print(symsrc(a.argfirst))" + ] + }, { "cell_type": "code", "execution_count": null, @@ -370,7 +397,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "File: /var/folders/51/b2_szf2945n072c0vj2cyty40000gn/T/ipykernel_33003/2711726673.py\n", + "# File: /var/folders/q_/6ypbtk8976j5j9zhzn30df440000gn/T/ipykernel_13390/2711726673.py\n", "\n", "class B:\n", " def a(): ...\n", @@ -395,7 +422,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "File: /var/folders/51/b2_szf2945n072c0vj2cyty40000gn/T/ipykernel_33003/242320393.py\n", + "# File: /var/folders/q_/6ypbtk8976j5j9zhzn30df440000gn/T/ipykernel_13390/242320393.py\n", "\n", "def f():\n", " \"testing\"\n", @@ -431,12 +458,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "File: /Users/jhoward/aai-ws/toolslm/toolslm/xml.py\n", + "# File: /Users/pczapla/aai-ws/toolslm/toolslm/xml.py\n", "\n", "# AUTOGENERATED! DO NOT EDIT! File to edit: ../00_xml.ipynb.\n", "\n", "# %% auto #0\n", - "__all__ = ['doctype', 'json_to_xml', 'get_mime_text', 'cell2out', 'cell2x\n" + "__all__ = ['doctype', 'json_to_xml', 'get_mime_text', 'cell2out', 'cell\n" ] } ], @@ -761,11 +788,13 @@ { "data": { "text/plain": [ - "'File: /var/folders/51/b2_szf2945n072c0vj2cyty40000gn/T/ipykernel_33003/340145363.py\\n\\nhandlers = dict(int=lambda x: x*2, str=lambda x: x.upper(), list=lambda x: len(x))\\n'" + "'# File: /var/folders/q_/6ypbtk8976j5j9zhzn30df440000gn/T/ipykernel_13390/340145363.py\\n\\nhandlers = dict(int=lambda x: x*2, str=lambda x: x.upper(), list=lambda x: len(x))\\n'" ] }, "execution_count": null, - "metadata": {}, + "metadata": { + "__type": "str" + }, "output_type": "execute_result" } ], diff --git a/toolslm/inspecttools.py b/toolslm/inspecttools.py index b436a6f..d702b45 100644 --- a/toolslm/inspecttools.py +++ b/toolslm/inspecttools.py @@ -54,6 +54,7 @@ def resolve( - `resolve("sympy.sets.sets.Interval")` -> `` - `resolve("mylist[2]")` -> third element of mylist""" global _last + if not isinstance(sym, str): return (_last := sym) if (sym := sym.strip()) == '_last': return _last g = _find_frame_dict('__dialog_name') if match := re.match(r'^(\w+)\[(\d+)\]$', sym): @@ -99,7 +100,7 @@ def symsrc( elif hasattr(obj, '__module__') and not inspect.ismodule(obj): obj = obj.__class__ try: fname = inspect.getfile(obj) except (OSError, TypeError): fname = "" - try: return f"File: {fname}\n\n{inspect.getsource(obj)}" + try: return f"# File: {fname}\n\n{inspect.getsource(obj)}" except (OSError, TypeError): pass name = getattr(obj, '__name__', None) if not name: raise OSError(f"Cannot get source for {sym}") @@ -108,7 +109,7 @@ def symsrc( src = ''.join(lines) if match := re.search(pat, src, re.MULTILINE): start = src[:match.start()].count('\n') - if extracted := _src_from_lines(lines, start): return f"File: {fname}\n\n{extracted}" + if extracted := _src_from_lines(lines, start): return f"# File: {fname}\n\n{extracted}" raise OSError(f"Source for {name} not found") # %% ../05_inspecttools.ipynb #bbf67405