Update database dependencies

This commit is contained in:
rubenwardy 2023-04-23 21:49:53 +01:00
parent 660ef72532
commit a5ec46f14c
13 changed files with 38 additions and 27 deletions

@ -126,7 +126,7 @@ def check_for_ban():
models.db.session.commit() models.db.session.commit()
from .utils import clearNotifications, is_safe_url from .utils import clearNotifications, is_safe_url, create_session
@app.before_request @app.before_request
@ -159,7 +159,7 @@ def get_locale():
locale = request.accept_languages.best_match(locales) locale = request.accept_languages.best_match(locales)
if locale and current_user.is_authenticated: if locale and current_user.is_authenticated:
with models.db.create_session({})() as new_session: with create_session() as new_session:
new_session.query(models.User) \ new_session.query(models.User) \
.filter(models.User.username == current_user.username) \ .filter(models.User.username == current_user.username) \
.update({"locale": locale}) .update({"locale": locale})

@ -35,7 +35,7 @@ def audit():
abort(404) abort(404)
query = query.filter_by(causer=user) query = query.filter_by(causer=user)
pagination = query.paginate(page, num, True) pagination = query.paginate(page=page, per_page=num)
return render_template("admin/audit.html", log=pagination.items, pagination=pagination) return render_template("admin/audit.html", log=pagination.items, pagination=pagination)

@ -448,7 +448,7 @@ def list_all_reviews():
if q: if q:
query = query.filter(PackageReview.thread.has(Thread.title.ilike(f"%{q}%"))) query = query.filter(PackageReview.thread.has(Thread.title.ilike(f"%{q}%")))
pagination: flask_sqlalchemy.Pagination = query.paginate(page, num, True) pagination: flask_sqlalchemy.Pagination = query.paginate(page=page, per_page=num)
return jsonify({ return jsonify({
"page": pagination.page, "page": pagination.page,
"per_page": pagination.per_page, "per_page": pagination.per_page,
@ -601,7 +601,7 @@ def all_deps():
page = get_int_or_abort(request.args.get("page"), 1) page = get_int_or_abort(request.args.get("page"), 1)
num = min(get_int_or_abort(request.args.get("n"), 100), 300) num = min(get_int_or_abort(request.args.get("n"), 100), 300)
pagination: flask_sqlalchemy.Pagination = query.paginate(page, num, True) pagination: flask_sqlalchemy.Pagination = query.paginate(page=page, per_page=num)
return jsonify({ return jsonify({
"page": pagination.page, "page": pagination.page,
"per_page": pagination.per_page, "per_page": pagination.per_page,

@ -85,12 +85,12 @@ def create_edit_token(username, id=None):
if form.validate_on_submit(): if form.validate_on_submit():
if is_new: if is_new:
token = APIToken() token = APIToken()
db.session.add(token)
token.owner = user token.owner = user
token.access_token = randomString(32) token.access_token = randomString(32)
form.populate_obj(token) form.populate_obj(token)
db.session.add(token) db.session.commit()
db.session.commit() # save
if is_new: if is_new:
# Store token so it can be shown in the edit page # Store token so it can be shown in the edit page

@ -76,7 +76,7 @@ def list_all():
page = get_int_or_abort(request.args.get("page"), 1) page = get_int_or_abort(request.args.get("page"), 1)
num = min(40, get_int_or_abort(request.args.get("n"), 100)) num = min(40, get_int_or_abort(request.args.get("n"), 100))
query = query.paginate(page, num, True) query = query.paginate(page=page, per_page=num)
search = request.args.get("q") search = request.args.get("q")
type_name = request.args.get("type") type_name = request.args.get("type")
@ -273,6 +273,7 @@ def handle_create_edit(package: typing.Optional[Package], form: PackageForm, aut
return None return None
package = Package() package = Package()
db.session.add(package)
package.author = author package.author = author
package.maintainers.append(author) package.maintainers.append(author)
wasNew = True wasNew = True
@ -563,7 +564,7 @@ def audit(package):
query = package.audit_log_entries.order_by(db.desc(AuditLogEntry.created_at)) query = package.audit_log_entries.order_by(db.desc(AuditLogEntry.created_at))
pagination = query.paginate(page, num, True) pagination = query.paginate(page=page, per_page=num)
return render_template("packages/audit.html", log=pagination.items, pagination=pagination, return render_template("packages/audit.html", log=pagination.items, pagination=pagination,
package=package, tabs=get_package_tabs(current_user, package), current_tab="audit") package=package, tabs=get_package_tabs(current_user, package), current_tab="audit")

@ -36,7 +36,7 @@ def list_reviews():
page = get_int_or_abort(request.args.get("page"), 1) page = get_int_or_abort(request.args.get("page"), 1)
num = min(40, get_int_or_abort(request.args.get("n"), 100)) num = min(40, get_int_or_abort(request.args.get("n"), 100))
pagination = PackageReview.query.order_by(db.desc(PackageReview.created_at)).paginate(page, num, True) pagination = PackageReview.query.order_by(db.desc(PackageReview.created_at)).paginate(page=page, per_page=num)
return render_template("packages/reviews_list.html", pagination=pagination, reviews=pagination.items) return render_template("packages/reviews_list.html", pagination=pagination, reviews=pagination.items)

@ -50,7 +50,7 @@ def list_all():
page = get_int_or_abort(request.args.get("page"), 1) page = get_int_or_abort(request.args.get("page"), 1)
num = min(40, get_int_or_abort(request.args.get("n"), 100)) num = min(40, get_int_or_abort(request.args.get("n"), 100))
pagination = query.paginate(page, num, True) pagination = query.paginate(page=page, per_page=num)
return render_template("threads/list.html", pagination=pagination, threads=pagination.items, package=package) return render_template("threads/list.html", pagination=pagination, threads=pagination.items, package=package)

@ -108,7 +108,7 @@ def topics():
if num > 100 and not current_user.rank.atLeast(UserRank.APPROVER): if num > 100 and not current_user.rank.atLeast(UserRank.APPROVER):
num = 100 num = 100
query = query.paginate(page, num, True) query = query.paginate(page=page, per_page=num)
next_url = url_for("todo.topics", page=query.next_num, query=qb.search, next_url = url_for("todo.topics", page=query.next_num, query=qb.search,
show_discarded=qb.show_discarded, n=num, sort=qb.order_by) \ show_discarded=qb.show_discarded, n=num, sort=qb.order_by) \
if query.has_next else None if query.has_next else None

@ -20,6 +20,7 @@ import datetime
from sqlalchemy import or_, and_ from sqlalchemy import or_, and_
from app.models import User, db, UserRank, ThreadReply, Package from app.models import User, db, UserRank, ThreadReply, Package
from app.utils.models import create_session
from app.tasks import celery from app.tasks import celery
@ -37,7 +38,7 @@ def delete_inactive_users():
@celery.task() @celery.task()
def upgrade_new_members(): def upgrade_new_members():
with db.create_session({})() as session: with create_session() as session:
threshold = datetime.datetime.now() - datetime.timedelta(days=7) threshold = datetime.datetime.now() - datetime.timedelta(days=7)
session.query(User).filter(and_(User.rank == UserRank.NEW_MEMBER, or_( session.query(User).filter(and_(User.rank == UserRank.NEW_MEMBER, or_(

@ -34,17 +34,18 @@ def is_int(v):
@pytest.fixture @pytest.fixture
def client(): def client():
app.config["TESTING"] = True with app.app_context():
app.config['WTF_CSRF_ENABLED'] = False app.config["TESTING"] = True
app.config['WTF_CSRF_ENABLED'] = False
recreate_db() recreate_db()
assert User.query.count() == 2 assert User.query.count() == 2
with app.test_client() as client: with app.test_client() as client:
yield client yield client
app.config["TESTING"] = False app.config["TESTING"] = False
app.config['WTF_CSRF_ENABLED'] = True app.config['WTF_CSRF_ENABLED'] = True
def validate_package_list(packages, strict=False): def validate_package_list(packages, strict=False):

@ -22,6 +22,7 @@ import sqlalchemy.orm
from flask import abort, redirect, url_for, request from flask import abort, redirect, url_for, request
from flask_login import current_user from flask_login import current_user
from sqlalchemy import or_, and_ from sqlalchemy import or_, and_
from sqlalchemy.orm import sessionmaker
from app.models import User, NotificationType, Package, UserRank, Notification, db, AuditSeverity, AuditLogEntry, ThreadReply, Thread, PackageState, PackageType, PackageAlias from app.models import User, NotificationType, Package, UserRank, Notification, db, AuditSeverity, AuditLogEntry, ThreadReply, Thread, PackageState, PackageType, PackageAlias
@ -149,3 +150,7 @@ def get_games_from_csv(session: sqlalchemy.orm.Session, csv: str) -> List[Packag
retval.extend(games) retval.extend(games)
return retval return retval
def create_session():
return sessionmaker(bind=db.engine)()

@ -70,11 +70,14 @@ def run_migrations_online():
poolclass=pool.NullPool) poolclass=pool.NullPool)
connection = engine.connect() connection = engine.connect()
args = current_app.extensions['migrate'].configure_args
args["compare_type"] = True
context.configure(connection=connection, context.configure(connection=connection,
target_metadata=target_metadata, target_metadata=target_metadata,
process_revision_directives=process_revision_directives, process_revision_directives=process_revision_directives,
compare_type=True, **args)
**current_app.extensions['migrate'].configure_args)
try: try:
with context.begin_transaction(): with context.begin_transaction():

@ -25,8 +25,8 @@ Flask-FlatPages==0.8.1
Flask-Gravatar==0.5.0 Flask-Gravatar==0.5.0
Flask-Login==0.6.2 Flask-Login==0.6.2
Flask-Mail==0.9.1 Flask-Mail==0.9.1
Flask-Migrate==3.1.0 Flask-Migrate==4.0.4
Flask-SQLAlchemy==2.5.1 Flask-SQLAlchemy==3.0.3
Flask-WTF==1.1.1 Flask-WTF==1.1.1
git-archive-all==1.23.1 git-archive-all==1.23.1
gitdb==4.0.10 gitdb==4.0.10
@ -60,9 +60,9 @@ requests==2.28.2
six==1.16.0 six==1.16.0
smmap==5.0.0 smmap==5.0.0
soupsieve==2.4.1 soupsieve==2.4.1
SQLAlchemy==1.4.31 SQLAlchemy==2.0.9
SQLAlchemy-Searchable==1.4.1 SQLAlchemy-Searchable==1.4.1
SQLAlchemy-Utils==0.38.2 SQLAlchemy-Utils==0.41.0
tomli==2.0.1 tomli==2.0.1
typing_extensions==4.5.0 typing_extensions==4.5.0
ua-parser==0.16.1 ua-parser==0.16.1