[Zope] porting from Python Methods to PythonScripts
in2.3.0;LoginManager too
Jim Washington
jwashin@vt.edu
Mon, 29 Jan 2001 16:28:59 -0500
Hi, Fred
I discovered another bug in it. Where it changes stuff with "self[", it
changes it to "container.", which is wrong, but a simple edit.
new code:
import string
ids = container.objectIds('Python Method')
oldscriptsuffix='.old'
#replace all self. with the following:
#change to context if needed
newself = 'container'
#for future programmatic use just to be certain no extra dots
if string.find(newself,'.') >= 0:
newself = string.replace(newself,'.','')
for method_id in ids:
method_id = string.strip(method_id)
#get the Method and its title
method = container[method_id]
title = method.title
#FTPget does not require external method!
thebody = method.manage_FTPget()
#get the params
eop = string.find(thebody,'</params>')
params = thebody[8:eop]
params = string.replace(params,' ','')
params = string.replace(params,'self,','')
params = string.rstrip(string.replace(params,'self',''))
body = thebody[eop+10:]
#get the body
newbodylist = []
splitbody = string.split(body,'\n')
#do imports as needed
#bug: random will be imported if you use whrandom
for animport in ['string','whrandom','random','math']:
if string.find(body,animport+'.') >= 0:
newbodylist.append('import ' + animport)
for k in splitbody:
#this would be a good place for re
newstring = string.replace(k,'self.',newself + '.')
#bug: might miss 'self [' wish re were available
newstring = string.replace(newstring,'self[', newself + '[')
newbodylist.append(string.rstrip(newstring))
body = string.join(newbodylist,'\n')
# uncomment to see the raw data
# print 'params = "%s"' % params
# print 'body is:\n"%s"' % body
#rename the old and create the new. don't do more than once.
if method_id [-len(oldscriptsuffix):] <> oldscriptsuffix:
container.manage_renameObject(method_id,method_id+oldscriptsuffix)
container.manage_addProduct['PythonScripts'].manage_addPythonScript(method_id)
newscript = container[method_id]
newscript.ZPythonScript_setTitle(title)
newscript.ZPythonScript_edit(params, body)
print 'converted: \t%s' % method_id
if len(printed) < 9:
print "No methods to convert"
return printed
Thanks for trying it. Let me know any other bugs, and I may eventually
publish a howto.
-- Jim
>
> Jim,
>
> Thanks for the script. I plan to give it a try.
>