Personal tools
Navigation
About this blog
なごすいぶろぐ。「すべてはなごすいのために」。
Categories
COREBlog2 (29)
Zope (59)
Linux (26)
Misc (47)
Nagosui (11)
ReadingCOREBlog (7)
Plone (74)
Python (17)
Turbogears (18)
COREBlog1 (30)
moblog (5)
Django (12)
Recent entries
ALAにJeffさんの記事が。 nyusuke 2007-06-14
WebデザイナーのためのDjangoはじめの一歩 nyusuke 2007-05-29
東海Python Workshop 01終了 nyusuke 2007-05-27
東海Python Workshop 01が開催されます nyusuke 2007-05-13
管理画面からみるPlone3.0ベータ(後半) nyusuke 2007-05-03
Recent comments
Re:WebデザイナーのためのDjangoはじめの一歩 nyusuke 2007-06-01
Re:WebデザイナーのためのDjangoはじめの一歩 pateo 2007-05-31
Re:東海Python Workshop 01終了 nyusuke 2007-05-31
Re:東海Python Workshop 01終了 kfuruhata 2007-05-30
Re:管理画面からみるPlone3.0ベータ(前半) nyusuke 2007-05-03
Recent trackbacks
Plone Captcha 1.0.2 と Plone Captchas 1.0 takalog 2007-01-13
plone 2.5.2-rc1 にアップグレード takalog 2007-01-05
Vine Linux 4.0 にアップグレード(その1) takalog 2006-11-26
オハイオ州日本語サイトを手かけ始めた ロバートのブログ 2006-08-14
TurboGears関連記事 Twisted Mind in TurboGears 2006-08-06
Recent Changes
All recent changes…
Amazon Items






Adsense
Document Actions

Python

Up one level Python
初めてのPython

Document Actions

はじぱい

初めてのPython

by nyusuke posted at 2006-01-24 00:58 last modified 2006-08-06 17:38

はじぱい

ノートパソコンが来た。ヒューレットパッカードのやつである。メモリは1G積んでいる。ウヒョー。

新年というには遅すぎる時期だけど何だか心機一転な感じがするわけで(うかれすぎ)、とりあえずZPTとかPythonとか勉強しなきゃと思ってしまった。

私はかなりガキんちょである。ガキんちょはおもちゃが大好きである。ファミコンに夢中になり、Macに夢中になり、htmlで遊び、Linuxをほげほげしてきた私の、今のおもちゃはZopeである。

おもちゃで楽しむためにはそのおもちゃをよく知る必要がある。楽器をうまく吹くには楽器を・音楽を知ることが大切であるのと同様、Zopeで遊ぶためにはPythonを知ることが必要だろう。

ちなみに私はPythonが全くわからない。かけらも知らない。しかし何事にも始まりがあるものだ。はじめは何もわからなくて当然である。と、言い訳しておこう。

とりあえずPythonScriptを追加してみる

いきなりZopeの中身を見たりするのはあまりに無謀。しかし地道にチュートリアルとかやるのも何だかなー、ということで、Zopeの中にPythonScriptを追加してみることにする。

helloと名付けたPythonScriptを追加するとあらかじめサンプルコードが書いてある。

# Example code:

# Import a standard function, and get the HTML request and response objects.
from Products.PythonScripts.standard import html_quote
request = container.REQUEST
RESPONSE = request.RESPONSE

# Return a string identifying this script.
print "This is the", script.meta_type, '"%s"' % script.getId(),
if script.title:
print "(%s)" % html_quote(script.title),
print "in", container.absolute_url()
return printed

これを適当にdtml methodから呼んでやって

<html>
<body>
<dtml-var hello>
<body>
<html>

表示すると

060124-1

ふーむ。%sのとこにはその後にある%ほにゃららが入る模様。下から4行目のとこには条件がある。script.titleというくらいだから、このスクリプトにタイトルがあるかどうか判断しているのだろう。タイトルがあればそれも表示せよ、といっているように見える。

追加せずにはいられない。


060124-2

「はろ~」とタイトルをいれ、再び表示。


060124-3

出た!予想通りに動いてくれると楽しい( ´艸`)

まぁ、そんな感じで今日は寝る。

Category(s)
Python Python
The URL to Trackback this entry is:
http://nagosui.org/Nagosui/COREBlog2/learning-python/tbping

バインディングてあんた…誰…

by nyusuke posted at 2006-01-25 01:14 last modified 2006-08-06 17:38

containerとかscriptとか

Ploneも2.1.2になり入力フィールドにグラデなんかかかっちゃったりして、おー、新しいぜぇって感じですが、昨日サンプルスクリプトをほんの少しだけいじってみたものの、中身はよくわからん。ポートレットとかがべた塗りなのに入力フィールドだけグラデがかかってるPloneくらい意味不明である。

全然わからんといえばそれまでなのだが、とりあえず目に付いたのはこいつ↓とか

request = container.REQUEST
こいつ↓とか。
script.meta_type

ピリオドでひっついてるやつはどうもよくわからん。

何でこいつらに目をつけたかというと、何となくわかりそうだから。わかりそう、というと何だか偉そうですな…。もちろん名前が比較的わかりやすいというのもあるけれど、ZMIをよく見るとヒントくさいのがある。


060124-4

↑ここらへんである。

containerとかscriptとかいうのはバインディング変数である。バインディングというのは、ひっつけるということである。よくわからんけど、とりあえずバインディングタブを見てみると…


060124-5

contextの綴りが違っているのがわかる(違

contextじゃなくてcontainerはスクリプトが入ってる容器であるオブジェクト(ここではPythonというフォルダオブジェクト)、script はスクリプト自体を指してると理解していいのだろうか。まー、そういうことにしておこう。

さてはこいつらを使ってほげほげできるということだな。ふつーならいろいろ自分で用意しなきゃいけないものが最初から用意されてるとは親切ではないか。さっそく遊んでやろう。

書式はよくわからんが、サンプルスクリプトの中で

script.title
script.meta_type
container.absolute_url()

こんな使われ方をしてるわけだから、

「container.title」とか「container.meta_type」とか「script.absolute_url()」とかしてやれば、コンテナのタイトルとかメタタイプとか、スクリプトのURLとかが得られるハズ。ということはたとえば…

print "コンテナのタイトルは「", container.title, "」で、コンテナのメタタイプは「", container.meta_type, "」ナリよ"
なんていうふうにすれば、コンテナのタイトルとメタタイプを教えてくれるハズ。
ということで新しくcontainer_infoというPythonScriptを追加。わからない所はいじらずにそっとしておくのが味噌だと思う。
# コンテナのタイトルとメタタイプを教えてくれるコード:

# Import a standard function, and get the HTML request and response objects.
from Products.PythonScripts.standard import html_quote
request = container.REQUEST
RESPONSE = request.RESPONSE
print "コンテナのタイトルは「", container.title, "」で、コンテナのメタタイプは「", container.meta_type, "」ナリよ"

return printed
これを呼んでやると。

060125-1

できたヾ(゜∀゜)/ウヒョ~
しかし何故absolute_url()には括弧がついてるんだろう…

Category(s)
Python Python
The URL to Trackback this entry is:
http://nagosui.org/Nagosui/COREBlog2/learning-python-binding/tbping

Products PythonScripts standardをいじってみるテスト

by nyusuke posted at 2006-01-26 01:58 last modified 2006-08-06 17:38

まだまだサンプルスクリプトにはわからないことが満載である。わからないときの基本はヘルプである。ZMIにはヘルプへのリンクがあるのでポチッとな。


060126-1

いかにもなリファレンス発見。いろいろ書いてあるではないか。しかもサンプルスクリプトの中で一番難しそうなProducts.PythonScript.standardについてのヘルプもある。せっかくなのでこれを読んでみたところ、…さっぱりわからない( ´艸`)

サンプルスクリプトではこいつはどういうふうに使われてたっけか。

from Products.PythonScripts.standard import html_quote

Products.PythonScript.standardからhtml_quoteをインポートする、と言っている。で、ヘルプを見てみると確かにProducts.PythonScript.standardのリファレンスのところには「html_quote」というやつの説明もある。ほかにもいろいろな機能の説明が書いてあることから敷衍すればおそらく、Products.PythonScript.standardっていうのは基本的な機能のセットで、このセットの一機能としてhtml_quoteがあるということか。

そういえばサンプルスクリプトの最後の方でhtml_quoteが使われてる。逆に言えばこの機能を使うためには、最初の方でこの機能を使うことを宣言しなければならないということなのだろう。

せっかくなので簡単な機能を使ってみよう(・∀・)
めっちゃ簡単そうなやつ↓

  • thousand_commas(number)
  • whole_dollars(number)
  • dollars_and_cents(number)

数を扱うだけなので簡単なのさ。

numberという名前のスクリプトを追加して

# Products.PythonScripts.standardのテストコード

from Products.PythonScripts.standard import whole_dollars,dollars_and_cents


print whole_dollars(12345)
print dollars_and_cents(12345)

return printed

などとしてやる。

#thousand_commasは使っちゃダメっていわれた…

結果ワー、

060126-2

うむ。いい感じ。

Category(s)
Python Python
The URL to Trackback this entry is:
http://nagosui.org/Nagosui/COREBlog2/Products-PythonScripts-standard-help/tbping

Zopeのprintedって輩のこと

by nyusuke posted at 2006-01-27 01:35 last modified 2006-08-06 17:38

ヘルプを眺めてたらprintedについて書いてあるのを発見した。

サンプルスクリプトの最後には「return printed」と書いてあって、こりゃなんだー、と思ってたところだったのだ。「print」ってのはプログラムでよく見るけど、「printed」はあんまり見ないからなぁ。

Because the "print" statement cannot operate normally in Zope, its effect has been changed.

で、結局、

The special builtin name "printed" evaluates to the concatenation of all text printed so far during the current execution of the script.

ということらしい。要するに、いろいろprintしたものをつないでそいつら全部をまとめちゃうわけね。ということは、

print "このスクリプトのタイトルは"
print script.title
print "なんですよ。マジで。"
return printed

なんてふうにすれば…


060127-1

となるのか。「つなぐ」といってもインライン要素みたいにつなぐわけじゃないのね…。

Category(s)
Python Python
The URL to Trackback this entry is:
http://nagosui.org/Nagosui/COREBlog2/learning-python-zope-printed/tbping

ExternalExampleをいじって自分好みのプロダクトにする

by nyusuke posted at 2006-08-08 04:14 last modified 2006-08-08 17:04

以前、容量の大きなファイルをファイルシステム上に保存して利用するプロダクトとして、PloneLocalFolderNGというのを使ってみたのですが、Plone2.5になってどうも「@@plone」というグローバル変数が悪さをしているらしく使えなくなってしまっていました。私にはこれに手を入れるだけの技量が無いので、他のプロダクトをいじってみることにしました。候補は

です。

しかしこやつらは純粋なプロダクトではなく、ATフィールド(?)を提供してくれるだけの、開発者向けプロダクトなのです。ということはこれを利用したプロダクトを自分で用意せねばならない(あるいは既存のプロダクトを拡張する)というなかなかチャレンジングなことを要求してくれるプロダクトなわけです。

いや私はインプットするのは大好きなので別に何の問題もないといえばそうなのですが、なにせ今はやること・やりたいことが多い。否、多すぎる。Turbogearsもいじりたいし、COREBlogのMLで話題になったPlacefulWorkflowもいじってみたいし、PlonePASもいじりたいぞぅ。そういえばgmailAuthPluginでトラブったのを思い出してしまった。これも一度使えるようにしてみたい。なごすい関係のタスクもやってしまいたいぞぅ。

というわけで目の前にあるものがてんこ盛りなのですが、一度始めるといったんキリがつくまでは続けてしまうという悪い病気がぶり返してきて結局いじってしまったのでした。

で、二つの候補があるのですが、ExternalStorageの方には親切にもExternalExampleというサンプルプロダクトが同梱されていて(ExternalStorageのexampleフォルダ以下にあります)、これを利用するのが一番手っ取り早いだろうという推測から、ExternalExampleを自分の好みに編集して使ってしまおうという結論に至りました(でも実はFileSystemStorageの方も最近バージョンアップしたということがあって魅力的なのでした)。

とりあえずExternalExampleを通常のプロダクトのようにインストールして使ってみると、

  • ComplexExample
  • ExternalArticle

という二つのコンテンツタイプを追加できるようになりました。

新しいコンテンツタイプを追加できるようになった


ComplexSampleはこんな感じです。

Complex Example


ExternalArticleはこんな感じです。

External Article


どういう仕組みになっているのかExternalExampleのフォルダの中を見てみると

  • __init__.py
  • ComplexSample.py
  • config.py
  • ExternalArticle.py
  • StreamingFile.py
  • README
  • refresh.txt
  • Extensionsフォルダ
  • skinsフォルダ

といった内容になっております。

ExternalExampleの中身

予想以上の少なさなので結構らくちんかも~(と思っていつもどこかでハマるのですが、やっぱり今回もハマりました)。予想は立てやすいファイルの構成になっています。

というのも、ExternalExampleをインストールしたことによってComplexSampleおよびExternalArticleが追加できるようになり、しかもフォルダの中に「ComplexSample.py」とか「ExternalArticle.py」とか、いかにも私が担当してます的なファイルがあるので、これをいじればよろしいという予測が立つからです。

手を入れる方針としては、とりあえず今回はComplexSampleはいらないので削除し、ExternalArticleを編集するという感じでいきましょう。

(中略)

…で、すんごく眠いのでとりあえず動くところまではこぎつけましたので、ファイルシステム上のコンテンツはこんな感じでということで。いじったプロダクトはこんな感じ。あくまで動かす所までというだけで、skinをいじったり、もう少し中身を研究したりということはまた今度。おやすみなさい…。


The Year of Dragon 3 The Year of Dragon 3
Size 1 kB - File type application/octet-stream
by nyusuke last modified 2006-11-20 22:05
ExMediaFile 0.1 ExMediaFile 0.1
Size 3.7 kB - File type application/x-tar
by nyusuke last modified 2006-11-20 22:05
The URL to Trackback this entry is:
http://nagosui.org/Nagosui/COREBlog2/exmediafile/tbping

Re:ExternalExampleをいじって自分好みのプロダクトにする

Posted by あきこ at 2006-08-14 09:48

nyusukeさま、こんにちは。
私もLocalFolderNGを使っているのですが、こちらの記事を拝見して、再度Plone本拠地のProduct情報を確認したところ、今は誰もメンテナンスしてくれる人がいない状況なんですね?
Plone2.5に移行したとしても、同じように使いたいなあと思っていただけに、ショック...。

また、External Storageなんかも、今ひとつ使い方が判らなかったので、手を出せませんでした。これは、基本的にはLocalのファイルシステムをマウントしてくれるというものじゃなくて、保存先をローカルのファイルシステムに指定できる、という意味合いのものなんですね...。

でも、解説いただいているので、大変助かりました。サンプルがあるなどと言うのは、判りませんでしたから...。

Re:ExternalExampleをいじって自分好みのプロダクトにする

Posted by nyusuke at 2006-08-15 18:05

やっぱりちゃんとPythonなりPloneなりを勉強してProductを作れるようにしたいですねぇ。