diff -r e89e3f3a60db -r 26df557482d8 qmsk_www_pages/pages.py --- a/qmsk_www_pages/pages.py Sun Sep 14 04:42:01 2014 +0300 +++ b/qmsk_www_pages/pages.py Sun Sep 14 04:58:01 2014 +0300 @@ -181,10 +181,26 @@ else: title_default = None + parents = self.parents + (self, ) + for path, file_name, file_type in self.scan(): # match on name - if file_name != name: + if file_name != name and (file_name + '.' + file_type != name): continue + + # redirects? + if os.path.islink(path): + target = os.readlink(path) + + # XXX: this should be some kind of common code + if '.' in target: + target, target_type = target.rsplit('.', 1) + + log.info("%s: %s -> %s", self, name, target) + + return RedirectPage(path, name, self, parents, + target = target, + ) # match on type if not file_type: @@ -198,12 +214,7 @@ # out title = self.item_title(file_name) or title_default - return page_type( - path = path, - name = name, - tree = self, - parents = self.parents + (self, ), - + return page_type(path, name, self, parents, title = title, ) @@ -286,11 +297,27 @@ def modified (self): return datetime.datetime.utcfromtimestamp(self.stat().st_mtime) - def render (self, request): + def redirect_page (self, request): + return None + + def render_html (self, request): raise NotImplementedError() +# TODO: tree redirects +class RedirectPage (Page): + def __init__ (self, path, name, tree, parents, + target, + **opts + ) : + super(RedirectPage, self).__init__(path, name, tree, parents, **opts) + + self.target = target + + def redirect_page (self, request): + return os.path.normpath(self.tree.url() + '/' + self.target) + class HTML_Page (Page): - def render (self, request): + def render_html (self, request): return self.open().read() SITE = Site.lookup()