Coverage for app/__init__.py: 81%

63 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-05-02 02:49 +0000

1import os 

2 

3from flask import Flask 

4from flask import session 

5from flask_cors import CORS 

6from flask_session import Session 

7 

8from app.routes import register_blueprints 

9 

10from flasgger import Swagger 

11from gotrue import SyncSupportedStorage 

12from dotenv import load_dotenv 

13 

14PORT = 8001 

15 

16load_dotenv() 

17 

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") 

24 

25 if not SUPABASE_URL or not SUPABASE_KEY: 

26 raise ValueError("Missing SUPABASE_URL or SUPABASE_KEY. Check your .env file.") 

27 

28 if not OPENAI_API_KEY: 

29 print("Warning: OPENAI_API_KEY is not set. API requests will not work.") 

30 

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 

36 

37def create_app(test_config=None): 

38 

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) 

54 

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) 

61 

62 # ensure the instance folder exists 

63 try: 

64 os.makedirs(app.instance_path) 

65 except OSError: 

66 pass 

67 

68 return app 

69 

70if __name__ == '__main__': 

71 create_app().run(debug=True, port=PORT) 

72 

73class FlaskSessionStorage(SyncSupportedStorage): 

74 def __init__(self): 

75 self.storage = session 

76 

77 

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 

82 

83 

84 def set_item(self, key: str, value: str) -> None: 

85 print(f"Session Set: {key} = {value}") 

86 self.storage[key] = value 

87 

88 

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)