#!/usr/pub/bin/python ################################################################## # # $Id: template.py,v 1.3 1998/09/25 13:44:28 chenna Exp chenna $ # # $Source: /home/chenna/py/RCS/template.py,v $ # $Revison:$ # $Date: 1998/09/25 13:44:28 $ # $Author: chenna $ # $Locker: chenna $ # $State: Exp $ # # template modeule for html pages # # # Author : Chenna Ramu # BioComputing # EMBL, Heidelberg, Germany # # 11th June, 1997 # 28th Aug , 1997 # # # usage: # # # from sys import argv, exit import sys import string import regex import regsub def MakeTemplDict(fileName): marker = ':' httable = {} varDict = {} pageTable = {} tmpTable = {} value = '' key = '' pageKey = '' try: input = open(fileName,'r') except: print "Error %s: Cannot open the file ( %s ) " %(__name__,fileName) return for line in input.readlines(): line = string.strip(line) if len(line) > 0 and line[0] == '#': continue if line[0:1] == '$' : var = string.split(line,':=') varDict[string.strip(var[0])] = string.strip(var[1]) continue if(line[len(line)-2:len(line)]) == ":[" : pageKey = line[0:len(line)-2] httable = {} #initialize continue if (len(line) ==1 and line[0:1] == "]") : pageTable[pageKey] = httable pageTable[pageKey][key] = value value = '' httable = {} continue if line[0:1] == marker : if len(value) > 1: httable[key] = value value = '' key = string.strip(line)[1:] else: for (k,val) in varDict.items(): if regex.search(k,line) > 1: line = regsub.gsub(k,val,line) value = value + line + '\n' input.close() return pageTable,varDict # # super class # # t = template('filename','pagename') # class template: def __init__(self,fileName=None,pageLabel=None): self.httable = {} self.varDict = {} self.pageStack = [] self.currentFile = fileName self.currentPage = pageLabel self.cmdEval = None if fileName : self.currentFile = fileName try: self.pageTable,self.varDict = MakeTemplDict(fileName) if(pageLabel): self.TemplateSetPage(pageLabel) self.currentPage = pageLabel except: pass def TemplateInit(self,fileName,pageName=None): self.pageTable,self.varDict = MakeTemplDict(fileName) self.currentFile = fileName self.varDict = {} self.pageStack = [] self.currentPage = pageName self.cmdEval = None if pageName: self.TemplateSetPage(pageName) self.currentPage=pageName def TemplateSetPage(self,page): try: self.httable = self.pageTable[page] self.pageStack.append(page) self.currentPage = page except: print "No such Page Label : ",page def TemplateEvalPage(self): import syntax s = syntax.Syntax() self.httable = s.CommandDoForTable(self.httable) self.cmdEval = 1 return def TemplateResetPage(self): i = len(self.pageStack)-1 if i >= 0: self.pageStack.remove(self.pageStack[i]) def TemplateCheck(self): print " Checking httable...." if not len(self.httable): print " WARN: httable is empty " for (k,v) in self.httable.items(): print k + ':' for lines in string.split(v,'\n'): print " |",lines print " page Stack is \n " print self.pageStack def TemplateShowFirstKey(self): for v in self.pageTable.items(): fKey,fVal = v print fKey def TemplateCollectKeys(self): dicKeys = [] for v in self.pageTable.items(): tmpKey,tmpVal = v dicKeys.append(tmpKey) return dicKeys def TemplatePrintFrom(self,header,*vari): try: line = self.httable[header] except KeyError: if not self.currentPage: print "Error: Page is not Set, use TemplateSetPage " return print "Error: Label ( %s ) not found for Page ( %s )" \ %(header,self.currentPage) return try: print string.strip(line) %(vari) except TypeError: nArg = len(vari) nFmt = string.count(line,'%') print " Error : Not enough arguments " print " Reason: " print " Arguments supplied ",nArg print " Arguments required ",nFmt print "" print " Template File: ",self.currentFile print " Page : ",self.currentPage print " Label : ",header print " template line : ",line print " variables : ",vari def TemplateFillFrom(self,header,*vari): try: line = self.httable[header] except KeyError: print " Label %s not found " %(header) return line %(vari) def TemplateShowVariables(self): print "Available variables:\n " i = 0 for (k,v) in self.varDict.items(): i = i + 1 print i,": ",k," = ",v def TemplateRedirectPrint(self,ofile): self.save_stream = sys.stdout sys.stdout = ofile def TemplateResetPrint(self,ofile=''): sys.stdout = self.save_stream if ofile: ofile.close() def test(): from template import * t = template() t.TemplateInit('/home/chenna/py/bicwww.tmpl','dbInfo') t.TemplatePrintFrom('htmlHead') t.TemplateCheck() t.TemplateSetPage('farmPage') t.TemplateCheck() t.TemplateSetPage('pageInput') t.TemplateCheck() print "resetting to farm page " t.TemplateResetPage() t.TemplateCheck() print "resetting to dbInfo page " t.TemplateResetPage() t.TemplateCheck() def test2(fileName,pageName): from template import * t = template(fileName,pageName) ## t.TemplateCheck() ## print " ________ templatecheck finished " ## t.TemplatePrintFrom('tableStart') ## t.TemplateEvalPage() ## t.TemplateCheck() ## print 50 * '_' ## t.TemplateSetPage('tableStart') t.TemplateCheck() t.TemplateShowVariables() ## t.TemplateEvalPage() ## t.TemplateCheck() if __name__ == '__main__' : import sys try: fileName = sys.argv[1] pageName = sys.argv[2] except: print ' usage template.py filename pagename' else: test2(fileName,pageName)