|
2 | 2 |
|
3 | 3 | # %% auto 0 |
4 | 4 | __all__= ['Placements','empty','find_var','call_endp','find_dname','find_msg_id','curr_dialog','find_msgs','msg_idx', |
5 | | -'read_msg','add_html','del_msg','run_msg','add_msg','update_msg','url2note','load_gist','gist_file', |
6 | | -'import_string','is_usable_tool','mk_toollist','import_gist','tool_info','asdict'] |
| 5 | +'read_msg','add_html','run_msg','add_msg','del_msg','update_msg','url2note','ast_py','ast_grep', |
| 6 | +'load_gist','gist_file','import_string','is_usable_tool','mk_toollist','import_gist','tool_info', |
| 7 | +'asdict'] |
7 | 8 |
|
8 | 9 | # %% ../nbs/00_core.ipynb |
9 | 10 | importjson,importlib,linecache |
@@ -106,14 +107,6 @@ def add_html( |
106 | 107 | "Send HTML to the browser to be swapped into the DOM" |
107 | 108 | call_endp('add_html_',dname,content=to_xml(content)) |
108 | 109 |
|
109 | | -# %% ../nbs/00_core.ipynb |
110 | | -defdel_msg( |
111 | | -msgid:str=None,# id of message to delete |
112 | | -dname:str=''# Running dialog to get info for; defaults to current dialog |
113 | | -): |
114 | | -"Delete a message from the dialog." |
115 | | -call_endp('rm_msg_',dname,raiseex=True,msid=msgid) |
116 | | - |
117 | 110 | # %% ../nbs/00_core.ipynb |
118 | 111 | defrun_msg( |
119 | 112 | msgid:str=None,# id of message to execute |
@@ -148,19 +141,27 @@ def add_msg( |
148 | 141 | time_run=time_run,is_exported=is_exported,skipped=skipped,pinned=pinned, |
149 | 142 | i_collapsed=i_collapsed,o_collapsed=o_collapsed,heading_collapsed=heading_collapsed) |
150 | 143 |
|
| 144 | +# %% ../nbs/00_core.ipynb |
| 145 | +defdel_msg( |
| 146 | +msgid:str=None,# id of message to delete |
| 147 | +dname:str=''# Running dialog to get info for; defaults to current dialog |
| 148 | +): |
| 149 | +"Delete a message from the dialog." |
| 150 | +call_endp('rm_msg_',dname,raiseex=True,msid=msgid) |
| 151 | + |
151 | 152 | # %% ../nbs/00_core.ipynb |
152 | 153 | @delegates(add_msg) |
153 | 154 | def_add_msg_unsafe( |
154 | 155 | content:str,# Content of the message (i.e the message prompt, code, or note text) |
155 | 156 | placement:str='add_after',# Can be 'add_after', 'add_before', 'at_start', 'at_end' |
156 | 157 | msgid:str=None,# id of message that placement is relative to (if None, uses current message) |
157 | 158 | run:bool=False,# For prompts, send it to the AI; for code, execute it (*DANGEROUS -- be careful of what you run!) |
| 159 | +dname:str='',# Running dialog to get info for; defaults to current dialog |
158 | 160 | **kwargs |
159 | 161 | ): |
160 | 162 | """Add/update a message to the queue to show after code execution completes, and optionally run it. Be sure to pass a `sid` (stable id) not a `mid` (which is used only for sorting, and can change). |
161 | 163 | *WARNING*--This can execute arbitrary code, so check carefully what you run!--*WARNING""" |
162 | 164 | ifplacementnotin ('at_start','at_end')andnotmsgid:msgid=find_msg_id() |
163 | | -dname=kwargs.pop('dname') |
164 | 165 | returncall_endp( |
165 | 166 | 'add_relative_',dname,content=content,placement=placement,msgid=msgid,run=run,**kwargs) |
166 | 167 |
|
@@ -201,6 +202,25 @@ def url2note( |
201 | 202 | res=read_url(url,as_md=True,extract_section=extract_section,selector=selector) |
202 | 203 | returnadd_msg(res) |
203 | 204 |
|
| 205 | +# %% ../nbs/00_core.ipynb |
| 206 | +defast_py(code:str): |
| 207 | +"Get an SgRoot root node for python `code`" |
| 208 | +fromast_grep_pyimportSgRoot |
| 209 | +returnSgRoot(code,"python").root() |
| 210 | + |
| 211 | +# %% ../nbs/00_core.ipynb |
| 212 | +defast_grep( |
| 213 | +pattern:str,# ast-grep pattern to search |
| 214 | +path=".",# path to recursively search for files |
| 215 | +lang="python"# language to search/scan |
| 216 | +): |
| 217 | +"Use the `ast-grep` command to find `pattern` in `path`" |
| 218 | +importjson,subprocess |
| 219 | +cmd=f"ast-grep --pattern '{pattern}' --lang{lang} --json=compact" |
| 220 | +ifpath!=".":cmd=f"cd{path} &&{cmd}" |
| 221 | +res=subprocess.run(cmd,shell=True,capture_output=True,text=True) |
| 222 | +returnjson.loads(res.stdout)ifres.stdoutelseres.stderr |
| 223 | + |
204 | 224 | # %% ../nbs/00_core.ipynb |
205 | 225 | defload_gist(gist_id:str): |
206 | 226 | "Retrieve a gist" |
|