youngtsai commited on
Commit
ae82ba8
·
1 Parent(s): 6b56a09
Files changed (2) hide show
  1. app.py +74 -0
  2. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import gradio as gr
3
+ import json
4
+ import os
5
+
6
+ # Env Vars
7
+ METABASE_USERNAME = os.getenv('METABASE_USERNAME')
8
+ METABASE_PASSWORD = os.getenv('METABASE_PASSWORD')
9
+
10
+ def query_metabase(username, password, class_code, card_id, user_id):
11
+ try:
12
+ # 获取会话令牌
13
+ session_response = requests.post(
14
+ 'https://metabase.cloud.junyiacademy.org/api/session',
15
+ headers={'Content-Type': 'application/json'},
16
+ json={'username': username, 'password': password}
17
+ )
18
+ session_response.raise_for_status()
19
+ session_token = session_response.json()['id']
20
+ print(f"Session token: {session_token}")
21
+
22
+ # 打印请求信息
23
+ request_payload = {
24
+ "parameters": [
25
+ {
26
+ "type": "category",
27
+ "target": ["variable", ["template-tag", "class_code"]],
28
+ "value": class_code
29
+ },
30
+ {
31
+ "type": "category",
32
+ "target": ["variable", ["template-tag", "user_id"]],
33
+ "value": user_id
34
+ }
35
+ ]
36
+ }
37
+ print(f"Request payload: {json.dumps(request_payload, indent=2)}")
38
+
39
+ # 使用提供的 card_id 查询 Metabase 卡片
40
+ query_response = requests.post(
41
+ f'https://metabase.cloud.junyiacademy.org/api/card/{card_id}/query/json',
42
+ headers={
43
+ 'Content-Type': 'application/json',
44
+ 'X-Metabase-Session': session_token
45
+ },
46
+ json=request_payload
47
+ )
48
+
49
+ # 打印响应状态码和内容
50
+ print(f"Response status code: {query_response.status_code}")
51
+ print(f"Response content: {query_response.text}")
52
+
53
+ query_response.raise_for_status()
54
+ return query_response.json()
55
+ except requests.RequestException as e:
56
+ print(f"Failed to query Metabase card: {str(e)}")
57
+ return {"error": f"Failed to query Metabase card: {str(e)}"}
58
+ except Exception as e:
59
+ print(f"Error: {str(e)}")
60
+ return {"error": str(e)}
61
+
62
+ iface = gr.Interface(
63
+ fn=query_metabase,
64
+ inputs=[
65
+ gr.Textbox(label="Metabase Username", value=METABASE_USERNAME),
66
+ gr.Textbox(label="Metabase Password", type="password", value=METABASE_PASSWORD),
67
+ gr.Textbox(label="Class Code", value="class2"),
68
+ gr.Textbox(label="Card ID", value="6267"),
69
+ gr.Textbox(label="User ID", value="stu26")
70
+ ],
71
+ outputs="json"
72
+ )
73
+
74
+ iface.launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ requests
4
+ gradio