Rework upgrade needed and check upgrade too far as an error for the database
This commit is contained in:
parent
a3e50e9b3c
commit
b475bfe8d4
@ -81,6 +81,12 @@ class BrickSQL(object):
|
||||
error=str(e)
|
||||
))
|
||||
|
||||
if self.upgrade_too_far():
|
||||
raise DatabaseException('Your database version ({version}) is too far ahead for this version of the application. Expected at most {required}'.format( # noqa: E501
|
||||
version=self.version,
|
||||
required=__database_version__,
|
||||
))
|
||||
|
||||
# Debug: Attach the debugger
|
||||
# Uncomment manually because this is ultra verbose
|
||||
# self.connection.set_trace_callback(print)
|
||||
@ -90,7 +96,7 @@ class BrickSQL(object):
|
||||
setattr(g, G_STATS, self.stats)
|
||||
|
||||
if not failsafe:
|
||||
if self.needs_upgrade():
|
||||
if self.upgrade_needed():
|
||||
raise DatabaseException('Your database need to be upgraded from version {version} to version {required}'.format( # noqa: E501
|
||||
version=self.version,
|
||||
required=__database_version__,
|
||||
@ -265,10 +271,6 @@ class BrickSQL(object):
|
||||
|
||||
return template.render(**context)
|
||||
|
||||
# Tells whether the database needs upgrade
|
||||
def needs_upgrade(self) -> bool:
|
||||
return self.version < __database_version__
|
||||
|
||||
# Raw execute the query without any options
|
||||
def raw_execute(
|
||||
self,
|
||||
@ -284,7 +286,7 @@ class BrickSQL(object):
|
||||
|
||||
# Upgrade the database
|
||||
def upgrade(self) -> None:
|
||||
if self.needs_upgrade():
|
||||
if self.upgrade_needed():
|
||||
for pending in BrickSQLMigrationList().pending(self.version):
|
||||
logger.info('Applying migration {version}'.format(
|
||||
version=pending.version)
|
||||
@ -293,6 +295,14 @@ class BrickSQL(object):
|
||||
self.executescript(pending.get_query())
|
||||
self.execute('schema/set_version', version=pending.version)
|
||||
|
||||
# Tells whether the database needs upgrade
|
||||
def upgrade_needed(self) -> bool:
|
||||
return self.version < __database_version__
|
||||
|
||||
# Tells whether the database is too far
|
||||
def upgrade_too_far(self) -> bool:
|
||||
return self.version > __database_version__
|
||||
|
||||
# Clean the query for debugging
|
||||
@staticmethod
|
||||
def clean_query(query: str, /) -> str:
|
||||
|
@ -41,7 +41,7 @@ admin_page = Blueprint('admin', __name__, url_prefix='/admin')
|
||||
def admin() -> str:
|
||||
database_counters: list[BrickCounter] = []
|
||||
database_exception: Exception | None = None
|
||||
database_needs_upgrade: bool = False
|
||||
database_upgrade_needed: bool = False
|
||||
database_version: int = -1
|
||||
nil_minifigure_name: str = ''
|
||||
nil_minifigure_url: str = ''
|
||||
@ -51,10 +51,10 @@ def admin() -> str:
|
||||
# This view needs to be protected against SQL errors
|
||||
try:
|
||||
database = BrickSQL(failsafe=True)
|
||||
database_needs_upgrade = database.needs_upgrade()
|
||||
database_upgrade_needed = database.upgrade_needed()
|
||||
database_version = database.version
|
||||
|
||||
if not database_needs_upgrade:
|
||||
if not database_upgrade_needed:
|
||||
database_counters = BrickSQL().count_records()
|
||||
except Exception as e:
|
||||
database_exception = e
|
||||
@ -96,7 +96,7 @@ def admin() -> str:
|
||||
database_counters=database_counters,
|
||||
database_error=request.args.get('error'),
|
||||
database_exception=database_exception,
|
||||
database_needs_upgrade=database_needs_upgrade,
|
||||
database_upgrade_needed=database_upgrade_needed,
|
||||
database_version=database_version,
|
||||
instructions=BrickInstructionsList(),
|
||||
nil_minifigure_name=nil_minifigure_name,
|
||||
@ -317,9 +317,12 @@ def update_themes() -> Response:
|
||||
@admin_page.route('/upgrade-database', methods=['GET'])
|
||||
@login_required
|
||||
@exception_handler(__file__, post_redirect='admin.admin')
|
||||
def upgrade_database() -> str:
|
||||
def upgrade_database() -> str | Response:
|
||||
database = BrickSQL(failsafe=True)
|
||||
|
||||
if not database.upgrade_needed():
|
||||
return redirect(url_for('admin.admin'))
|
||||
|
||||
return render_template(
|
||||
'admin.html',
|
||||
upgrade_database=True,
|
||||
|
@ -4,7 +4,7 @@
|
||||
<h5 class="border-bottom">Status</h5>
|
||||
{% if database_exception %}<div class="alert alert-danger" role="alert">An exception occured while loading this page: {{ database_exception }}</div>{% endif %}
|
||||
{% if database_error %}<div class="alert alert-danger" role="alert"><strong>Error:</strong> {{ database_error }}.</div>{% endif %}
|
||||
{% if database_needs_upgrade %}
|
||||
{% if database_upgrade_needed %}
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<p>Your database needs to be upgraded.</p>
|
||||
<hr>
|
||||
|
Loading…
Reference in New Issue
Block a user