import gradio as gr
from gradio import routes
from typing import List, Type

import requests, os, re, asyncio, queue
import math
import time
import datetime
import requests, json

loop = asyncio.get_event_loop()
# Monkey patch
def get_types(cls_set: List[Type], component: str):
    docset = []
    types = []
    if component == "input":
        for cls in cls_set:
            doc = inspect.getdoc(cls)
            doc_lines = doc.split("\n")
            docset.append(doc_lines[1].split(":")[-1])
            types.append(doc_lines[1].split(")")[0].split("(")[-1])
    else:
        for cls in cls_set:
            doc = inspect.getdoc(cls)
            doc_lines = doc.split("\n")
            docset.append(doc_lines[-1].split(":")[-1])
            types.append(doc_lines[-1].split(")")[0].split("(")[-1])
    return docset, types
routes.get_types = get_types

def example_func(id, pw):
    if not id in user_data:
        user_data[id] = pw
        return "ok"
    else:
        return "fail"

with gr.Blocks() as demo:
    count = 0
    gr.Markdown(
    f"sample app"
    )
    aa = gr.Interface(
      fn=example_func,
      inputs=["text", "text"],
      outputs="text",
      description="example_func",
    )
    demo.queue(max_size=32).launch()