Merge conflicts.
This commit is contained in:
128
app.py
128
app.py
@@ -1,128 +0,0 @@
|
|||||||
"""
|
|
||||||
Project: PARTS Website
|
|
||||||
Author: Edward Middleton-Smith
|
|
||||||
Precision And Research Technology Systems Limited
|
|
||||||
|
|
||||||
Technology: App General
|
|
||||||
Feature: App
|
|
||||||
|
|
||||||
Description:
|
|
||||||
Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# IMPORTS
|
|
||||||
# VARIABLE INSTANTIATION
|
|
||||||
# METHODS
|
|
||||||
|
|
||||||
# IMPORTS
|
|
||||||
# internal
|
|
||||||
from config import app_config, Config
|
|
||||||
from controllers.core import routes_core
|
|
||||||
from controllers.legal import routes_legal
|
|
||||||
from controllers.user import routes_user
|
|
||||||
from extensions import db, csrf, mail, oauth
|
|
||||||
from helpers.helper_app import Helper_App
|
|
||||||
# external
|
|
||||||
from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session
|
|
||||||
# from flask_appconfig import AppConfig
|
|
||||||
from flask_cors import CORS
|
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
|
||||||
from flask_mail import Mail, Message
|
|
||||||
from flask_wtf.csrf import CSRFProtect
|
|
||||||
from werkzeug.exceptions import HTTPException
|
|
||||||
from authlib.integrations.flask_client import OAuth
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
from logging.handlers import RotatingFileHandler
|
|
||||||
import traceback
|
|
||||||
import logging
|
|
||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(__file__)) # Todo: why?
|
|
||||||
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
# AppConfig(app)
|
|
||||||
app.config.from_object(app_config) # for db init with required keys
|
|
||||||
app.app_config = app_config
|
|
||||||
# app.config["config"] = app_config()
|
|
||||||
|
|
||||||
# logging
|
|
||||||
handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=3)
|
|
||||||
handler.setLevel(logging.DEBUG)
|
|
||||||
app.logger.addHandler(handler)
|
|
||||||
|
|
||||||
@app.errorhandler(Exception)
|
|
||||||
def internal_server_error(error):
|
|
||||||
if isinstance(error, HTTPException) and error.code == 404:
|
|
||||||
return "Not Found", 404
|
|
||||||
|
|
||||||
app.logger.error('Server Error: %s', (error))
|
|
||||||
app.logger.error('Request: %s %s %s %s %s',
|
|
||||||
request.remote_addr,
|
|
||||||
request.method,
|
|
||||||
request.scheme,
|
|
||||||
request.full_path,
|
|
||||||
request.headers)
|
|
||||||
app.logger.error('Request data: %s', request.get_data())
|
|
||||||
app.logger.error('Traceback: %s', traceback.format_exc())
|
|
||||||
return "Internal Server Error", 500
|
|
||||||
|
|
||||||
@app.before_request
|
|
||||||
def make_session_permanent():
|
|
||||||
session.permanent = True
|
|
||||||
|
|
||||||
csrf = CSRFProtect()
|
|
||||||
cors = CORS(app, resources={
|
|
||||||
r"/static/*": {
|
|
||||||
"origins": [app.config["URL_HOST"]],
|
|
||||||
"methods": ["GET"],
|
|
||||||
"max_age": 3600
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
csrf.init_app(app)
|
|
||||||
cors.init_app(app)
|
|
||||||
db.init_app(app)
|
|
||||||
mail.init_app(app)
|
|
||||||
oauth.init_app(app)
|
|
||||||
|
|
||||||
with app.app_context():
|
|
||||||
# config = app.config["config"]
|
|
||||||
db.create_all()
|
|
||||||
db.engine.url = app.config['SQLALCHEMY_DATABASE_URI']
|
|
||||||
|
|
||||||
oauth.register(
|
|
||||||
"auth0",
|
|
||||||
client_id = app.config['ID_AUTH0_CLIENT'],
|
|
||||||
client_secret = app.config['ID_AUTH0_CLIENT_SECRET'],
|
|
||||||
client_kwargs={
|
|
||||||
"scope": "openid profile email",
|
|
||||||
},
|
|
||||||
server_metadata_url=f'https://{app.config["DOMAIN_AUTH0"]}/.well-known/openid-configuration',
|
|
||||||
api_base_url = f'https://{app.config["DOMAIN_AUTH0"]}',
|
|
||||||
authorize_url = f'https://{app.config["DOMAIN_AUTH0"]}/authorize',
|
|
||||||
access_token_url = f'https://{app.config["DOMAIN_AUTH0"]}/oauth/token',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
app.register_blueprint(routes_core)
|
|
||||||
app.register_blueprint(routes_legal)
|
|
||||||
app.register_blueprint(routes_user)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.template_filter('console_log')
|
|
||||||
def console_log(value):
|
|
||||||
Helper_App.console_log(value)
|
|
||||||
return value
|
|
||||||
|
|
||||||
@app.after_request
|
|
||||||
def add_cache_headers(response):
|
|
||||||
if request.path.startswith('/static/'):
|
|
||||||
# Cache static assets
|
|
||||||
response.headers['Cache-Control'] = 'public, max-age=31536000'
|
|
||||||
else:
|
|
||||||
# No caching for dynamic content
|
|
||||||
response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0'
|
|
||||||
return response
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
Flask==3.0.3
|
|
||||||
gunicorn==23.0.0
|
|
||||||
flask_wtf
|
|
||||||
flask_sqlalchemy
|
|
||||||
flask_cors
|
|
||||||
flask_mail
|
|
||||||
authlib
|
|
||||||
jwt
|
|
||||||
mysqlclient
|
|
||||||
stripe
|
|
||||||
python_dotenv
|
|
||||||
authlib
|
|
||||||
pydantic
|
|
||||||
# psycopg2
|
|
||||||
requests
|
|
||||||
Reference in New Issue
Block a user