# HG changeset patch # User Ludovic Chabant # Date 1386260592 28800 # Node ID 1030a6e8d416b0fbfbf2fa6d8808de501d011c08 # Parent f47b047c9414b8b8fbf8f0cda217230d1d22f9fd Moved some database code up to the base class. diff -r f47b047c9414 -r 1030a6e8d416 wikked/db/base.py --- a/wikked/db/base.py Thu Dec 05 08:22:55 2013 -0800 +++ b/wikked/db/base.py Thu Dec 05 08:23:12 2013 -0800 @@ -1,3 +1,4 @@ +from wikked.utils import PageNotFoundError class Database(object): @@ -27,8 +28,20 @@ def getPages(self, subdir=None, meta_query=None): raise NotImplementedError() - def getPage(self, url=None, path=None): - raise NotImplementedError() + def getPage(self, url=None, path=None, raise_if_none=True): + if not url and not path: + raise ValueError("Either URL or path need to be specified.") + if url and path: + raise ValueError("Can't specify both URL and path.") + if url: + page = self._getPageByUrl(url) + elif path: + page = self._getPageByPath(path) + else: + raise NotImplementedError() + if page is None and raise_if_none: + raise PageNotFoundError(url or path) + return page def pageExists(self, url=None, path=None): raise NotImplementedError() @@ -36,3 +49,9 @@ def getLinksTo(self, url): raise NotImplementedError() + def _getPageByUrl(self, url): + raise NotImplementedError() + + def _getPageByPath(self, path): + raise NotImplementedError() + diff -r f47b047c9414 -r 1030a6e8d416 wikked/db/sql.py --- a/wikked/db/sql.py Thu Dec 05 08:22:55 2013 -0800 +++ b/wikked/db/sql.py Thu Dec 05 08:23:12 2013 -0800 @@ -246,29 +246,6 @@ for p in q.all(): yield SQLDatabasePage(self.wiki, db_obj=p) - def getPage(self, url=None, path=None, raise_if_none=True): - if not url and not path: - raise ValueError("Either URL or path need to be specified.") - if url and path: - raise ValueError("Can't specify both URL and path.") - if url: - q = self.session.query(SQLPage).filter_by(url=url) - page = q.first() - if page is None: - if raise_if_none: - raise PageNotFoundError(url) - return None - return SQLDatabasePage(self.wiki, db_obj=page) - if path: - q = self.session.query(SQLPage).filter_by(path=path) - page = q.first() - if page is None: - if raise_if_none: - raise PageNotFoundError(path) - return None - return SQLDatabasePage(self.wiki, db_obj=page) - raise NotImplementedError() - def pageExists(self, url=None, path=None): # TODO: replace with an `EXIST` query. return self.getPage(url, path, raise_if_none=False) is not None @@ -288,6 +265,20 @@ for p in q: yield SQLDatabasePage(self.wiki, db_obj=p) + def _getPageByUrl(self, url): + q = self.session.query(SQLPage).filter_by(url=url) + page = q.first() + if page is None: + return None + return SQLDatabasePage(self.wiki, db_obj=page) + + def _getPageByPath(self, path): + q = self.session.query(SQLPage).filter_by(path=path) + page = q.first() + if page is None: + return None + return SQLDatabasePage(self.wiki, db_obj=page) + def _createSchema(self): Base.metadata.drop_all(self.engine) Base.metadata.create_all(self.engine)