diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e69de29 diff --git a/app/__init__.py b/app/__init__.py index 8dd0dff..8b8151d 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -4,12 +4,18 @@ from flask_migrate import Migrate from app.config import Config -application = Flask(__name__) -# application.config['SECRET_KEY'] = 'amber_pearl_latte_is_the_best' -application.config.from_object(Config) -db = SQLAlchemy(application) -migrate = Migrate(application, db) -login = LoginManager(application) +db = SQLAlchemy() +login = LoginManager() login.login_view = 'login' -from app import routes, models \ No newline at end of file +def create_application(config): + application = Flask(__name__) + application.config.from_object(config) + + db.init_app(application) + login.init_app(application) + + from app.blueprints import blueprint + application.register_blueprint(blueprint) + + return application \ No newline at end of file diff --git a/app/blueprints.py b/app/blueprints.py new file mode 100644 index 0000000..63d8bb8 --- /dev/null +++ b/app/blueprints.py @@ -0,0 +1,6 @@ + +from flask import Blueprint + +blueprint = Blueprint('main', __name__) + +from app import models, routes \ No newline at end of file diff --git a/app/config.py b/app/config.py index c9e4b38..e21075b 100644 --- a/app/config.py +++ b/app/config.py @@ -4,5 +4,12 @@ default_database_uri = 'sqlite:///' + os.path.join(basedir, 'app.db') class Config: - SECRET_KEY = os.environ.get('SECRET_KEY') or 'amber_pearl_latte_is_the_best' - SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or default_database_uri \ No newline at end of file + SECRET_KEY = os.environ.get('SECRET_KEY') + +class DeploymentConfig(Config): + SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or default_database_uri + +class TestConfig(Config): + SQLALCHEMY_DATABASE_URI = 'sqlite:///memory' + TESTING = True + diff --git a/app/controllers.py b/app/controllers.py index c8904b6..1f0b17c 100644 --- a/app/controllers.py +++ b/app/controllers.py @@ -1,11 +1,10 @@ -from app import application -from app.forms import LoginForm, RegisterProjectForm +from flask import session from app.models import Project, Student from app import db def try_to_login_user(student_id, password, registering): - student = Student.query.get(student_id) + student = db.session.get(Student, student_id) if registering: if student: return f"User {student.id} already exists" diff --git a/app/routes.py b/app/routes.py index c90313a..7328a40 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,14 +1,14 @@ from flask import flash, redirect, render_template, request, url_for from flask_login import login_required, login_user, logout_user -from app import application from app.controllers import try_to_login_user from app.forms import LoginForm, RegisterProjectForm from app.models import Project, Student from app import db +from app.blueprints import blueprint -@application.route('/') -@application.route("/login", methods=['GET', 'POST']) +@blueprint.route('/') +@blueprint.route("/login", methods=['GET', 'POST']) def login(): form = LoginForm() @@ -20,19 +20,19 @@ def login(): result = try_to_login_user(student_id, password, registering) if isinstance(result, Student): login_user(result) - return redirect(url_for('view_projects')) + return redirect(url_for('main.view_projects')) else: flash(result, 'error') return render_template('login.html', form=form) -@application.route("/logout") +@blueprint.route("/logout") def logout(): logout_user() - return redirect(url_for('login')) + return redirect(url_for('main.login')) -@application.route('/projects') +@blueprint.route('/projects') @login_required def view_projects(): projects = Project.query.all() @@ -40,7 +40,7 @@ def view_projects(): print(p) return render_template('index.html', projects=projects) -@application.route('/register', methods=['GET', 'POST']) +@blueprint.route('/register', methods=['GET', 'POST']) @login_required def register_project(): form = RegisterProjectForm() @@ -67,6 +67,6 @@ def register_project(): db.session.commit() - return redirect(url_for('view_projects')) + return redirect(url_for('main.view_projects')) return render_template('register.html', form=form) diff --git a/app/templates/index.html b/app/templates/index.html index e587ee6..aebe729 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -6,7 +6,7 @@ @@ -31,9 +31,9 @@