File size: 4,144 Bytes
937eac0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29e7240
937eac0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
"""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

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):
    """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
    # 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(
        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()