getChild(self, name, request) の呼び出し元は、inspect モジュールを使用して取得できます。
import inspect
...
class Hello(Resource):
#isLeaf = True # This has to be left out, to ensure, getChild is called!
def getChild(self, name, request):
print inspect.stack()[2][1]
return self
これで、stdout に次のような出力が表示されます。
2012-09-17 11:16:24+0200 [HTTPChannel,0,127.0.0.1] getChildForRequest
セクションweb/resource/Resourceの API ドキュメントを見て、Resource のソースを見ると、メソッド「getChildForRequest」 (172 行目) が見つかり、「...モジュール レベルの getChildForRequest. を使用します。これは、モジュール レベルを調べてその関数を見つけることを意味します (58 行目)。
そして、モジュール レベルの関数は、"isLeaf" をチェックし、パスの前後の要素を移動することにより、パスの要素をトラバースすることで面白いことを行います。リソースに「isLeaf」がある場合、リソースが返されます。そうでない場合、request.postpath が存在し、「isLeaf」が false の場合、パスが移動され、resource.getChildWithDefaultが呼び出されます。 putChild または単に self.children dict に存在する) を見つけられない場合は、動的リソースを返す必要がある " getChild " を呼び出すか、getChildのデフォルトの戻り値であるNoResource("No such child resource ") 152 行目。
チアーズ レイドバック