Adding mapping Sitemap -> Link -> Page to deal with Content-Language
authorFredrik Unger <fred@tree.se>
Wed, 6 Apr 2011 20:04:38 +0000 (22:04 +0200)
committerFredrik Unger <fred@tree.se>
Wed, 6 Apr 2011 20:04:38 +0000 (22:04 +0200)
and other representation of a page at the same link.

Tree does not have an iterator, hence the link set will not currently work.
The Page object will do conversion, and templating, preparing menues
as all that work is language dependant. Link matches sitemap.txt entries
and matches the Directory object.

src/tree-cutter.py

index 97ac6a2a65f15fdb7bf00c3fa09ba7c12b3f7ff2..0be43854431e635270704f59891bf8629db3ca9a 100755 (executable)
@@ -10,6 +10,7 @@ import time
 import argparse
 import shutil
 import pygraphviz as pgv
+import glob
 from amara import bindery
 from amara.xslt import transform
 from Cheetah.Template import Template
@@ -70,11 +71,36 @@ class Directory():
         return set(self._tree)
 
 class Page():
+    """Class representing a version of a webpage"""
+    def __init__(self,page):
+        self._file = page[1]
+        self._lang = page[0]
+        self._doc = None
+        self._resources = []
+        self._title = None
+        self._menu = None
+        self._rendered_article = None
+
+class Link():
     """Class representing a webpage on the site"""
     def __init__(self,link):
         self._link = link
-        self._resources = []
-        self._script = 0
+        # find the representations of the link.
+        self._pages = []
+        path = link
+        if self._link[-1] == '/':
+            path = path+'index'
+        lang = self._scan_languages(path)
+        for l in lang:
+            self._pages.append(Page(l))
+
+    def _scan_languages(self,path):
+        lang = []
+        for l in  glob.glob('.'+path+'*'):
+            ls = l.split('.')
+            if len(ls) > 3 and ls[3] == 'xml':
+                lang.append((ls[2],l))
+        return lang
 
     def link(self):
         return self._link
@@ -133,14 +159,11 @@ class Sitemap():
     """Class keeping the internal site structure"""
     def __init__(self):
         self._file = 'sitemap.txt'
-        self._pages = []
         self._tree = Trie()
 
-    def add_page(self, link):
-        page = Page(link)
-        self._pages.append(page)
+    def add_link(self, link):
         tokens = filter(None,re.split(r'(^/\w*/|\w*/)',link))
-        self._tree.add(tokens,page)
+        self._tree.add(tokens,Link(link))
 
     def read_map(self):
         try:
@@ -148,15 +171,12 @@ class Sitemap():
             sml = f.read().split()
             f.close()
             for line in sml:
-                self.add_page(line)
+                self.add_link(line)
         except IOError, what_error:
             print 'INFO: Could not read sitemap.txt - one will be created'
 
     def set(self):
-        return set(page.link() for page in self._pages)
-
-    def pages(self):
-        return self._pages
+        return set(link.link() for link in self._tree)
 
     def graph(self):
         self._tree.graph()