changeset 285:bdc682d02427

Add a DB column for each page's endpoint.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 27 Sep 2014 14:06:21 -0700
parents e2e809fb44d4
children c0508545f8e5
files wikked/db/base.py wikked/db/sql.py
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/wikked/db/base.py	Sat Sep 27 14:05:41 2014 -0700
+++ b/wikked/db/base.py	Sat Sep 27 14:06:21 2014 -0700
@@ -32,7 +32,7 @@
         raise NotImplementedError()
 
     def getPages(self, subdir=None, meta_query=None, uncached_only=False,
-                 fields=None):
+                 endpoint_only=None, no_endpoint_only=False, fields=None):
         raise NotImplementedError()
 
     def getPage(self, url=None, path=None, fields=None, raise_if_none=True):
--- a/wikked/db/sql.py	Sat Sep 27 14:05:41 2014 -0700
+++ b/wikked/db/sql.py	Sat Sep 27 14:06:21 2014 -0700
@@ -16,6 +16,7 @@
 from sqlalchemy.orm.exc import NoResultFound
 from wikked.db.base import Database
 from wikked.page import Page, PageData, FileSystemPage
+from wikked.utils import split_page_url
 
 
 logger = logging.getLogger(__name__)
@@ -34,6 +35,7 @@
     # to be indexable by SQL).
     url = Column(String(260), unique=True)
     path = Column(String(260), unique=True)
+    endpoint = Column(String(64))
     title = Column(UnicodeText)
     raw_text = Column(UnicodeText(length=2 ** 31))
     formatted_text = Column(UnicodeText(length=2 ** 31))
@@ -125,7 +127,7 @@
 class SQLDatabase(Database):
     """ A database cache based on SQL.
     """
-    schema_version = 4
+    schema_version = 5
 
     def __init__(self, config):
         Database.__init__(self)
@@ -294,7 +296,7 @@
             yield p.url
 
     def getPages(self, subdir=None, meta_query=None, uncached_only=False,
-                 fields=None):
+                 endpoint_only=None, no_endpoint_only=False, fields=None):
         q = self.session.query(SQLPage)
         if meta_query:
             q = q.join(SQLReadyMeta)
@@ -307,6 +309,10 @@
             q = q.filter(SQLPage.url.like(subdir))
         if uncached_only:
             q = q.filter(SQLPage.is_ready is False)
+        if endpoint_only:
+            q = q.filter(SQLPage.endpoint == endpoint_only)
+        elif no_endpoint_only:
+            q = q.filter(SQLPage.endpoint == None)
         q = self._addFieldOptions(q, fields)
         for p in q.all():
             yield SQLDatabasePage(self, p, fields)
@@ -440,6 +446,7 @@
         po = SQLPage()
         po.time = datetime.datetime.now()
         po.url = page.url
+        po.endpoint, _ = split_page_url(page.url)
         po.path = page.path
         po.title = page.title
         po.raw_text = page.raw_text