|
|
メモ
zope-memo の有益な情報やメモ&覚書
Firebird(interbase) にて、テーブルを作成する場合通常テーブル名、フィールド名は大文字になる。 create table "hogetable"( "hoge1" integer NOT NULL, "hogebody" varchar(128) character set EUCJ_0208, PRIMARY KEY("hoge1") ) のように""でくくると小文字で登録される事を発見した。 しかし、Python Database APIにて Insert 等処理しようとすると、そんなテーブル名は見つからないとでる。 原因不明だが、一応メモ
LocalFS が、context.manage_addProduct['LocalFS'].manage_addLocalFS(***)でエラーがでる。 対策: LocalFS フォルダのLocalFS.py を開き以下のように修正する。 1351: ob = LocalFS(id, title, basepath, username, password) 1352: self._setObject(id, ob) 1353: if REQUEST is not None:(これを加える) 1354: return self.manage_main(self, REQUEST) 理由:Zope Bible P195 で発見。 context.manage_addProduct['LocalFS'].manage_addLocalFS(***) で呼び出すと、REQUEST に None が渡される為だろう 別のプロダクトでもあるかも知れない(かな?)
ついでに覚書で。。。 あるフォルダの中にある PythonScript をすべて実行するには、 --- <dtml-in objectValues> <dtml-if "meta_type=='Script (Python)'"> <dtml-call "_['sequence-item']"> </dtml-if> </dtml-in> --- 試していないけど、多分これでもOKだろう。 --- <dtml-in "objectValues('Script (Python)')"> <dtml-call "_['sequence-item']"> </dtml-in> ---
今日も manage_XXX のネタ ZSQLMethod のプロパティに Advances -> Maximum rows to retrieve(実体は max_rows だった) は context.manage_advanced(max_rows,max_cache,cache_time,class_name,class_file) で設定可能だった。 ZOPE_HOME/lib/python/Shared/DC/ZRDB/DA.py で見つけた。 # ZSQLMethod プロパティ Advances -> Maximum rows to retrieve の事も忘れない内に書いておこう # Firebird, PostgreSQL は max_rows の値をゼロにしたら一行も読み込みません。なので、読み出したい最大レコード数をそのまま記入する # MySQL は max_rows の値をゼロにして、limit 文で対応する。 limit 文は wiki.zope.jp のどこだったか忘れたが、MySQLは設定できないとあったので、ひょっとして有益な情報かも知れない。
>>3 なる程、簡単だ! request はまだ別の使い方がありそうな気がする。 # でもあんまり調子にのると、穴(セキュリティ)あけるかも知れない。
>>2 まねですが、こんなんでもできました。 --- request = container.REQUEST request.form['file'] = """ print 'どうだろう' return printed """ context.manage_addProduct['PythonScripts'].manage_addPythonScript('foo', request) ---
今日も中神さんから有益な情報 http://www.freeml.com/message/zope-memo@freeml.com/0000440;j*** 抜粋すると、こんな感じ ----- context.manage_addProduct['OFSP'].manage_addXXXX とします。 具体的に、なんというメソッドを呼ぶかは lib/python/Products/OFSP/__init__.py を見ればわかります。 ----- これ、とっても嬉しかった。 実は、まだ悩んでいた事があったのですが、教えて君状態になりそうで質問できなかった。 何かと言うと manage_addPythonScript だ。これも教えて貰った context.manage_addProduct['PythonScripts'].manage_addPythonScript(id=XXX) で作成できた。が、そもそも PythonScript を作成すると言う事は、この中に処理を書きたいからだと思う。 この場合の XXX は、PythonScript の単なる id 文字列になるのでどのようにアクセスするか? --- tempFolder --- Scriptを作成したいフォルダ XXX ---- 今作った PythonScript の id 文字列(これはスクリプト上で作成する為単なる文字列) context.tempFolder.manage_addProduct['PythonScripts'].manage_addPythonScript(id=XXX) context.tempFolder.XXX.ZPythonScript_edit(params, body) ここで、行き詰まる。XXX ってどうかくの? 補足> XXX は作成した直後は単なる文字列です。例えば XXX = 'run%spy' % table lib/python/Products/OFSP/__init__.py ソースと、中神さんのメールでふと思う。 context.tempFolder[XXX].ZPythonScript_edit(params,body) ではどうだろう? できた!、中神さん、田原さん、感謝、感謝です。 # でも「どうだろう」なのでまだ解ってない...
解らなかった事、教えて貰った事の整理をしておこうと思って作ってみた。 昨日尋ねた、context.manage_addZSQLMethod は、context.manage_addProduct['ZSQLMethods'].manage_addZSQLMethod と書くらしい。 田原さんに教えて貰った。田原さん見ていないだろうけど感謝。
|
|