Mercurial > wikked
changeset 439:debeff30d9bd
update: Do a reset if the DB requires an upgrade.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 17 Apr 2017 21:36:49 -0700 |
parents | b259b440a9bd |
children | 50938f53ce8c |
files | wikked/db/base.py wikked/db/sql.py wikked/web.py wikked/wiki.py |
diffstat | 4 files changed, 26 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/db/base.py Mon Apr 17 21:36:33 2017 -0700 +++ b/wikked/db/base.py Mon Apr 17 21:36:49 2017 -0700 @@ -1,6 +1,13 @@ from wikked.utils import PageNotFoundError +class DatabaseUpgradeRequired(Exception): + def __init__(self, *args): + super().__init__( + "This wiki needs a database update. Please run `wk reset`.", + *args) + + class PageListNotFound(Exception): def __init__(self, list_name): super(PageListNotFound, self).__init__(
--- a/wikked/db/sql.py Mon Apr 17 21:36:33 2017 -0700 +++ b/wikked/db/sql.py Mon Apr 17 21:36:49 2017 -0700 @@ -16,7 +16,9 @@ Load) from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.session import Session -from wikked.db.base import Database, PageListNotFound, NoWantedPages +from wikked.db.base import ( + Database, + DatabaseUpgradeRequired, PageListNotFound, NoWantedPages) from wikked.page import Page, PageData, FileSystemPage, WantedPage from wikked.utils import split_page_url, lower_url @@ -362,8 +364,7 @@ def updatePage(self, page_info): if self._needsSchemaUpdate(): - raise Exception("This wiki needs a database update. " - "Please run `wk reset`.") + raise DatabaseUpgradeRequired() logger.debug("Updating SQL database for page: %s" % page_info.url) @@ -384,8 +385,7 @@ def updateAll(self, page_infos, force=False): if self._needsSchemaUpdate(): - raise Exception("This wiki needs a database upgrade. " - "Please run `wk reset`.") + raise DatabaseUpgradeRequired() logger.debug("Updating SQL database...")
--- a/wikked/web.py Mon Apr 17 21:36:33 2017 -0700 +++ b/wikked/web.py Mon Apr 17 21:36:49 2017 -0700 @@ -170,7 +170,7 @@ }) -from flask.ext.login import LoginManager +from flask.ext.login import LoginManager # NOQA login_manager = LoginManager() login_manager.init_app(app) login_manager.user_loader(user_loader) @@ -178,12 +178,12 @@ # Bcrypt extension. -from wikked.bcryptfallback import Bcrypt +from wikked.bcryptfallback import Bcrypt # NOQA app.bcrypt = Bcrypt(app) # Import the views. -# (this creates a PyFlakes warning but it's OK) +import wikked.commonroutes # NOQA import wikked.api.admin # NOQA import wikked.api.edit # NOQA import wikked.api.history # NOQA @@ -253,4 +253,3 @@ request_started.connect(on_request_started, app) request_tearing_down.connect(on_request_tearing_down, app) -
--- a/wikked/wiki.py Mon Apr 17 21:36:33 2017 -0700 +++ b/wikked/wiki.py Mon Apr 17 21:36:49 2017 -0700 @@ -5,6 +5,7 @@ import importlib import multiprocessing from configparser import SafeConfigParser, NoOptionError +from wikked.db import DatabaseUpgradeRequired from wikked.fs import FileSystem from wikked.auth import UserManager from wikked.scheduler import ResolveScheduler @@ -312,18 +313,22 @@ page_info.url, fields=['url', 'path', 'title', 'text'])) - def updateAll(self, parallel=False): + def updateAll(self, parallel=False, reset_on_db_upgrade_required=True): """ Completely updates all pages, i.e. read them from the file-system and have them fully resolved and cached in the DB. This function will check for timestamps to only update pages that need it. """ logger.info("Updating all pages...") - page_infos = self.fs.getPageInfos() - self.db.updateAll(page_infos) - self.resolve(parallel=parallel) - self.index.updateAll(self.db.getPages( - fields=['url', 'path', 'title', 'text'])) + try: + page_infos = self.fs.getPageInfos() + self.db.updateAll(page_infos) + self.resolve(parallel=parallel) + self.index.updateAll(self.db.getPages( + fields=['url', 'path', 'title', 'text'])) + except DatabaseUpgradeRequired: + logger.info("Database upgrade required... running full reset.") + self.reset(parallel=parallel) def getPageUrls(self, subdir=None): """ Returns all the page URLs in the wiki, or in the given