Zope3Book メモ

2005/03/26 更新

 あくまでもメモです。何でも思いついたことを書いてます。恥ずかしい間違いや勘違いもあると思います。間違い・勘違いを指摘していただくと、反映されるかもしれませんし、されないかもしれません。

A. Zope 3 from a User's Point of View

1. Install Zope 3

Zope 3 のインストールの仕方の解説。
sample_principals.zcml を principals.zcml にコピーしてユーザーを書き換える。
zope.conf から設定を読み込むが、zope.conf がなかったら zope.conf.in を使う。

2. The new Web-based User Interface

新しい Web ベース UI の使い方。
ZPT Page を Add して

<h1 tal:content="context/zope:title">title hear</h1>

と書いて Preview すると、ZPT の置いてあるフォルダのタイトルが表示される。
でも zope: って何だ?

http://localhost:8080/++apidoc++ にアクセスすると API ドキュメントが見られる

Zope 2 では、見せるページと、管理用画面(ZMI)の2つの世界が存在していたが、Zope 3 では、それらが Plone のように渾然一体となって存在している。
Zope 3 では、ZMI の skin をカスタマイズするようなことができる。
例えば、ZopeTop skin は http://localhost:8080/++skin++ZopeTop/ で見られる。

Zope3 では、Content Space と Software Space という2つの空間がある。
Software Space は、ソフトウェアロジック等が置ける Content Space の入れ物。
Content Space には、コンテンツが置ける。
Content Space のコンテンツは、Software Space を超えて獲得しない。
ZPT の i18n タグの翻訳を Software Space の default パッケージのTranslate で定義できる。

3. Instal Zope Packages

Package (Zope 2 の Product に相当)のインストールの仕方の解説。
例として、zwiki を svn から取ってきてインストールしている。
psycopgda についてはMLのアーカイブを参照。

4. Setting Up Virtual Hosting

フロントに Apache を置く方法について解説。
Zope 3 では(Zope 2 の Virtual Host Monster のような)特別なオブジェクトを Add する必要はなく、RewriteRule を

RewirteRule ^/site(/?.*) \
http://localhost:8080/site/++vh++http:www.example.com:80/site/++$1 [P,L]

という感じで書く

5. Synchronizing Through-The-Web Code with the Filesystem

出版されている本にはない章
 TTW で編集したコードは ZODB に置かれるが、それだと Subversion でバージョン管理したり、diff を取ったりできないので、Zope 3 では ZODB 上のオブジェクトをファイルシステム上のファイルに同期するツール zsync が用意されている。
その zsync の使い方の解説。
ZopeX3-3.0.0 には入ってなくて、現状あんまりメンテナンスされてないそうなのであまりまじめに読まないほうが良いかも。

B. The Ten-Thousand Foot View

1. The Zope 3 Development Process

Zope 3 本体の開発の手順(手続き)とか、コーディング(ネーミング)ルールとか、バグ報告の仕方とかの説明。
package を書くとか、使うだけのひとにはあんまり関係ない。

2. An Introduction to Interfaces

インターフェース入門
Zope 3 では、Java の interface のようなものを zope.interface のクラスを派生して作り、そのインターフェースを使うクラスを実装するようにする。
本章では、IExample という サンプルインターフェースと、それを使ったSimpleExample クラスのサンプルコードを例示している。

インターフェースのコードを書いたら、そこから Class を作ってくれる pyskel.py というスクリプトが用意されている。

pyskel.py は、Subversion のリポジトリにしかないみたい(http://www.python.jp/pipermail/python-ml-jp/2005-March/003232.html

3. The Component Architecture - An Introduction

コンポーネント・アーキテクチャー入門
自分はよくわかってないが「デザイン・パターン」の本を読むとよいかも。

Services 

機能を果たす他のコンポーネントと連動しない関数みたいなもの。
CMF の Tool みたいなもの。

Adapters

 他のインターフェースを変換して橋渡しする glue components。
Utilities Services と同じように関数っぽい(Functional)ものだが、Serveices と違って、そのクラスがなくても Zope 3 自体は動作(サービス)できる。あると便利なもの、程度のもの。

Factories (Object Classes/Prototypes) 

うまく説明できないがとにかく Factory 

Skin

 CMF の skin と同じ考え方のもの。rotterdam(default), Basic, Debug, ZopeTop という skin がある

4. Zope Schemas and Widgets (Forms)

Zope 2 でいうところの Formulator に相当する機能の解説。
Schema と Field の API は apidoc の zope.schema.interfaces を見る。
Form は apidoc の zope.app.form.browser を見る。
あと、zope.schema package の README.txt を見るとよい(と本に書いてある)。

5. Introduction to the Zope Configuration Markup Languate (ZCML)

基本的な ZCML の書き方の解説・・・と言ってもこれだけ見てもわからない。
まずは、どっかの package のサンプルを見たほうが良いと思う。
本文中でも、 http://localhost:8080/++apidoc++/ を見て!と書いてある。
重要な namespace は、 zope, browser, meta, xmlrpc, i18n, help, mail あたり。

6. Introduction to Zope's I18n and L10n Support 

I18n の解説。だけど、この章の説明だけみてもよくわからん。
Plone 等で使われている Placeless Transaction Service と同じような仕組みらしい。

7. Meta Data and the Dublin Core

Zope 3 は Dublinc Core のメタデータを持てるよという話と、Dublin Core ( http://dublincore.org/ ) にこんなメタデータがあるよ、という話。
特別、Zope 3 だからどうという話はない。

8. Porting Applications

Zope 2(Product) から Zope 3(package) へポーティングする場合の指針。(あんま、たいしたこと書いてない)
Zope 2 では、モデルとビューの機能が1つのクラスに渾然一体となっているので、モデルの部分だけをくくりだし、ビューと ZCMLでつなげる ・・・って感じ?
あと Five http://codespeak.net/z3/five/ を使うという話。

C. Content Components - The Basics


1. Writing a new Content Object

メッセージボードの Content を定義するクラスを作ってみる。
http://svn.zope.org/book/trunk/messageboard/step01 のソースの説明。

  1. book ディレクトリを作って、空っぽの __init__.py を作る
  2. interfaces.py に インターフェースを書く
    例として、IMessage,IMessageBoard,IMessageContained,IMessageContainer を実装している。
  3. tests にテストを書く
  4. pyskel.py で、インターフェースからスケルトンの python コードを生成
  5. コードの修正をする(例では、MessageBoard を BTreeContainer から派生)
  6. Unit Test を実行してちゃんと動作するのを確認
  7. ZCML を書く(どのインターフェースが Factory だとか、Permission の指定とか)
  8. ZCML で View を定義(ちゃんとした View の実装は次章でやっている)
  9. Zope から使えるように package の登録(ZCMLに書く)

2. Adding Views

ページ単位に、

  1. ZPT を書く
  2. python の class を書く
  3. ZCML に page ディレクティブを書く

の繰り返し。
その他に

  1. Default View 
  2. icon

を ZCMLに書いてあげる。

3. Custom Schema Fields and Form Widgets

お決まりのインターフェースやクラスを派生して、python のコードを書いて ZCML に zope:view ディレクティブを書くとフォームができる、という話。

4. Securing Components

パーミッションの設定は、python のコードの中でなく、configure.zcml の中に書く。

  1. permission ディレクティブに、id, title, description を書く
  2. role ディレクティブに id, title, description を書く
  3. grant ディレクティブに、どの role にどの permission を与えるか書く
  4. どの principal にどの role を与えるか書く

どの View にどの permission が対応するかは、page ディレクティブや zope:view ディレクティブに書いてある(前章と前々章を参照)

5. Changing Size Information

サイズを返す ISized インターフェースを実装する例(Adapter の例)。
私は、adapter の良さをまだよく理解できていない。

6. Internationalizing a Package

package の国際化。決まりごとに従えばよいだけだが、手順はいろいろと面倒。

D. Content Components - Advanced Techniques

1. Events and Subscribers

メールによる Subscribe Unsubscribe を例に、Adapter の実装してみる。
メッセージボードのメッセージの Mail による購読の参加・退会機能。

2. Approval Workflow for Messages

ワークフローの定義の仕方。
State とか Transition は ZCML に記述する。
ツールなしにワークフローを定義するのは難しそう

3. Providing Online Help Screens

ヘルプの文章を書く(StructuredText とか reStructuredText とか Textで)。
package の configure.zcml に help namespace で内容(ファイルへのパス)を記述。

4. Object to File System mapping using FTP as an example

FTP の機能の実装例。いろんなインターフェースを実装して、ZCML で指定。
FTP の機能が必要になったときに読めば良い。

5. Availability via XML-RPC

XML-RPC サーバーの実装の仕方。

6. Developing new Skins

  1. skin を作る(ZPT とか Python で)
  2. ZCML で <layer /> を定義(skin をどう重ねるかを指定)。
  3. ZCML の <page /> で、どの layer を使うか指定してあげる

skin の考え方は、CMF に似てる。TTW で設定するのではなくて、ZCMLで定義してあげるところが違う。

E. Other Components 

1. Building and Storing Annotations

IAnnotable インターフェースを持った Adapter の作成。
なんだか意味が良くわからないけど、とりあえず必要なさそう。

2. New Principal-source plugins

principal のプラグインの作り方。
例では、単純なファイルをソースにした Principal-source plugin を作ってみている。

3. Principal Annotations

principal に注釈を加える。例では、e-mail と IRC nick handle を加えてみている。

4. New Resources

ZPT とかじゃなくて、単なるテキストとかイメージを browser リソースに加える。
単純に、browser:resources ディレクティブにファイル名とか、idとか指定する。

5. Registries with Global Utilities

メッセージボードのメッセージの中のスマイリーマーク ;-) を png イメージの
ニコニコマークに変換する utility インターフェースを作ってみる。

6. Local Utilities

Site 毎に、イメージのマッピングを変更できるスマイリー utility (前章と同じ)を作ってみる。

7. Developping a Lucene-based Text Index


全文検索のテキストインデックスについて。ZopeX-3.0.0 には実装されていなくて、かつ、書籍には、この章は存在しない。
現状の記述だけではなんだかよく分からない。

8. Vocabularies and Related Fields/Widgets

リストボックスにキーワード一覧を出すような場合の語彙(Vocabulary)を Fields/Widgets で使う例。
まだよく理解していない。

9. Exception Views

例外が発生した時の View のカスタマイズ。(Zope 2 の standard_error_message の記述に相当)

F. Advanced Topics

高度な話題。とりあえず、すぐには読まなくてもよさそう。
Zope 3 本体の開発のために必要な内容みたい。

1. Writing new ZCML Directives
2. Implementing a TALES Namespace
3. Changing Traversal Behavior
4. Registering new WebDAV Namespaces
5. Using TALES outside of Page Templates
6. Developping a new TALES expressions
7. Spacesuits -- Objects in Hostile Environments
8. The life of Request

G. Writing Tests

テストの書き方。
必要なんだけど似たような package からパクった方が早いと思う。

Zope 3 では、例えば svn から取得したディレクトリで

$ python test.py

を実行すると、パッケージのユニット・テストが行われるような仕組みになっている。

1. Writing Basic Unit Tests
2. Doctests: Example-driven Unit Tests
3. Writing Functional Tests
4. Writing Function Doc Tests
5. Writing Tests Against Interfaces


Zope メモ