from flask import Flask, render_template, request, redirect, url_for, flash from flask_sqlalchemy import SQLAlchemy import os import services # Assuming your existing services module for FHIR IG handling app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key-here' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///instance/fhir_ig.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['FHIR_PACKAGES_DIR'] = os.path.join(app.instance_path, 'fhir_packages') os.makedirs(app.config['FHIR_PACKAGES_DIR'], exist_ok=True) db = SQLAlchemy(app) # Simplified ProcessedIg model (no user-related fields) class ProcessedIg(db.Model): id = db.Column(db.Integer, primary_key=True) package_name = db.Column(db.String(128), nullable=False) version = db.Column(db.String(32), nullable=False) processed_date = db.Column(db.DateTime, nullable=False) resource_types_info = db.Column(db.JSON, nullable=False) # List of resource type metadata must_support_elements = db.Column(db.JSON, nullable=True) # Dict of MS elements examples = db.Column(db.JSON, nullable=True) # Dict of example filepaths # Landing page with two buttons @app.route('/') def index(): return render_template_string('''
Simple tool for importing and viewing FHIR Implementation Guides.
''') # Import IG route @app.route('/import-ig', methods=['GET', 'POST']) def import_ig(): if request.method == 'POST': name = request.form.get('name') version = request.form.get('version', 'latest') try: # Call your existing service to download package and dependencies result = services.import_package_and_dependencies(name, version, app.config['FHIR_PACKAGES_DIR']) downloaded_files = result.get('downloaded', []) for file_path in downloaded_files: # Process each downloaded package package_info = services.process_package_file(file_path) processed_ig = ProcessedIg( package_name=package_info['name'], version=package_info['version'], processed_date=package_info['processed_date'], resource_types_info=package_info['resource_types_info'], must_support_elements=package_info.get('must_support_elements'), examples=package_info.get('examples') ) db.session.add(processed_ig) db.session.commit() flash(f"Successfully imported {name} {version} and dependencies!", "success") return redirect(url_for('view_igs')) except Exception as e: flash(f"Error importing IG: {str(e)}", "error") return redirect(url_for('import_ig')) return render_template_string('''Package Name | Version | Processed Date | Resource Types |
---|---|---|---|
{{ ig.package_name }} | {{ ig.version }} | {{ ig.processed_date }} | {{ ig.resource_types_info | length }} types |