2011/12/19

Transmogrifier Export in Action

transmogrifier 可以匯入或匯出 Plone 網站的內容,之前的經驗以匯入 CSV 或 PostgreSQL 資料為主,現在完成匯出到 PostgreSQL 的實作。

以 develop.cfg 為例,要修改的內容如下:

eggs +=
    psycopg2
    SQLAlchemy == 0.6.5
    zope.sqlalchemy
    plone.app.transmogrifier

客製 myproj.transmogrifier 的內容摘要如下:

myproj.transmogrifier/configure.zcml

  <transmogrifier:registerConfig
    name="myproj.transmogrifier.exportContent"
    title="MyProject Export Content"
    description="Transmogrifier Pipeline config to export contents."
    configuration="confs/export.cfg"
    />

  <!-- register our blueprints -->
  <utility
    component=".contentexport.ContentExporterSection"
    name="myproj.transmogrifier.contentexporter"
    />

myproj.transmogrifier/browser/configure.zcml

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
    xmlns:zcml="http://namespaces.zope.org/zcml">

    <browser:page
        for="*"
        class=".contentexport.ContentExport"
        name="content-export"
        permission="cmf.ManagePortal"
        />
<configure>

myproj.transmogrifier/browser/contentexport.py

class ContentExport(BrowserView):

    def __call__(self):
        transmogrifier = ITransmogrifier(self.context)
        transmogrifier('myproj.transmogrifier.exportContent')
        self.request.response.write('exported')

myproj.transmogrifier/confs/export.cfg

[transmogrifier]
pipeline =
    contentexport

[contentexport]
blueprint = myproj.transmogrifier.contentexporter
dsn = postgresql://myuser:mysecret@localhost:5432/mydb
portal-types = News Item, Event
review-states = published

另外,還有 myproj.transmogrifier/models.py 和 myproj.transmogrifier/contentexport.py 兩個主檔,分別負責資料庫連線和匯出工作。

No comments: