Source code for app

import os

from flask import Flask
from flask import session
from flask_cors import CORS
from flask_session import Session

from app.routes import register_blueprints

from flasgger import Swagger
from gotrue import SyncSupportedStorage
from dotenv import load_dotenv

PORT = 8001

load_dotenv()

[docs] def getEnvironmentVars(app): SUPABASE_URL = os.getenv("SUPABASE_URL") SUPABASE_KEY = os.getenv("SUPABASE_KEY") SUPABASE_SERVICE_KEY = os.getenv("SUPABASE_SERVICE_KEY") OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") GEMINI_API_KEY = os.getenv("GEMINI_API_KEY") if not SUPABASE_URL or not SUPABASE_KEY: raise ValueError("Missing SUPABASE_URL or SUPABASE_KEY. Check your .env file.") if not OPENAI_API_KEY: print("Warning: OPENAI_API_KEY is not set. API requests will not work.") app.config["SUPABASE_URL"] = SUPABASE_URL app.config["SUPABASE_KEY"] = SUPABASE_KEY app.config["SUPABASE_SERVICE_KEY"] = SUPABASE_SERVICE_KEY app.config["OPENAI_API_KEY"] = OPENAI_API_KEY app.config["GEMINI_API_KEY"] = GEMINI_API_KEY
[docs] def create_app(test_config=None): # create and configure the app app = Flask(__name__, instance_relative_config=True) app.config['PORT'] = 8001 app.config['SWAGGER'] = { 'title': 'Github Copilot Extension' } app.config["SESSION_PERMANENT"] = True # Keep session across requests app.config["SESSION_TYPE"] = "filesystem" # Store session data in files app.config["SESSION_FILE_DIR"] = "./flask_session" # Ensure sessions persist app.config["SESSION_COOKIE_SECURE"] = False # Allow local development getEnvironmentVars(app) CORS(app) register_blueprints(app) Session(app) Swagger(app) if test_config is None: # load the instance config, if it exists, when not testing app.config.from_pyfile('config.py', silent=True) else: # load the test config if passed in app.config.from_mapping(test_config) # ensure the instance folder exists try: os.makedirs(app.instance_path) except OSError: pass return app
if __name__ == '__main__': create_app().run(debug=True, port=PORT)
[docs] class FlaskSessionStorage(SyncSupportedStorage): def __init__(self): self.storage = session
[docs] def get_item(self, key: str) -> str | None: value = self.storage.get(key, None) print(f"Session Get: {key} = {value}") return value
[docs] def set_item(self, key: str, value: str) -> None: print(f"Session Set: {key} = {value}") self.storage[key] = value
[docs] def remove_item(self, key: str) -> None: if key in self.storage: print(f"Session Remove: {key}") self.storage.pop(key, None)