--- a/qmsk_www_pages/pages.py Sun Sep 14 01:45:17 2014 +0300
+++ b/qmsk_www_pages/pages.py Sun Sep 14 02:15:25 2014 +0300
@@ -1,15 +1,28 @@
from django.conf import settings
import codecs
+import datetime
import logging; log = logging.getLogger('qmsk_www_pages.pages')
import os, os.path
+class Site (object):
+ @classmethod
+ def lookup (cls):
+ return cls(
+ root = settings.QMSK_WWW_PAGES_DIR,
+ name = settings.QMSK_WWW_PAGES_SITE,
+ )
+
+ def __init__ (self, root, name):
+ self.root = root
+ self.name = name
+
class Tree (object):
INDEX = 'index'
@classmethod
- def lookup (cls, parts):
- path = settings.QMSK_WWW_PAGES_DIR
+ def lookup (cls, site, parts):
+ path = site.root
for part in parts:
if part.startswith('.'):
@@ -27,12 +40,12 @@
if not os.path.isdir(path):
return None
- return cls(path, parts)
+ return cls(path, parts, site)
- def __init__ (self, path, parts):
+ def __init__ (self, path, parts, site):
self.path = path
self.parts = parts
-
+ self.site = site
def url (self, tree=None, page=None):
path = '/'.join(self.parts)
@@ -51,7 +64,7 @@
def breadcrumb (self):
path = []
- yield '', 'Home'
+ yield '', self.site.name
for part in self.parts:
path.append(part)
@@ -88,7 +101,7 @@
for path, file_name, file_type in self.scan():
# trees
if os.path.isdir(path):
- yield self.url(tree=file_name), file_name
+ yield self.url(tree=file_name), file_name, None
if file_name == self.INDEX:
continue
@@ -100,7 +113,7 @@
if file_type not in TYPES:
continue
- yield self.url(page=file_name), file_name
+ yield self.url(page=file_name), file_name, file_type
def page (self, name):
"""
@@ -137,7 +150,7 @@
ENCODING = 'utf-8'
@classmethod
- def lookup (cls, page):
+ def lookup (cls, site, page):
"""
Lookup a Page from disk.
@@ -159,7 +172,7 @@
tree_parts = []
# scan dir
- tree = Tree.lookup(tree_parts)
+ tree = Tree.lookup(site, tree_parts)
if not tree:
return None
@@ -184,6 +197,9 @@
def open (self):
return codecs.open(self.path, encoding=self.encoding)
+ def stat (self):
+ return os.stat(self.path)
+
def breadcrumb (self):
for path, name in self.tree.breadcrumb():
yield path, name
@@ -191,6 +207,9 @@
if self.name != self.tree.INDEX:
yield self.url(), self.name
+ def modified (self):
+ return datetime.datetime.utcfromtimestamp(self.stat().st_mtime)
+
def render (self, request):
raise NotImplementedError()
@@ -198,6 +217,12 @@
def render (self, request):
return self.open().read()
+SITE = Site.lookup()
+
TYPES = {
'html': HTML_Page,
}
+
+def page (page):
+ return Page.lookup(SITE, page)
+