PythonScript で標準以外のモジュールを使う
PythonScript を使うようになると、re が使いたいなぁとか思うことがありますが初期状態ではセキュリティの観点から使えないようになっています。ここではそのような標準以外のモジュールを使えるようにする設定について書きます。
zope管理画面(ZMI) から作成できる Python Script には、セキュリティの観点から利用できるモジュールが極端に制限されています。(string, math, randam とか程度)
それだけじゃ不便で使いたいモジュールが存在する場合には、このモジュールを使えるようにするという設定を zope サーバに対して行う必要があります。
モジュール追加プロダクト作成
モジュールを追加するためには、モジュールを追加するという命令を記述したプロダクトを作成する必要があります。
といってもそんなに難しいわけではなく、雛形が用意されているのでそれを利用します。
まず、zope インスタンスの Products ディレクトリに GlobalModules とかいた適当なディレクトリを作成ます。
# cd /var/lib/zope/Products # mkdir /var/lib/zope/Products/GlobalModules
次に、/usr/lib/zope/lib/python/Products/PythonScripts/
にあるサンプル(modyle_access_examples.py)を
__init__.py という名前でコピーします。
# cp /usr/lib/zope/lib/python/Products/PythonScripts/module_access_examples.py \ __init__.py
このスクリプトを見れば使い方がわかりますが allow_module や allow_class という関数を使って利用可能なモジュールやクラスを指定します。
私の場合は以下の部分をコメントアウトして、re と fnmatch を利用できるようにしました。:
ModuleSecurityInfo('fnmatch').declarePublic('fnmatch', 'fnmatchcase')
ModuleSecurityInfo('re').declarePublic('compile', 'findall',
'match', 'search', 'split', 'sub', 'subn', 'error',
'I', 'L', 'M', 'S', 'X')
import re
allow_type(type(re.compile('')))
allow_type(type(re.match('x','x')))
あとは zope サーバを再起動すると、これらのモジュールが Python Script から使えるようになります。