File size: 2,654 Bytes
b560569
a39570d
506f1ee
751e28f
a0b418d
b560569
8a531f0
 
b560569
0f9e24f
a0b418d
8a531f0
 
 
 
 
b560569
8a531f0
b560569
73e88eb
6e2376b
8a531f0
 
 
 
 
 
 
 
 
 
 
 
 
734a45c
 
0f9e24f
6e2376b
73e88eb
734a45c
b560569
8a531f0
 
 
 
 
 
 
 
 
 
 
 
 
73e88eb
 
 
 
 
e3447a5
e1e0cc1
8a531f0
 
 
 
 
e1e0cc1
8a531f0
d45a226
73e88eb
 
7ab0240
8a531f0
 
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
import gradio as gr
from Data_Fetching_and_Rendering import fetch_org_urn

# shared state
token_received = {"status": False, "token": "", "client_id": ""}

# 1) this will be called by POST
def receive_token(accessToken: str, client_id: str):
    token_received["status"] = True
    token_received["token"] = accessToken
    token_received["client_id"] = client_id
    return {
        "status": "✅ Code received",
        "token": accessToken,
        "client_id": client_id
    }

# 2) poll for status
def check_status():
    return "✅ Code received" if token_received["status"] else "❌ Waiting for code…"

def show_token():
    return token_received["token"] if token_received["status"] else ""

def show_client_id():
    return token_received["client_id"] if token_received["status"] else ""

# 3) fetch after token arrives
def fetch_and_render():
    if not token_received["status"]:
        return "", ""
    return fetch_org_urn(token_received["client_id"], token_received["token"])

# 4) reset everything
def reset_status():
    token_received["status"] = False
    token_received["token"] = ""
    token_received["client_id"] = ""
    return "❌ Waiting for code…", "", "", "", ""

with gr.Blocks() as demo:
    # Hidden inputs for POST
    hidden_token     = gr.Textbox(visible=False, elem_id="hidden_token")
    hidden_client_id = gr.Textbox(visible=False, elem_id="hidden_client_id")
    hidden_btn       = gr.Button(visible=False, elem_id="hidden_btn")

    # Display elements
    status_box     = gr.Textbox(value=check_status(), label="Status", interactive=False)
    token_display  = gr.Textbox(value=show_token(), label="Received Token", interactive=False)
    client_display = gr.Textbox(value=show_client_id(), label="Client ID", interactive=False)
    urn_display    = gr.Textbox(value="", label="Org URN", interactive=False)
    name_display   = gr.Textbox(value="", label="Org Name", interactive=False)

    # Wire hidden POST handler
    hidden_btn.click(
        fn=receive_token,
        inputs=[hidden_token, hidden_client_id],
        outputs=[status_box, token_display, client_display]
    )

    with gr.Row():
        gr.Button("Refresh Status").click(fn=check_status, outputs=status_box)
        gr.Button("Reset").click(
            fn=reset_status,
            outputs=[status_box, token_display, client_display, urn_display, name_display]
        )

    # Timer triggers polling and fetch
    timer = gr.Timer(1.0)
    timer.tick(fn=check_status, outputs=status_box)
    timer.tick(fn=fetch_and_render, outputs=[urn_display, name_display])

    # Launch
    demo.launch(server_name="0.0.0.0", server_port=7860)