Personal tools
You are here: Home メモ ZopeSetupScript

ZopeSetupScript

— filed under: ,

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()

Document Actions