Hi, Jochen Knuth <[EMAIL PROTECTED]> wrote: > >Hi, > >i have a ZClass with a property which is renderd as structured text. >Because i designed this ZClass before there was a standard for including >images, i made my own extension of structured text formating. >Short: I used __imageobject__ as markup for the image. > >Now i want to update all my zclass instances to the new syntax (while >upgrading to Zope 2.5.1). > >I have a Python Script listKBE, which call an External Method updateKBE. >If i use it with a path with only a few ZClass instances (about 10) it >works (slowly). If i use it with a path with about 550 instances it >crashes or is extreme slow. >Anyone to suggest a faster method? > >Thank you, >Jochen
replying to myself: i now do a ZopeFind (or correct: two nested ZopeFinds) in the External Method (attached) and give the result to the converter function. It works now reasonably fast, even with all my ZClass instances (about 600). Is there so much overhead in Python Scripts calling an External method? (i used also ZopeFind in the PythonScript, in a variation of my previous mail) Or is it the getObject() call in the Python Scripts? Ciao, Jochen -- -------------------------------------------------- Jochen Knuth WebMaster http://www.ipro.de IPRO GmbH Phone ++49-7152-93330 Steinbeisstr. 6 Fax ++49-7152-933340 71229 Leonberg EMail: [EMAIL PROTECTED]
#!/usr/local/bin/python import string import re def punc_func(exclude): punc = r'' for char in string.punctuation: if char not in exclude: punc = punc + r'\%s' % char return punc digits = string.digits letters = string.letters literal_punc = punc_func("'") dbl_quoted_punc = punc_func("\"") strongem_punc = punc_func('*') under_punc = punc_func('_<>') phrase_delimiters = r'\s\.\,\?\/\!\&\(\)' def kbeimage_search_replace(text): expr = re.compile(r'__([%s%s%s\s]+?)__' % (letters, digits, strongem_punc)).search r=expr(text) if r: #print r start, end = r.span(1) newtext='"bild":img:' newtext=text[:start-2]+newtext+text[start:end]+' '+text[end+2:] #print start,end #print newtext return kbeimage_search_replace(newtext) else: #pass return text def updateKBE(self,path): pathobj=self.restrictedTraverse(path) resultbases=self.ZopeFind(pathobj, obj_metatypes=['IPRO Knowledge Base'],search_sub=1) resultlist=[] for fid,fobj in resultbases: results=self.ZopeFind(pathobj, obj_metatypes=['IPRO Knowledge Base Entry']) for id,obj in results: resultlist.append(id) issue = obj.Issue newissue = kbeimage_search_replace(issue) obj.propertysheets.properties.manage_changeProperties({'Issue':newissue}) return resultlist