puffy310 commited on
Commit
63d5f31
Β·
verified Β·
1 Parent(s): 55b14bf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -50
app.py CHANGED
@@ -1,66 +1,79 @@
1
  import gradio as gr
2
  import subprocess
 
 
3
 
4
- # Run setup.sh once at startup
5
- def run_setup():
6
  result = subprocess.run(
7
- ["sh", "scripts/setup.sh"],
8
  capture_output=True,
9
  text=True
10
  )
11
- return result.stdout + "\n" + result.stderr
12
 
13
- # Run setup to compile COBOL files
14
- print("πŸš€ Running setup...")
15
- setup_output = run_setup()
16
- print(setup_output)
17
 
18
- # Helper function to run COBOL binaries
19
- def run_cobol_binary(binary_name, input_data=None):
20
- try:
21
- if input_data:
22
- result = subprocess.run(
23
- [f"./cobol/{binary_name}"],
24
- input=input_data,
25
- capture_output=True,
26
- text=True,
27
- timeout=10
28
- )
29
- else:
30
- result = subprocess.run(
31
- [f"./cobol/{binary_name}"],
32
- capture_output=True,
33
- text=True,
34
- timeout=10
35
- )
36
- return result.stdout or result.stderr
37
- except Exception as e:
38
- return str(e)
39
 
40
- # --- Account Balance ---
41
- def get_balance(account_number):
42
- input_str = f"{account_number}\n"
43
- return run_cobol_binary("account", input_str)
 
44
 
45
- # --- Loan Status ---
46
- def check_loan_status(account_number):
47
- input_str = f"{account_number}\n"
48
- return run_cobol_binary("loan", input_str)
 
49
 
50
- # --- Gradio UI ---
51
- with gr.Blocks(title="COBOL Bank Demo") as demo:
52
- gr.Markdown("# πŸ’° COBOL Banking System\nRun real COBOL programs in your browser!")
 
 
 
 
 
53
 
54
- with gr.Tab("Account Balance"):
55
- acc_input = gr.Number(label="Enter Account Number")
56
- acc_output = gr.Textbox(label="Balance Info")
57
- acc_btn = gr.Button("Check Balance")
58
- acc_btn.click(fn=get_balance, inputs=acc_input, outputs=acc_output)
59
 
60
- with gr.Tab("Loan Status"):
61
- loan_input = gr.Number(label="Enter Account Number")
62
- loan_output = gr.Textbox(label="Loan Info")
63
- loan_btn = gr.Button("Check Loan")
64
- loan_btn.click(fn=check_loan_status, inputs=loan_input, outputs=loan_output)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
  demo.launch()
 
1
  import gradio as gr
2
  import subprocess
3
+ import pandas as pd
4
+ from pathlib import Path
5
 
6
+ def run_cobol_binary(action, data):
 
7
  result = subprocess.run(
8
+ ["./cobol/account", action, data],
9
  capture_output=True,
10
  text=True
11
  )
12
+ return result.stdout or result.stderr
13
 
14
+ def create_account(number, name, balance):
15
+ input_str = f"{number},{name},{balance}"
16
+ result = subprocess.run(["./cobol/account", "CREATE", input_str], capture_output=True, text=True)
17
+ return "βœ… Account created"
18
 
19
+ def create_loan(lid, acc_id, amount, rate, status):
20
+ input_str = f"{lid},{acc_id},{amount},{rate},{status}"
21
+ result = subprocess.run(["./cobol/loan", "CREATE", input_str], capture_output=True, text=True)
22
+ return "βœ… Loan created"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
+ def export_accounts():
25
+ df = pd.read_csv("data/accounts.csv")
26
+ path = "export_accounts.csv"
27
+ df.to_csv(path, index=False)
28
+ return path
29
 
30
+ def export_loans():
31
+ df = pd.read_csv("data/loans.csv")
32
+ path = "export_loans.csv"
33
+ df.to_csv(path, index=False)
34
+ return path
35
 
36
+ def get_log():
37
+ with open("data/transactions.log", "r") as f:
38
+ content = f.read()
39
+ return f"""
40
+ <div class="transaction-log">
41
+ {content.replace('\n', '<br>')}
42
+ </div>
43
+ """
44
 
45
+ with gr.Blocks(title="COBOL Bank Demo", css="file=static/style.css") as demo:
46
+ gr.Markdown("# πŸ’° COBOL Banking System\nCreate, read, and export accounts and loans")
 
 
 
47
 
48
+ with gr.Tab("Accounts"):
49
+ with gr.Row():
50
+ acc_num = gr.Number(label="Account Number")
51
+ acc_name = gr.Textbox(label="Name")
52
+ acc_bal = gr.Number(label="Balance")
53
+ acc_btn = gr.Button("Create Account")
54
+ acc_btn.click(fn=create_account, inputs=[acc_num, acc_name, acc_bal], outputs=[])
55
+
56
+ exp_acc_btn = gr.Button("Export Accounts")
57
+ exp_acc_file = gr.File(label="Download Accounts CSV")
58
+ exp_acc_btn.click(fn=export_accounts, outputs=exp_acc_file)
59
+
60
+ with gr.Tab("Loans"):
61
+ with gr.Row():
62
+ loan_id = gr.Textbox(label="Loan ID")
63
+ loan_acc = gr.Number(label="Account Number")
64
+ loan_amt = gr.Number(label="Amount")
65
+ loan_rate = gr.Number(label="Rate (%)")
66
+ loan_status = gr.Textbox(label="Status")
67
+ loan_btn = gr.Button("Create Loan")
68
+ loan_btn.click(fn=create_loan, inputs=[loan_id, loan_acc, loan_amt, loan_rate, loan_status], outputs=[])
69
+
70
+ exp_loan_btn = gr.Button("Export Loans")
71
+ exp_loan_file = gr.File(label="Download Loans CSV")
72
+ exp_loan_btn.click(fn=export_loans, outputs=exp_loan_file)
73
+
74
+ with gr.Tab("Transaction Log"):
75
+ log_box = gr.HTML(label="Logs", value=get_log)
76
+ refresh_btn = gr.Button("Refresh Log")
77
+ refresh_btn.click(fn=get_log, outputs=log_box)
78
 
79
  demo.launch()