ttw / app.py
ffreemt
Update app.py
6f82744
"""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()