diff -r 9fd827df377f -r 1757261f2b95 qmsk_www_pages/pages.py --- a/qmsk_www_pages/pages.py Sun Sep 14 01:17:41 2014 +0300 +++ b/qmsk_www_pages/pages.py Sun Sep 14 01:37:10 2014 +0300 @@ -5,6 +5,8 @@ import os, os.path class Tree (object): + INDEX = 'index' + @classmethod def lookup (cls, parts): path = settings.QMSK_WWW_PAGES_DIR @@ -31,37 +33,90 @@ self.path = path self.parts = parts + + def url (self, tree=None, page=None): + path = '/'.join(self.parts) + + if path: + path += '/' + + if tree: + path = tree + '/' + + if page: + path += page + + return path + + def scan (self): + """ + Scan for files in tree. + """ + + for filename in os.listdir(self.path): + if filename.startswith('.'): + continue + + if '.' in filename: + file_name, file_type = filename.rsplit('.', 1) + else: + file_name = filename + file_type = None + + if not file_name: + continue + + path = os.path.join(self.path, filename) + + yield path, file_name, file_type + + def list (self): + """ + Lists all Trees and Pages for this Tree + """ + + for path, file_name, file_type in self.scan(): + # trees + if os.path.isdir(path): + yield self.url(tree=file_name), file_name + + if file_name == self.INDEX: + continue + + # pages + if not file_type: + continue + + if file_type not in TYPES: + continue + + yield self.url(page=file_name), file_name + def page (self, name): """ Scans through tree looking for a matching page. Returns Page. """ - - page_type = None + + if not name: + name = self.INDEX - for filename in os.listdir(self.path): - if filename.startswith('.'): - continue - - if '.' not in filename: - continue - - file_name, file_type = filename.rsplit('.', 1) - path = os.path.join(self.path, filename) - - if not file_name: - continue - + for path, file_name, file_type in self.scan(): + # match on name if file_name != name: continue - # page_name matches + # match on type + if not file_type: + continue + page_type = TYPES.get(file_type) if not page_type: continue - + + # out return page_type( path = path, name = name, @@ -93,9 +148,6 @@ page_name = '' tree_parts = [] - if not page_name: - page_name = 'index' - # scan dir tree = Tree.lookup(tree_parts) @@ -122,10 +174,17 @@ def breadcrumb (self): path = [] - for part in self.tree.parts + [ self.name ]: + yield '', 'Home' + + for part in self.tree.parts: path.append(part) - yield '/'.join(path), part + yield '/'.join(path) + '/', part + + if self.name != self.tree.INDEX: + path.append(self.name) + + yield '/'.join(path), self.name def render (self, request): raise NotImplementedError()