Progress
This commit is contained in:
parent
eac6cac7bc
commit
9539ba22fe
@ -1,9 +1,5 @@
|
|||||||
from .bootstrap import bootstrap
|
from .modules import bootstrap, csrf, db, login_manager, mail
|
||||||
from .config import DevelopmentConfig as Config
|
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 import Flask
|
||||||
from flask_wtf.csrf import CSRFError
|
from flask_wtf.csrf import CSRFError
|
||||||
@ -14,7 +10,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
from .admin.views import admin
|
from .admin.views import admin
|
||||||
from .api.views import api
|
from .api.views import api
|
||||||
from .common.views import common
|
from .views import views
|
||||||
from .quiz.views import quiz
|
from .quiz.views import quiz
|
||||||
|
|
||||||
def create_app():
|
def create_app():
|
||||||
@ -46,7 +42,7 @@ def create_app():
|
|||||||
|
|
||||||
app.register_blueprint(admin, url_prefix='/admin')
|
app.register_blueprint(admin, url_prefix='/admin')
|
||||||
app.register_blueprint(api, url_prefix='/api')
|
app.register_blueprint(api, url_prefix='/api')
|
||||||
app.register_blueprint(common)
|
app.register_blueprint(views)
|
||||||
app.register_blueprint(quiz)
|
app.register_blueprint(quiz)
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
from ensurepip import bootstrap
|
|
||||||
from flask_bootstrap import Bootstrap
|
|
||||||
bootstrap = Bootstrap()
|
|
@ -1,5 +0,0 @@
|
|||||||
from . import common
|
|
||||||
|
|
||||||
@common.route('/privacy/')
|
|
||||||
def _privacy():
|
|
||||||
return 'Privacy Policy'
|
|
@ -4,26 +4,25 @@ load_dotenv()
|
|||||||
|
|
||||||
class Config(object):
|
class Config(object):
|
||||||
APP_HOST = '0.0.0.0'
|
APP_HOST = '0.0.0.0'
|
||||||
|
DATA_FILE_DIRECTORY = os.getenv('DATA_FILE_DIRECTORY')
|
||||||
DEBUG = False
|
DEBUG = False
|
||||||
TESTING = False
|
TESTING = False
|
||||||
SECRET_KEY = os.getenv('SECRET_KEY')
|
SECRET_KEY = os.getenv('SECRET_KEY')
|
||||||
SERVER_NAME = os.getenv('SERVER_NAME')
|
|
||||||
SESSION_COOKIE_SECURE = True
|
SESSION_COOKIE_SECURE = True
|
||||||
SQLALCHEMY_DATABASE_URI = 'sqlite:///data/database.db'
|
SQLALCHEMY_DATABASE_URI = 'sqlite:///data/database.db'
|
||||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||||
|
|
||||||
MAIL_SERVER = os.getenv("MAIL_SERVER")
|
MAIL_SERVER = os.getenv('MAIL_SERVER')
|
||||||
MAIL_PORT = int(os.getenv("MAIL_PORT"))
|
MAIL_PORT = int(os.getenv('MAIL_PORT'))
|
||||||
MAIL_USE_TLS = False
|
MAIL_USE_TLS = False
|
||||||
MAIL_USE_SSL = False
|
MAIL_USE_SSL = False
|
||||||
MAIL_DEBUG = False
|
MAIL_DEBUG = False
|
||||||
MAIL_USERNAME = os.getenv("MAIL_USERNAME")
|
MAIL_USERNAME = os.getenv('MAIL_USERNAME')
|
||||||
MAIL_PASSWORD = os.getenv("MAIL_PASSWORD")
|
MAIL_PASSWORD = os.getenv('MAIL_PASSWORD')
|
||||||
MAIL_DEFAULT_SENDER = os.getenv("MAIL_DEFAULT_SENDER")
|
MAIL_DEFAULT_SENDER = os.getenv('MAIL_DEFAULT_SENDER')
|
||||||
MAIL_MAX_EMAILS = int(os.getenv("MAIL_MAX_EMAILS"))
|
MAIL_MAX_EMAILS = int(os.getenv('MAIL_MAX_EMAILS'))
|
||||||
MAIL_SUPPRESS_SEND = False
|
MAIL_SUPPRESS_SEND = False
|
||||||
MAIL_ASCII_ATTACHMENTS = bool(os.getenv("MAIL_ASCII_ATTACHMENTS"))
|
MAIL_ASCII_ATTACHMENTS = bool(os.getenv('MAIL_ASCII_ATTACHMENTS'))
|
||||||
DATA_FILE_DIRECTORY = os.getenv("DATA_FILE_DIRECTORY")
|
|
||||||
|
|
||||||
class ProductionConfig(Config):
|
class ProductionConfig(Config):
|
||||||
pass
|
pass
|
||||||
@ -39,6 +38,6 @@ class DevelopmentConfig(Config):
|
|||||||
class TestingConfig(DevelopmentConfig):
|
class TestingConfig(DevelopmentConfig):
|
||||||
TESTING = True
|
TESTING = True
|
||||||
SESSION_COOKIE_SECURE = False
|
SESSION_COOKIE_SECURE = False
|
||||||
MAIL_SERVER = os.getenv("MAIL_SERVER")
|
MAIL_SERVER = os.getenv('MAIL_SERVER')
|
||||||
MAIL_DEBUG = True
|
MAIL_DEBUG = True
|
||||||
MAIL_SUPPRESS_SEND = False
|
MAIL_SUPPRESS_SEND = False
|
@ -1,2 +0,0 @@
|
|||||||
from flask_wtf.csrf import CSRFProtect
|
|
||||||
csrf = CSRFProtect()
|
|
5
ref-test/app/data.py
Normal file
5
ref-test/app/data.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from . import Config
|
||||||
|
from os import path
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
data = Path(Config.DATA_FILE_DIRECTORY)
|
@ -1,2 +0,0 @@
|
|||||||
from flask_sqlalchemy import SQLAlchemy
|
|
||||||
db = SQLAlchemy()
|
|
@ -1,2 +1,29 @@
|
|||||||
# if not database_exists(Config.SQLALCHEMY_DATABASE_URI): create_database(Config.SQLALCHEMY_DATABASE_URI)
|
from main import app
|
||||||
# with app.app_context(): db.create_all()
|
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)
|
@ -1,2 +0,0 @@
|
|||||||
from flask_login import LoginManager
|
|
||||||
login_manager = LoginManager()
|
|
@ -1,2 +0,0 @@
|
|||||||
from flask_mail import Mail
|
|
||||||
mail = Mail()
|
|
10
ref-test/app/modules.py
Normal file
10
ref-test/app/modules.py
Normal 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()
|
@ -1,10 +0,0 @@
|
|||||||
from flask import Blueprint
|
|
||||||
|
|
||||||
foo = Blueprint(
|
|
||||||
name='foo',
|
|
||||||
import_name=__name__
|
|
||||||
)
|
|
||||||
|
|
||||||
@foo.route('/')
|
|
||||||
def testing():
|
|
||||||
return 'Testing'
|
|
11
ref-test/app/tools/data.py
Normal file
11
ref-test/app/tools/data.py
Normal 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)
|
11
ref-test/app/tools/logs.py
Normal file
11
ref-test/app/tools/logs.py
Normal 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')
|
@ -1,6 +1,6 @@
|
|||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
|
|
||||||
common = Blueprint(
|
views = Blueprint(
|
||||||
name='common',
|
name='common',
|
||||||
import_name=__name__,
|
import_name=__name__,
|
||||||
template_folder='templates',
|
template_folder='templates',
|
5
ref-test/app/views/privacy.py
Normal file
5
ref-test/app/views/privacy.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from . import views
|
||||||
|
|
||||||
|
@views.route('/privacy/')
|
||||||
|
def _privacy():
|
||||||
|
return 'Privacy Policy'
|
@ -1,5 +1,7 @@
|
|||||||
#!/bin/env python
|
#!/bin/env python
|
||||||
from distutils.log import debug
|
|
||||||
from app import create_app
|
from app import create_app
|
||||||
app = create_app()
|
app = create_app()
|
||||||
if __name__ == '__main__': app.run()
|
if __name__ == '__main__':
|
||||||
|
from app.install import install_scripts
|
||||||
|
install_scripts()
|
||||||
|
app.run()
|
@ -1,8 +0,0 @@
|
|||||||
from flask import Flask
|
|
||||||
from .deeper import t
|
|
||||||
|
|
||||||
def create_app():
|
|
||||||
app = Flask(__name__)
|
|
||||||
app.register_blueprint(t)
|
|
||||||
|
|
||||||
return app
|
|
@ -1,5 +0,0 @@
|
|||||||
from flask import Blueprint
|
|
||||||
|
|
||||||
t = Blueprint(name='test', import_name=__name__)
|
|
||||||
|
|
||||||
from . import foo
|
|
@ -1,5 +0,0 @@
|
|||||||
from . import t
|
|
||||||
|
|
||||||
@t.route('/')
|
|
||||||
def _t():
|
|
||||||
return 'Test'
|
|
@ -1,5 +0,0 @@
|
|||||||
from subfolder import create_app
|
|
||||||
|
|
||||||
app = create_app()
|
|
||||||
app.run()
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user