Coverage for app/__init__.py: 81%
63 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
1import os
3from flask import Flask
4from flask import session
5from flask_cors import CORS
6from flask_session import Session
8from app.routes import register_blueprints
10from flasgger import Swagger
11from gotrue import SyncSupportedStorage
12from dotenv import load_dotenv
14PORT = 8001
16load_dotenv()
18def getEnvironmentVars(app):
19 SUPABASE_URL = os.getenv("SUPABASE_URL")
20 SUPABASE_KEY = os.getenv("SUPABASE_KEY")
21 SUPABASE_SERVICE_KEY = os.getenv("SUPABASE_SERVICE_KEY")
22 OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
23 GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
25 if not SUPABASE_URL or not SUPABASE_KEY:
26 raise ValueError("Missing SUPABASE_URL or SUPABASE_KEY. Check your .env file.")
28 if not OPENAI_API_KEY:
29 print("Warning: OPENAI_API_KEY is not set. API requests will not work.")
31 app.config["SUPABASE_URL"] = SUPABASE_URL
32 app.config["SUPABASE_KEY"] = SUPABASE_KEY
33 app.config["SUPABASE_SERVICE_KEY"] = SUPABASE_SERVICE_KEY
34 app.config["OPENAI_API_KEY"] = OPENAI_API_KEY
35 app.config["GEMINI_API_KEY"] = GEMINI_API_KEY
37def create_app(test_config=None):
39 # create and configure the app
40 app = Flask(__name__, instance_relative_config=True)
41 app.config['PORT'] = 8001
42 app.config['SWAGGER'] = {
43 'title': 'Github Copilot Extension'
44 }
45 app.config["SESSION_PERMANENT"] = True # Keep session across requests
46 app.config["SESSION_TYPE"] = "filesystem" # Store session data in files
47 app.config["SESSION_FILE_DIR"] = "./flask_session" # Ensure sessions persist
48 app.config["SESSION_COOKIE_SECURE"] = False # Allow local development
49 getEnvironmentVars(app)
50 CORS(app)
51 register_blueprints(app)
52 Session(app)
53 Swagger(app)
55 if test_config is None:
56 # load the instance config, if it exists, when not testing
57 app.config.from_pyfile('config.py', silent=True)
58 else:
59 # load the test config if passed in
60 app.config.from_mapping(test_config)
62 # ensure the instance folder exists
63 try:
64 os.makedirs(app.instance_path)
65 except OSError:
66 pass
68 return app
70if __name__ == '__main__':
71 create_app().run(debug=True, port=PORT)
73class FlaskSessionStorage(SyncSupportedStorage):
74 def __init__(self):
75 self.storage = session
78 def get_item(self, key: str) -> str | None:
79 value = self.storage.get(key, None)
80 print(f"Session Get: {key} = {value}")
81 return value
84 def set_item(self, key: str, value: str) -> None:
85 print(f"Session Set: {key} = {value}")
86 self.storage[key] = value
89 def remove_item(self, key: str) -> None:
90 if key in self.storage:
91 print(f"Session Remove: {key}")
92 self.storage.pop(key, None)