import os import os.path import hserver class TemplateModule: def __init__(self,path,parent=None): self.__path = path self.__parent = parent self.__children = {} self.__altchildren = {} self.__load() def __load(self): if not os.path.exists( self.__path ): return l = os.listdir( self.__path ) for fn in l: p = "%s/%s" % (self.__path, fn) o = None if os.path.isdir( p ): o = TemplateModule( p, self) elif (os.path.isfile( p )): o = hserver.Template( template=fn, base=self.__path, provider=self) if not o is None: self.__children[ fn ] = o self.__altchildren[ self.transform(fn) ] = o def transform(self,name): if not name[0].isalpha(): name = "_%s" % (name,) return name.replace(".","_") def __getattr__(self,name): if not ((name in self.__children) or (name in self.__altchildren)): self.__load() if name in self.__children: return self.__children[name] if name in self.__altchildren: return self.__altchildren[name] raise AttributeError("%s not found in %s" % (name,self)) def __getitem__(self,name): if not ((name in self.__children) or (name in self.__altchildren)): self.__load() if name in self.__children: return self.__children[name] if name in self.__altchildren: return self.__altchildren[name] raise IndexError("%s not found in %s" % (name,self)) def provide(self,name): s = name.split("/") if len(s) > 1: return self[s[0]].provide("/".join(s[1:])) return self[s[0]] def __str__(self): cl = [] for c in self.__children: cl.append( c ) return "" % (", ".join(cl))