RSS

GenericSetupを使う(2)

続き

    付与されたタグ:
  • Plone
少し思ったこととして、できればZopeの中に設定を入れるのはやめたいというのはあるのかもしれない。設定はXMLに入れる。ただ、互換性みたいな面からGSを使ってZopeの中に入れている。そんな気がするけど。できれば起動時に読み込んでしまってZopeの中には入れないようにしたいんじゃないのかな。必要ないもの。

GSに対応させる方法ですが、試行錯誤で今のところこんな感じかな。
__init__.py: profile_registr.registerProfile()を実行する。これでGSのprofileを使うことを実行。
profile_registry.registerProfile(
        name='default',
        title='ATAmazon',
        description='Profile for ATAmazon',
        path='profiles/default',
        product='ATAmazon',
        profile_type=EXTENSION,
        for_=IPloneSiteRoot)
で、実際にprofileを書いてく。
profiles/default/import_steps.xml: 必須ではないが…。GSの実行順序に依存関係があるときに必要らしい。
<?xml version="1.0"?>
<import-steps>
<import-step
id="ATAmazon_various"
version="0.3.20070303"
handler="Products.ATAmazon.setuphandlers.setupVarious"
title="ATAmazon: miscellaneous import steps">
Import steps that couldn't be mapped to other handlers.
</import-step>
</import-steps>
profiles/default/types.xml: まあ、こんなファイルをずらずら書いていくわけですよ
<?xml version="1.0"?>
<object name="portal_types" meta_type="Plone Types Tool">
<object name="AmazonItem" meta_type="Factory-based Type Information"/>
</object>
profiles/defaults/type/ATAmazon.xml: content typeへ与えるパラメータを書く
<?xml version="1.0"?>
<object name="AmazonItem" meta_type="Factory-based Type Information"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title">AmazonItem</property>
<property name="description">
</property>
<property name="content_icon">document_icon.gif</property>
<property name="content_meta_type">AmazonItem</property>
<property name="product">ATAmazon</property>
<property name="factory">addAmazonItem</property>
<property name="immediate_view">base_view</property>
<property name="global_allow">True</property>
<property name="filter_content_types">False</property>
<property name="allowed_content_types"/>
<property name="allow_discussion">False</property>
<alias from="edit" to="base_edit"/>
<action title="view" action_id="view" category="object" condition_expr=""
url_expr="string:${object_url}/amazon_item_view" visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
url_expr="string:${object_url}/base_edit" visible="True">
<permission value="Modify portal content"/>
</action>
<action title="Properties" action_id="metadata" category="object"
condition_expr="" url_expr="string:${object_url}/base_metadata"
visible="True">
<permission value="Modify portal content"/>
</action>
</object>
つくりかけなのでこれが動かんとか言われても困る。いままではATAmazon.pyに書いていたコードをこっちに全部引っ越してくることになる。
setuphandler.py: 何か実行する必要があるときに書くらしい。
def setupVarious(context):
site = context.getSite()
logger = context.getLogger('atamazon')
logger.info("atamazon_various: Nothing done")
return

Extension/Install.py: QuickInstllerを使うのに必要

from Products.CMFCore.utils import getToolByName

def install(portal):
setup_tool = getToolByName(portal, 'portal_setup')
setup_tool.setImportContext('profile-ATAmazon:default')
setup_tool.runAllImportSteps()
setup_tool.setImportContext('profile-CMFPlone:plone')
return "Ran all import steps."
それからconfigure.zcml
  <genericsetup:registerProfile
name="default"
title="ATAmazon"
directory="profiles/default"
description="Extension profile for default ATAmazon setup."
provides="Products.GenericSetup.interfaces.EXTENSION"
/>

まあ、短かくなったものだ。

あくまで作りかけのコードなので、これをそのまま参考にしても駄目ですよと。