Spaces:
Build error
Build error
| """Talk to spaces VM via subprocess.check_output.""" | |
| # pylint: disable=wrong-import-position | |
| from typing import Optional, Tuple | |
| import sys | |
| from pathlib import Path | |
| if "." not in sys.path: | |
| sys.path.insert(0, ".") | |
| # import httpx | |
| import subprocess as sp | |
| from shlex import split | |
| import pandas as pd | |
| import matplotlib | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| # from textwrap import dedent | |
| from inspect import cleandoc | |
| import gradio as gr | |
| import logzero | |
| from logzero import logger | |
| # from gradiobee.seg_text import seg_text | |
| matplotlib.use("Agg") # non-interactive for plt.savefig | |
| sns.set() | |
| sns.set_style("darkgrid") | |
| logzero.loglevel() # default to 10 | |
| # def greet(command): | |
| def process(command) -> Tuple[str, Optional[str]]: | |
| """Probe vm.""" | |
| logger.info("input: %s", command) | |
| try: | |
| command = str(command).strip() | |
| except Exception as e: | |
| _ = str(e) | |
| return _ | |
| if not command: | |
| return "gimme something to start with..." | |
| try: | |
| # out = sp.check_output(split(command), encoding="utf8", stderr=STDOUT) | |
| proc = sp.Popen( | |
| split(command), encoding="utf8", stdout=-1, stderr=-1 | |
| ) # sp.PIPE: -1 | |
| out, err = proc.communicate() | |
| # success = True | |
| return f"[{out}], [{err}]" | |
| except Exception as e: | |
| out, err = "", str(e) | |
| # success = False | |
| # return f"[{out}]", f"[{err}]" | |
| return f"[{out}], [{err}]" | |
| def process1(command) -> Tuple[str, Optional[str]]: | |
| """Probe vm.""" | |
| # single line: command | |
| # logger.info("input:\n\t %s", command) | |
| # print("print input:\n\t %s" % command) | |
| # print("print input*:\n\t %s" % "*".join(command.splitlines())) | |
| logger.info("input: %s", command) | |
| try: | |
| command = str(command).strip() | |
| except Exception as e: | |
| _ = str(e) | |
| return _, None | |
| if not command: | |
| return "gimme something to start with...", None | |
| is_command = True | |
| # is_command = command.strip().splitlines().__len__() < 2 and len(command.strip()) < 500 | |
| if is_command: | |
| try: | |
| # out = sp.check_output(split(command), encoding="utf8", stderr=STDOUT) | |
| proc = sp.Popen( | |
| split(command), encoding="utf8", stdout=-1, stderr=-1 | |
| ) # sp.PIPE: -1 | |
| out, err = proc.communicate() | |
| # success = True | |
| return f"[{out}], [{err}]", None | |
| except Exception as e: | |
| out, err = "", str(e) | |
| # success = False | |
| # return f"[{out}]", f"[{err}]" | |
| return f"[{out}], [{err}]", None | |
| # quick test altair altair-save tooltip | |
| # from PIL import Image | |
| # import altair as alt | |
| # from altair_saver import save | |
| # alt.renderers.enable('altair_saver', fmts=['vega-lite', 'png']) | |
| df_ = pd.DataFrame(data={'x': [1, 2], 'y': [3, 4], "cos": [0.1, 0.5]}) | |
| # chart_df = alt.Chart(df_).mark_circle(size=60).encode( | |
| # x='x', | |
| # y='y', | |
| # color='cos', | |
| # tooltip=['x', 'y', 'cos', ] | |
| # ) | |
| # .interactive() | |
| # save(chart_df, "chart_df.html") | |
| # chart_df_html = Path("chart_df.html").read_text("utf") | |
| # save(chart_df, "chart_df.png") | |
| # chart_df_png = Path("chart_df.png").read_bytes() | |
| # chart_df_png = Image.open("chart_df.png") | |
| # chart_df_png = "chart_df.png" | |
| # scatter_plot.save('simple_scatter_plot_with_altairchart.html') | |
| # chart_df.save("chart_df.html") # does not work, constains js | |
| # chart_df_html = Path("chart_df.html").read_text("utf") | |
| # chart_df.save("chart_df.png") # | |
| # chart_df_png = "chart_df.png" | |
| # not is_command or not flag: text, do seg_text | |
| _ = "\n\n".join(seg_text(command.strip())) | |
| logger.debug(_) | |
| # logger.debug(chart_df_html) | |
| # print(_) | |
| # print(chart_df_html) | |
| # _ = seg_text(command.strip()) | |
| _ = cleandoc( | |
| f"""seg_text output (segmented sents): | |
| {_} | |
| """ | |
| ).strip() | |
| # return _, chart_df_html | |
| plt.figure() | |
| sns.scatterplot(data=df_, x='x', y='y') | |
| Path("img").mkdir(exist_ok=True) | |
| plt.savefig("img/df.png") | |
| plt.close() | |
| df_png = "img/df.png" | |
| # return _, chart_df_png | |
| return _, df_png | |
| iface = gr.Interface( | |
| # fn=greet, | |
| # inputs="text", | |
| fn=process, | |
| # inputs="text", | |
| inputs=gr.inputs.Textbox( | |
| # inputs=gr.components.Textbox( | |
| lines=1, | |
| placeholder="Type or paste input here then click 'Submit'", | |
| default="python -V # show version", | |
| label="command or multiline text", | |
| ), | |
| # outputs="text", | |
| # outputs=["text",], | |
| # outputs=["text", "html"], | |
| outputs=[ | |
| "text", | |
| # gr.outputs.Image("auto"), | |
| # gr.outputs.Image('pil'), | |
| ], | |
| examples=[ | |
| "python -m site", | |
| """python -c "import gradio; print(gradio.__version__")""", | |
| "python -V ", | |
| "cat /proc/version", | |
| "free # show free memory", | |
| "uname -m", | |
| "df -h .", | |
| "cat /proc/cpuinfo", | |
| """python -c "from psutil import virtual_memory; print(virtual_memory())" """, | |
| ], | |
| title="probe the system", | |
| description="Talk to the system via subprocess.check_output ", | |
| # layout="vertical", | |
| # allow_flagging="manual", | |
| allow_flagging="never", | |
| ) | |
| # iface.launch(share=True, debug=True) | |
| # import platform | |
| # logger.info("platform.node(): %s", platform.node()) | |
| # if 'amzn2' in platform.uname().__str__(): "huggingdace spaces" | |
| iface.launch(share=False, debug=True) | |
| # iface.launch() | |