82 lines
1.8 KiB
Python
82 lines
1.8 KiB
Python
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]
|
|
|
|
if not self.__parent is None:
|
|
return self.__parent.__getattr__(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]
|
|
|
|
if not self.__parent is None:
|
|
return self.__parent.__getitem__(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 "<TemplateModule (%s)>" % (", ".join(cl))
|