Updated new.py for creating Plone 3.5.5 Zope instances.
This commit is contained in:
parent
f82a0934d2
commit
e97782d05a
56
bin/new.py
56
bin/new.py
|
@ -96,9 +96,6 @@ class NewScript:
|
||||||
shutil.copytree(folderName, destFolder)
|
shutil.copytree(folderName, destFolder)
|
||||||
|
|
||||||
uglyChunks = ('pkg_resources', '.declare_namespace(')
|
uglyChunks = ('pkg_resources', '.declare_namespace(')
|
||||||
wrongPackages = [os.sep.join(['plone', 'app', 'content']),
|
|
||||||
os.sep.join(['.egg', 'wicked'])
|
|
||||||
]
|
|
||||||
def findPythonPackageInEgg(self, currentFolder):
|
def findPythonPackageInEgg(self, currentFolder):
|
||||||
'''Finds the Python package that is deeply hidden into the egg.'''
|
'''Finds the Python package that is deeply hidden into the egg.'''
|
||||||
# Find the file __init__.py
|
# Find the file __init__.py
|
||||||
|
@ -112,15 +109,21 @@ class NewScript:
|
||||||
# Is it a awful egg init ?
|
# Is it a awful egg init ?
|
||||||
for chunk in self.uglyChunks:
|
for chunk in self.uglyChunks:
|
||||||
if content.find(chunk) == -1:
|
if content.find(chunk) == -1:
|
||||||
isFinalPackage = True
|
isFinalPackage = True # It is not an ugly egg init.
|
||||||
break
|
break
|
||||||
# Goddamned, there are exceptions.
|
|
||||||
for wrongPackage in self.wrongPackages:
|
|
||||||
if currentFolder.endswith(wrongPackage) and \
|
|
||||||
not isFinalPackage:
|
|
||||||
isFinalPackage = True
|
|
||||||
break
|
|
||||||
if not isFinalPackage:
|
if not isFinalPackage:
|
||||||
|
# Maybe we are wrong: our way to identify egg-viciated __init__
|
||||||
|
# files is approximative. If we believe it is not the final package,
|
||||||
|
# but we find other Python files in the folder, we must admit that
|
||||||
|
# we've nevertheless found the final Python package.
|
||||||
|
otherPythonFiles = False
|
||||||
|
for elem in os.listdir(currentFolder):
|
||||||
|
if elem.endswith('.py') and (elem != '__init__.py'):
|
||||||
|
otherPythonFiles = True
|
||||||
|
break
|
||||||
|
if otherPythonFiles:
|
||||||
|
# Ok, this is the final Python package
|
||||||
|
return currentFolder
|
||||||
# Find the subfolder and find the Python package into it.
|
# Find the subfolder and find the Python package into it.
|
||||||
for elem in os.listdir(currentFolder):
|
for elem in os.listdir(currentFolder):
|
||||||
elemPath = os.path.join(currentFolder, elem)
|
elemPath = os.path.join(currentFolder, elem)
|
||||||
|
@ -138,6 +141,33 @@ class NewScript:
|
||||||
return elemPath
|
return elemPath
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
viciatedFiles = {'meta.zcml': 'includePlugins',
|
||||||
|
'configure.zcml': 'includePlugins',
|
||||||
|
'overrides.zcml': 'includePluginsOverrides'}
|
||||||
|
def patchPlone(self, productsFolder, libFolder):
|
||||||
|
'''Auto-proclaimed ugly code in z3c forces us to patch some files
|
||||||
|
in Products.CMFPlone because these guys make the assumption that
|
||||||
|
"plone.xxx" packages are within eggs when they've implemented their
|
||||||
|
ZCML directives "includePlugins" and "includePluginsOverrides".
|
||||||
|
So in this method, I remove every call to those directives in
|
||||||
|
CMFPlone files. It does not seem to affect Plone behaviour. Indeed,
|
||||||
|
these directives seem to be useful only when adding sad (ie, non
|
||||||
|
Appy) Plone plug-ins.'''
|
||||||
|
ploneFolder = os.path.join(productsFolder, 'CMFPlone')
|
||||||
|
# Patch viciated files
|
||||||
|
for fileName, uglyDirective in self.viciatedFiles.iteritems():
|
||||||
|
filePath = os.path.join(ploneFolder, fileName)
|
||||||
|
f = file(filePath)
|
||||||
|
fileContent = f.read()
|
||||||
|
f.close()
|
||||||
|
if fileContent.find(uglyDirective) != -1:
|
||||||
|
toReplace = '<%s package="plone" file="%s" />' % \
|
||||||
|
(uglyDirective, fileName)
|
||||||
|
fileContent = fileContent.replace(toReplace, '')
|
||||||
|
f = file(filePath, 'w')
|
||||||
|
f.write(fileContent)
|
||||||
|
f.close()
|
||||||
|
|
||||||
def installPlone3Stuff(self, productsFolder, libFolder):
|
def installPlone3Stuff(self, productsFolder, libFolder):
|
||||||
'''Here, we will copy all Plone3-related stuff in the Zope instance
|
'''Here, we will copy all Plone3-related stuff in the Zope instance
|
||||||
we've created, to get a full Plone-ready Zope instance.'''
|
we've created, to get a full Plone-ready Zope instance.'''
|
||||||
|
@ -199,10 +229,9 @@ class NewScript:
|
||||||
if not os.path.exists(subFolderPath):
|
if not os.path.exists(subFolderPath):
|
||||||
os.mkdir(subFolderPath)
|
os.mkdir(subFolderPath)
|
||||||
# Create an empty __init__.py in it.
|
# Create an empty __init__.py in it.
|
||||||
init = os.path.join(subFolderPath,
|
init = os.path.join(subFolderPath,'__init__.py')
|
||||||
'__init__.py')
|
|
||||||
f = file(init, 'w')
|
f = file(init, 'w')
|
||||||
f.write('#Makes me a Python package.')
|
f.write('# Makes me a Python package.')
|
||||||
f.close()
|
f.close()
|
||||||
baseFolder = subFolderPath
|
baseFolder = subFolderPath
|
||||||
destFolder = os.sep.join(destFolders)
|
destFolder = os.sep.join(destFolders)
|
||||||
|
@ -214,6 +243,7 @@ class NewScript:
|
||||||
destFolder = os.path.join(
|
destFolder = os.path.join(
|
||||||
destFolder, os.path.basename(packageFolder))
|
destFolder, os.path.basename(packageFolder))
|
||||||
shutil.copytree(packageFolder, destFolder)
|
shutil.copytree(packageFolder, destFolder)
|
||||||
|
self.patchPlone(productsFolder, libFolder)
|
||||||
|
|
||||||
def manageArgs(self, args):
|
def manageArgs(self, args):
|
||||||
'''Ensures that the script was called with the right parameters.'''
|
'''Ensures that the script was called with the right parameters.'''
|
||||||
|
|
Loading…
Reference in a new issue