Skip to content

Commit 64ad386

Browse files
committed
Added DB Silent Fallback Feature to SQLite
1 parent 35b676f commit 64ad386

File tree

2 files changed

+62
-11
lines changed

2 files changed

+62
-11
lines changed

api/__init__.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Copyright (c) 2019 - present AppSeed.us
44
"""
55

6-
import json
6+
import os, json
77

88
from flask import Flask
99
from flask_cors import CORS
@@ -22,7 +22,18 @@
2222
# Setup database
2323
@app.before_first_request
2424
def initialize_database():
25-
db.create_all()
25+
try:
26+
db.create_all()
27+
except Exception as e:
28+
29+
print('> Error: DBMS Exception: ' + str(e) )
30+
31+
# fallback to SQLite
32+
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
33+
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(BASE_DIR, 'db.sqlite3')
34+
35+
print('> Fallback to SQLite ')
36+
db.create_all()
2637

2738
"""
2839
Custom responses

api/config.py

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,60 @@
33
Copyright (c) 2019 - present AppSeed.us
44
"""
55

6-
import os
6+
import os, random, string
77
from datetime import timedelta
88

99
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
1010

11-
1211
class BaseConfig():
13-
14-
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(BASE_DIR, 'apidata.db')
15-
SQLALCHEMY_TRACK_MODIFICATIONS = False
1612

17-
SECRET_KEY = os.getenv('SECRET_KEY' , 'S#perS3crEt_913' )
18-
JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'S#perS3crEt_JWT' )
19-
GITHUB_CLIENT_ID = os.getenv('GITHUB_CLIENT_ID')
20-
GITHUB_CLIENT_SECRET = os.getenv('GITHUB_SECRET_KEY')
13+
SECRET_KEY = os.getenv('SECRET_KEY', None)
14+
if not SECRET_KEY:
15+
SECRET_KEY = ''.join(random.choice( string.ascii_lowercase ) for i in range( 32 ))
16+
17+
JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', None)
18+
if not JWT_SECRET_KEY:
19+
JWT_SECRET_KEY = ''.join(random.choice( string.ascii_lowercase ) for i in range( 32 ))
20+
21+
GITHUB_CLIENT_ID = os.getenv('GITHUB_CLIENT_ID' , None)
22+
GITHUB_CLIENT_SECRET = os.getenv('GITHUB_SECRET_KEY', None)
2123

2224
JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=1)
25+
26+
SQLALCHEMY_TRACK_MODIFICATIONS = False
27+
28+
DB_ENGINE = os.getenv('DB_ENGINE' , None)
29+
DB_USERNAME = os.getenv('DB_USERNAME' , None)
30+
DB_PASS = os.getenv('DB_PASS' , None)
31+
DB_HOST = os.getenv('DB_HOST' , None)
32+
DB_PORT = os.getenv('DB_PORT' , None)
33+
DB_NAME = os.getenv('DB_NAME' , None)
34+
35+
USE_SQLITE = True
36+
37+
# try to set up a Relational DBMS
38+
if DB_ENGINE and DB_NAME and DB_USERNAME:
39+
40+
try:
41+
42+
# Relational DBMS: PSQL, MySql
43+
SQLALCHEMY_DATABASE_URI = '{}://{}:{}@{}:{}/{}'.format(
44+
DB_ENGINE,
45+
DB_USERNAME,
46+
DB_PASS,
47+
DB_HOST,
48+
DB_PORT,
49+
DB_NAME
50+
)
51+
52+
USE_SQLITE = False
53+
54+
except Exception as e:
55+
56+
print('> Error: DBMS Exception: ' + str(e) )
57+
print('> Fallback to SQLite ')
58+
59+
if USE_SQLITE:
60+
61+
# This will create a file in <app> FOLDER
62+
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(BASE_DIR, 'db.sqlite3')

0 commit comments

Comments
 (0)