diff --git a/library/app.py b/library/app.py index b47d7e3..9da307d 100644 --- a/library/app.py +++ b/library/app.py @@ -3,7 +3,6 @@ import os import tomllib import flask_apscheduler -from application.csvparser import CsvParser from flask import Flask from flask_bcrypt import Bcrypt from flask_login import LoginManager @@ -14,6 +13,8 @@ from whoosh.fields import * from whoosh.index import create_in from whoosh.qparser import QueryParser +from application.csvparser import CsvParser + db = SQLAlchemy() migrate = Migrate() bcrypt = Bcrypt() diff --git a/library/application/models/usermodel.py b/library/application/models/usermodel.py index e8572c4..bc94d65 100644 --- a/library/application/models/usermodel.py +++ b/library/application/models/usermodel.py @@ -1,6 +1,7 @@ -from app import db from flask_login import UserMixin +from app import db + class User(UserMixin, db.Model): """User model class for a user in the library""" diff --git a/library/application/user/forgotpassword.py b/library/application/user/forgotpassword.py index 81f72f9..4cf669b 100644 --- a/library/application/user/forgotpassword.py +++ b/library/application/user/forgotpassword.py @@ -1,16 +1,17 @@ from datetime import datetime from uuid import uuid1 -from app import db from flask import render_template from flask_mail import Message -from application.forms.forgotpasswordform import ForgotPasswordForm from sqlalchemy.exc import ( DatabaseError, DataError, InterfaceError, InvalidRequestError, ) + +from app import db +from application.forms.forgotpasswordform import ForgotPasswordForm from application.models.usermodel import User diff --git a/library/application/user/loginuser.py b/library/application/user/loginuser.py index d2d518f..15dd995 100644 --- a/library/application/user/loginuser.py +++ b/library/application/user/loginuser.py @@ -1,6 +1,7 @@ from flask import abort, flash, redirect, render_template, request, url_for from flask_bcrypt import check_password_hash from flask_login import login_user + from application.forms.loginform import LoginForm from application.models.usermodel import User diff --git a/library/application/user/registeruser.py b/library/application/user/registeruser.py index 34c7488..4388848 100644 --- a/library/application/user/registeruser.py +++ b/library/application/user/registeruser.py @@ -1,8 +1,6 @@ -from app import db from flask import flash, redirect, render_template, url_for from flask_bcrypt import generate_password_hash from flask_login import login_user -from application.forms.registerform import RegisterForm from sqlalchemy.exc import ( DatabaseError, DataError, @@ -10,9 +8,12 @@ from sqlalchemy.exc import ( InterfaceError, InvalidRequestError, ) -from application.models.usermodel import User from werkzeug.routing import BuildError +from app import db +from application.forms.registerform import RegisterForm +from application.models.usermodel import User + def RegisterUser(): registerform = RegisterForm() diff --git a/library/application/user/resetpassword.py b/library/application/user/resetpassword.py index 15f5cb8..45713ae 100644 --- a/library/application/user/resetpassword.py +++ b/library/application/user/resetpassword.py @@ -1,10 +1,8 @@ from datetime import datetime -from app import db from flask import flash, redirect, render_template, url_for from flask_bcrypt import generate_password_hash from flask_login import login_user -from application.forms.resetpasswordform import ResetPasswordForm from sqlalchemy.exc import ( DatabaseError, DataError, @@ -12,9 +10,12 @@ from sqlalchemy.exc import ( InterfaceError, InvalidRequestError, ) -from application.models.usermodel import User from werkzeug.routing import BuildError +from app import db +from application.forms.resetpasswordform import ResetPasswordForm +from application.models.usermodel import User + def ResetPassword(path): linkvalid = False diff --git a/library/deploydb.py b/library/deploydb.py index 4378712..f39bd68 100644 --- a/library/deploydb.py +++ b/library/deploydb.py @@ -1,6 +1,7 @@ -from app import create_app, db from flask_migrate import init, migrate, stamp, upgrade +from app import create_app, db + def deploy(): """Run deployment of database.""" diff --git a/library/migrations/env.py b/library/migrations/env.py index 4c97092..f2d0735 100644 --- a/library/migrations/env.py +++ b/library/migrations/env.py @@ -1,9 +1,8 @@ import logging from logging.config import fileConfig -from flask import current_app - from alembic import context +from flask import current_app # this is the Alembic Config object, which provides # access to the values within the .ini file in use. @@ -12,32 +11,35 @@ config = context.config # Interpret the config file for Python logging. # This line sets up loggers basically. fileConfig(config.config_file_name) -logger = logging.getLogger('alembic.env') +logger = logging.getLogger("alembic.env") def get_engine(): try: # this works with Flask-SQLAlchemy<3 and Alchemical - return current_app.extensions['migrate'].db.get_engine() + return current_app.extensions["migrate"].db.get_engine() except (TypeError, AttributeError): # this works with Flask-SQLAlchemy>=3 - return current_app.extensions['migrate'].db.engine + return current_app.extensions["migrate"].db.engine def get_engine_url(): try: - return get_engine().url.render_as_string(hide_password=False).replace( - '%', '%%') + return ( + get_engine() + .url.render_as_string(hide_password=False) + .replace("%", "%%") + ) except AttributeError: - return str(get_engine().url).replace('%', '%%') + return str(get_engine().url).replace("%", "%%") # add your model's MetaData object here # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata -config.set_main_option('sqlalchemy.url', get_engine_url()) -target_db = current_app.extensions['migrate'].db +config.set_main_option("sqlalchemy.url", get_engine_url()) +target_db = current_app.extensions["migrate"].db # other values from the config, defined by the needs of env.py, # can be acquired: @@ -46,7 +48,7 @@ target_db = current_app.extensions['migrate'].db def get_metadata(): - if hasattr(target_db, 'metadatas'): + if hasattr(target_db, "metadatas"): return target_db.metadatas[None] return target_db.metadata @@ -84,13 +86,13 @@ def run_migrations_online(): # when there are no changes to the schema # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html def process_revision_directives(context, revision, directives): - if getattr(config.cmd_opts, 'autogenerate', False): + if getattr(config.cmd_opts, "autogenerate", False): script = directives[0] if script.upgrade_ops.is_empty(): directives[:] = [] - logger.info('No changes in schema detected.') + logger.info("No changes in schema detected.") - conf_args = current_app.extensions['migrate'].configure_args + conf_args = current_app.extensions["migrate"].configure_args if conf_args.get("process_revision_directives") is None: conf_args["process_revision_directives"] = process_revision_directives @@ -98,9 +100,7 @@ def run_migrations_online(): with connectable.connect() as connection: context.configure( - connection=connection, - target_metadata=get_metadata(), - **conf_args + connection=connection, target_metadata=get_metadata(), **conf_args ) with context.begin_transaction(): diff --git a/library/migrations/versions/3105f85a9d8e_.py b/library/migrations/versions/3105f85a9d8e_.py index 8ff6f8f..25731ba 100644 --- a/library/migrations/versions/3105f85a9d8e_.py +++ b/library/migrations/versions/3105f85a9d8e_.py @@ -5,12 +5,11 @@ Revises: Create Date: 2024-03-30 17:50:00.878071 """ -from alembic import op import sqlalchemy as sa - +from alembic import op # revision identifiers, used by Alembic. -revision = '3105f85a9d8e' +revision = "3105f85a9d8e" down_revision = None branch_labels = None depends_on = None diff --git a/library/page.py b/library/page.py index f8b6a8e..3933015 100644 --- a/library/page.py +++ b/library/page.py @@ -1,36 +1,37 @@ """This is the main flask library page""" -from datetime import timedelta import datetime import json import os +from datetime import timedelta import bcrypt -from app import create_app, login_manager -from application.csvparser import CsvParser -from application.user.loginuser import LoginUser -from application.user.registeruser import RegisterUser -from application.user.forgotpassword import ForgotPassword -from application.user.resetpassword import ResetPassword -from application.models.usermodel import User - -from flask import Blueprint, redirect, render_template, request, session, url_for -from flask_wtf.csrf import CSRFProtect, CSRFError -from flask_login import ( - logout_user, - login_required, - current_user, +from flask import ( + Blueprint, + redirect, + render_template, + request, + session, + url_for, ) -from application.forms.borrowform import BorrowForm -from application.forms.uploadform import PublicationForm +from flask_login import current_user, login_required, logout_user +from flask_wtf.csrf import CSRFError, CSRFProtect from icalendar import Calendar from PIL import Image from requests import get -from search import search from werkzeug.utils import secure_filename - +from app import create_app, login_manager +from application.csvparser import CsvParser +from application.forms.borrowform import BorrowForm +from application.forms.uploadform import PublicationForm +from application.models.usermodel import User +from application.user.forgotpassword import ForgotPassword +from application.user.loginuser import LoginUser +from application.user.registeruser import RegisterUser +from application.user.resetpassword import ResetPassword +from search import search APP = create_app() csrf = CSRFProtect() @@ -58,7 +59,6 @@ def index(): publicatons = csvparser.getpublications() template = render_template( "index.html", - title=APP.config["TITLE"], publications=publicatons, pubtypes=pubtypes, pubyears=pubyears, @@ -79,9 +79,7 @@ def upload(): return redirect(str(id), code=303) else: return render_template("upload.html", uploadform=uploadform) - return render_template( - "upload.html", title=APP.config["TITLE"], uploadform=uploadform - ) + return render_template("upload.html", uploadform=uploadform) @APP.route("/", methods=["GET", "POST"]) @@ -102,7 +100,6 @@ def show_book(publicationID): # return a full publication with or without form errors return render_template( "publication.html", - title=APP.config["TITLE"], fullpublication=fullpublication, publicationID=publicationID, borrowform=borrowform, diff --git a/library/search.py b/library/search.py index 55b7bcb..2f00d4b 100644 --- a/library/search.py +++ b/library/search.py @@ -1,10 +1,11 @@ import os -from application.csvparser import CsvParser from whoosh.fields import * from whoosh.index import open_dir from whoosh.qparser import QueryParser +from application.csvparser import CsvParser + SCRIPT_DIR = os.path.dirname(__file__) DATA_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "data"))