############################################################################## # # Copyright (c) 2004 A Mennucci # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################## import re, os trigger_re_default=re.compile(r'.*href.*=.*dtml.*sequence-key.*manage_workspace.*', re.I) before_re_default=re.compile(r' * *', re.I) def patch(file, trigger_re=trigger_re_default, before_re=before_re_default): """runtime patching of dtml returns a file name that can be sent into Globals.DTMLFile """ f=open(ZOPE_HOME+os.path.sep+file) base=os.path.basename(file) try: import tempfile #needs python 2.3 w=tempfile.NamedTemporaryFile(suffix='.dtml') newname=w.name w.close() #see if we can reopen (on Windows NT, we cannot) w=open(newname,'w') except: newname=INSTANCE_HOME+os.path.sep+'var'+\ os.path.sep+base+'_patched_by_ExternalEditor_init.dtml' w=open(newname,'w') a=f.readline() flag=0 while a: if flag == 0 and trigger_re.match(a): flag=1 if flag == 1 and before_re.match(a) : w.write(' \n') flag = 2 w.write(a) a=f.readline() f.close() w.close() return newname[:-5] if __name__ == '__main__' : ZOPE_HOME='/usr/lib/zope' INSTANCE_HOME='/tmp' print patch('lib/python/OFS/dtml/main.dtml') print patch('lib/python/OFS/dtml/findResult.dtml')