File size: 3,365 Bytes
9cb381b 09daffd d452590 9cb381b 219df52 09daffd 219df52 09daffd 9cb381b 4a78b46 09daffd 9cb381b 09daffd 219df52 9cb381b 219df52 e714a62 9cb381b e714a62 9cb381b e714a62 9cb381b e714a62 219df52 9cb381b 36e302c 219df52 36e302c 9cb381b 36e302c 9cb381b 36e302c 9cb381b 219df52 36e302c 219df52 36e302c 219df52 |
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 75 76 77 78 79 80 81 82 |
from flask import Flask, render_template, request, send_file, redirect, url_for
import os
import logging
from utils.meldrx import MeldRxAPI
from utils.oneclick import generate_discharge_paper_one_click
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = Flask(__name__)
# Configuration from environment variables
CLIENT_ID = os.getenv("MELDRX_CLIENT_ID", "04bdc9f9a23d488a868b93d594ee5a4a")
CLIENT_SECRET = os.getenv("MELDRX_CLIENT_SECRET", None)
WORKSPACE_ID = os.getenv("MELDRX_WORKSPACE_ID", "09ed4f76-b5ac-42bf-92d5-496933203dbe")
SPACE_URL = os.getenv("SPACE_URL", "https://multitransformer-tonic-discharge-guard.hf.space")
REDIRECT_URI = f"{SPACE_URL}/auth/callback"
# Initialize MeldRx API
meldrx_api = MeldRxAPI(
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
workspace_id=WORKSPACE_ID,
redirect_uri=REDIRECT_URI
)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/auth', methods=['GET', 'POST'])
def auth():
if request.method == 'POST':
auth_code = request.form.get('auth_code')
if auth_code:
if meldrx_api.authenticate_with_code(auth_code):
return redirect(url_for('dashboard'))
return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Authentication failed")
return render_template('auth.html', auth_url=meldrx_api.get_authorization_url())
@app.route('/auth/callback', methods=['GET'])
def auth_callback():
auth_code = request.args.get('code')
if auth_code and meldrx_api.authenticate_with_code(auth_code):
return redirect(url_for('dashboard'))
return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Callback failed")
@app.route('/dashboard', methods=['GET'])
def dashboard():
if not meldrx_api.access_token:
return redirect(url_for('auth'))
patients_data = meldrx_api.get_patients()
if not patients_data or "entry" not in patients_data:
return render_template('dashboard.html', error="Failed to fetch patient data")
patients = [entry['resource'] for entry in patients_data.get('entry', [])]
return render_template('dashboard.html', patients=patients, authenticated=True)
@app.route('/oneclick', methods=['GET', 'POST'])
def one_click():
if not meldrx_api.access_token:
return redirect(url_for('auth'))
if request.method == 'POST':
patient_id = request.form.get('patient_id', '')
first_name = request.form.get('first_name', '')
last_name = request.form.get('last_name', '')
action = request.form.get('action', '')
pdf_path, status, display_summary = generate_discharge_paper_one_click(
meldrx_api, patient_id, first_name, last_name
)
if action == "Display Summary" and display_summary:
return render_template('oneclick.html', status=status, summary=display_summary)
elif action == "Generate PDF" and pdf_path:
return send_file(pdf_path, as_attachment=True, download_name="discharge_summary.pdf")
return render_template('oneclick.html', status=status, summary=display_summary)
return render_template('oneclick.html')
if __name__ == '__main__':
port = int(os.getenv("PORT", 7860))
app.run(debug=False, host='0.0.0.0', port=port) |