ttw / app.py
freemt
Update altair
a4a35d8
raw history blame
No virus
3.69 kB
"""Talk to spaces VM via subprocess.check_output."""
# pylint: disable=wrong-import-position
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
# 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
logzero.loglevel() # default to 10
# def greet(command):
def process(command):
"""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()))
is_command = True
is_command = command.strip().splitlines().__len__() < 2 and len(command.strip()) < 100
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
except Exception as e:
out, err = "", str(e)
success = False
if success:
out = "\n".join(
(
out,
err,
)
).strip()
if not out:
out = "No output, that's all we know."
return out, None
# quick test altair altair-save tooltip
# from PIL import Image
import altair as alt
from altair_saver import save
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
return _, chart_df_png
iface = gr.Interface(
# fn=greet,
# inputs="text",
fn=process,
# inputs="text",
inputs=gr.inputs.Textbox(
lines=5,
placeholder="Type or paste input here then click 'Submit'",
default="python -m site",
label="command or multiline text",
),
# outputs="text",
# outputs=["text",],
# outputs=["text", "html"],
outputs=[
"text",
gr.outputs.Image("auto"),
],
examples=[
"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",
)
iface.launch(share=True, debug=True)
# iface.launch()