This commit is contained in:
Vivek Santayana 2022-06-11 11:29:15 +01:00
parent fcfde34c72
commit 85ced0cc20
21 changed files with 88 additions and 71 deletions

View File

@ -1,9 +1,5 @@
from .bootstrap import bootstrap
from .modules import bootstrap, csrf, db, login_manager, mail
from .config import DevelopmentConfig as Config
from .csrf import csrf
from .database import db
from .login_manager import login_manager
from .mail import mail
from flask import Flask
from flask_wtf.csrf import CSRFError
@ -14,7 +10,7 @@ from datetime import datetime
from .admin.views import admin
from .api.views import api
from .common.views import common
from .views import views
from .quiz.views import quiz
def create_app():
@ -46,7 +42,7 @@ def create_app():
app.register_blueprint(admin, url_prefix='/admin')
app.register_blueprint(api, url_prefix='/api')
app.register_blueprint(common)
app.register_blueprint(views)
app.register_blueprint(quiz)
return app

View File

@ -1,3 +0,0 @@
from ensurepip import bootstrap
from flask_bootstrap import Bootstrap
bootstrap = Bootstrap()

View File

@ -1,5 +0,0 @@
from . import common
@common.route('/privacy/')
def _privacy():
return 'Privacy Policy'

View File

@ -4,26 +4,25 @@ load_dotenv()
class Config(object):
APP_HOST = '0.0.0.0'
DATA_FILE_DIRECTORY = os.getenv('DATA_FILE_DIRECTORY')
DEBUG = False
TESTING = False
SECRET_KEY = os.getenv('SECRET_KEY')
SERVER_NAME = os.getenv('SERVER_NAME')
SESSION_COOKIE_SECURE = True
SQLALCHEMY_DATABASE_URI = 'sqlite:///data/database.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
MAIL_SERVER = os.getenv("MAIL_SERVER")
MAIL_PORT = int(os.getenv("MAIL_PORT"))
MAIL_SERVER = os.getenv('MAIL_SERVER')
MAIL_PORT = int(os.getenv('MAIL_PORT'))
MAIL_USE_TLS = False
MAIL_USE_SSL = False
MAIL_DEBUG = False
MAIL_USERNAME = os.getenv("MAIL_USERNAME")
MAIL_PASSWORD = os.getenv("MAIL_PASSWORD")
MAIL_DEFAULT_SENDER = os.getenv("MAIL_DEFAULT_SENDER")
MAIL_MAX_EMAILS = int(os.getenv("MAIL_MAX_EMAILS"))
MAIL_USERNAME = os.getenv('MAIL_USERNAME')
MAIL_PASSWORD = os.getenv('MAIL_PASSWORD')
MAIL_DEFAULT_SENDER = os.getenv('MAIL_DEFAULT_SENDER')
MAIL_MAX_EMAILS = int(os.getenv('MAIL_MAX_EMAILS'))
MAIL_SUPPRESS_SEND = False
MAIL_ASCII_ATTACHMENTS = bool(os.getenv("MAIL_ASCII_ATTACHMENTS"))
DATA_FILE_DIRECTORY = os.getenv("DATA_FILE_DIRECTORY")
MAIL_ASCII_ATTACHMENTS = bool(os.getenv('MAIL_ASCII_ATTACHMENTS'))
class ProductionConfig(Config):
pass
@ -39,6 +38,6 @@ class DevelopmentConfig(Config):
class TestingConfig(DevelopmentConfig):
TESTING = True
SESSION_COOKIE_SECURE = False
MAIL_SERVER = os.getenv("MAIL_SERVER")
MAIL_SERVER = os.getenv('MAIL_SERVER')
MAIL_DEBUG = True
MAIL_SUPPRESS_SEND = False

View File

@ -1,2 +0,0 @@
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect()

5
ref-test/app/data.py Normal file
View File

@ -0,0 +1,5 @@
from . import Config
from os import path
from pathlib import Path
data = Path(Config.DATA_FILE_DIRECTORY)

View File

@ -1,2 +0,0 @@
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

View File

@ -1,2 +1,29 @@
# if not database_exists(Config.SQLALCHEMY_DATABASE_URI): create_database(Config.SQLALCHEMY_DATABASE_URI)
# with app.app_context(): db.create_all()
from main import app
from . import Config
from .data import data
from .modules import db
from .tools.data import save
from .tools.logs import write
from os import mkdir, path, system
from cryptography.fernet import Fernet
from sqlalchemy_utils import database_exists, create_database
def install_scripts():
if not path.isdir(f'./{data}'): mkdir(f'./{data}')
if not path.isfile(f'./{data}/config.json'): save({}, 'config.json')
if not path.isdir(f'./{data}/logs'): mkdir(f'./{data}/logs')
if not path.isfile(f'./{data}/logs/users.log'): write('users.log', 'Log file created.')
if not path.isfile(f'./{data}/logs/system.log'): write('system.log', 'Log file created.')
if not path.isfile(f'./{data}/logs/tests.log'): write('commands.log', 'Log file created.')
if not database_exists(Config.SQLALCHEMY_DATABASE_URI):
create_database(Config.SQLALCHEMY_DATABASE_URI)
write('system.log', 'No database found. Creating a new database.')
with app.app_context(): db.create_all()
write('system.log', 'Creating database schema.')
if not path.isfile(f'./{data}/.encryption.key'):
write('system.log', 'No encryption key found. Generating new encryption key.')
with open(f'./{data}/.encryption.key', 'wb') as key_file:
key = Fernet.generate_key()
key_file.write(key)

View File

@ -1,2 +0,0 @@
from flask_login import LoginManager
login_manager = LoginManager()

View File

@ -1,2 +0,0 @@
from flask_mail import Mail
mail = Mail()

10
ref-test/app/modules.py Normal file
View File

@ -0,0 +1,10 @@
from flask_bootstrap import Bootstrap
bootstrap = Bootstrap()
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect()
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
from flask_login import LoginManager
login_manager = LoginManager()
from flask_mail import Mail
mail = Mail()

View File

@ -1,10 +0,0 @@
from flask import Blueprint
foo = Blueprint(
name='foo',
import_name=__name__
)
@foo.route('/')
def testing():
return 'Testing'

View File

@ -0,0 +1,11 @@
from .. import Config
from ..data import data_dir
import json
def load(filename:str):
with open(f'./{data_dir}/{filename}') as file:
return json.load(file)
def save(data:dict, filename:str):
with open(f'./{data_dir}/{filename}', 'w') as file:
json.dump(data, file, indent=4)

View File

@ -0,0 +1,11 @@
from .. import Config
from ..data import data
from datetime import datetime
def read(filename:str):
with open(f'./{data}/logs/{filename}') as file:
return file.readlines()
def write(filename:str, message:str):
with open(f'./{data}/logs/{filename}', 'a+') as file:
file.write(f'{datetime.now().strftime("%Y-%m-%d-%X")}: {message}\n')

View File

@ -1,6 +1,6 @@
from flask import Blueprint
common = Blueprint(
views = Blueprint(
name='common',
import_name=__name__,
template_folder='templates',

View File

@ -0,0 +1,5 @@
from . import views
@views.route('/privacy/')
def _privacy():
return 'Privacy Policy'

View File

@ -1,5 +1,7 @@
#!/bin/env python
from distutils.log import debug
from app import create_app
app = create_app()
if __name__ == '__main__': app.run()
if __name__ == '__main__':
from app.install import install_scripts
install_scripts()
app.run()

View File

@ -1,8 +0,0 @@
from flask import Flask
from .deeper import t
def create_app():
app = Flask(__name__)
app.register_blueprint(t)
return app

View File

@ -1,5 +0,0 @@
from flask import Blueprint
t = Blueprint(name='test', import_name=__name__)
from . import foo

View File

@ -1,5 +0,0 @@
from . import t
@t.route('/')
def _t():
return 'Test'

View File

@ -1,5 +0,0 @@
from subfolder import create_app
app = create_app()
app.run()