ZopeSetupScript
Zope/Ploneのインスタンスを作ったときに毎回行う定型作業を自動的に行うスクリプト。ZCTextIndex差し替え機能はまだうまく動作してない感じ?
zopesetupscript.py
—
Python Source,
4Kb
File contents
# this script is run by 'zopectl run makebase.py'.
# REQUIRED: Plone2.1.1, ejSplitter, jaMailHost
# for double initialization guard
if app.hasProperty('management_page_charset'):
raise RuntimeError,'management_page_charset is already exist.'
def main(app):
app = setupDummyRequest(app)
setupDefaultUser(app, 'admim', 'admin')
setupCharset(app, 'utf-8')
setupPloneSite(app, 'plone')
#replacePortalCatalogLexicon(app, 'plone')
setupJaMailHostEncoding(app, 'plone', 'utf-8')
replaceRootIndexHtml(app, 'plone')
def setupDummyRequest(app):
# setup dummy REQUEST
from ZPublisher.BaseRequest import RequestContainer
from ZPublisher.Request import Request
from ZPublisher.Response import Response
import sys
response = Response()
environ = {}
environ['SERVER_NAME'] = 'nohost'
environ['SERVER_PORT'] = '80'
environ['REQUEST_METHOD'] = 'GET'
request = Request(sys.stdin, environ, response)
request._steps = ['noobject']
request['ACTUAL_URL'] = request.get('URL')
return app.__of__(RequestContainer(REQUEST=request))
def setupDefaultUser(app, user_id, user_pw):
# set default user
from AccessControl.SecurityManagement import newSecurityManager
app.acl_users.userFolderAddUser(user_id, user_pw,['Manager'], None)
user = app.acl_users.getUserById(user_id).__of__(app.acl_users)
newSecurityManager(None, user)
def setupCharset(app, charset):
# set manage encoding
app.manage_addProperty('management_page_charset', charset, 'string')
def setupPloneSite(app, plone_id):
# create Plone site
app.manage_addProduct['CMFPlone'].manage_addSite(
id=plone_id,
title='Portal',
description='',
create_userfolder=1,
email_from_address='postmaster@localhost',
email_from_name='Portal Administrator',
validate_email=0,
custom_policy='Default Plone',
)
def replacePortalCatalogLexicon(app, plone_id):
# replace catalog's splitter to ejSplitter
pc = app[plone_id].portal_catalog
class Element:
def __init__(self, group, name):
self.name = name
self.group = group
pc.manage_addProduct['ZCTextIndex'].manage_addLexicon(
'ej_lexicon',
title='',
elements=[
Element('Word Splitter', 'ejSplitter for Japanese(UTF-8)'),
Element('Case Normalizer', 'Case Normalizer'),
Element('Stop Words', 'Remove listed and single char words'),
],
)
from Acquisition import aq_base
from Products.ZCTextIndex.ZCTextIndex import ZCTextIndex
zcs = [x.getId() for x in pc.getIndexObjects() if type(aq_base(x))==ZCTextIndex]
class Extra: pass
extra = Extra()
extra.index_type = 'Cosine Measure'
extra.lexicon_id = 'ej_lexicon'
for id in zcs:
pc.delIndex(id)
pc.addIndex(id, 'ZCTextIndex', extra=extra)
pc.reindexIndex(zcs, None)
def setupJaMailHostEncoding(app, plone_id, encoding):
"set encoding to MailHost's title."
app[plone_id].MailHost.title = encoding
def replaceRootIndexHtml(app, plone_id):
# replace root index_html for redirect to plone
app.manage_delObjects('index_html')
app.manage_addProduct['PythonScripts'].manage_addPythonScript('index_html')
index_html = app['index_html']
index_html.ZPythonScript_edit(params='', body='return container.REQUEST.RESPONSE.redirect("/%s")'%plone_id)
main(app)
# Log out
from AccessControl.SecurityManagement import noSecurityManager
noSecurityManager()
# commit to zodb
import transaction
transaction.commit()
