[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.
>