import gradio as gr import json 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: dict, client_id: str): try: token_dict = json.loads(accessToken.replace("'", '"')) # crude but works if trusted input except json.JSONDecodeError as e: print("Failed to parse accessToken:", e) return { "status": "❌ Invalid token format", "token": "", "client_id": client_id } token_received["status"] = True token_received["token"] = token_dict token_received["client_id"] = client_id return { "status": "✅ Code received", "token": token_dict.get("access_token", ""), "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 triggers polling and fetch timer = gr.Timer(1.0) timer.tick(fn=check_status, outputs=status_box) timer.tick(fn=show_token, outputs=token_display) # ← ADD BACK timer.tick(fn=show_client_id, outputs=client_display) # ← ADD BACK timer.tick(fn=fetch_and_render, outputs=[urn_display, name_display]) # Launch demo.launch(server_name="0.0.0.0", server_port=7860)