(機械翻訳) pyramid.events

関数

subscriber(*ifaces, **predicates)[ソース]

デコレータは:term: scan`によって起動されます。この関数は、 * ifaces``として渡されたインターフェースのセットと `**述語'`として渡された述語のセットのイベント加入者として装飾されている関数をデコレータコンストラクタ。

例えば:

from pyramid.events import NewRequest
from pyramid.events import subscriber

@subscriber(NewRequest)
def mysubscriber(event):
    event.request.foo = 1

1つ以上のイベントタイプをコンストラクタ引数として渡すことができます。装飾されたサブスクライバは、各イベントタイプに対して呼び出されます。

from pyramid.events import NewRequest, NewResponse
from pyramid.events import subscriber

@subscriber(NewRequest, NewResponse)
def mysubscriber(event):
    print(event)

引数を渡さずに `` subscriber``デコレータを使用すると、それがデコレートする関数は送信されたすべてのイベントに対して呼び出されます:

from pyramid.events import subscriber

@subscriber()
def mysubscriber(event):
    print(event)

このメソッドは、term: `scan`がそれを含むパッケージまたはモジュールに対して実行されるまで効果がありません。ala:

from pyramid.config import Configurator
config = Configurator()
config.scan('somepackage_containing_subscribers')

`` ** predicate``引数は:meth: `pyramid.config.Configurator.add_subscriber`に渡されます。述語が加入者が呼び出される状況の集合をどのように狭めることができるかについては、:ref: `subscriber_predicates`を参照してください。

:term: venusian` attach``関数に渡される2つの追加のキーワード引数は _depth``と `_category``です。

`` _depth``はこのクラスを別のデコレータから再利用したい人に提供されます。デフォルト値は `` 0``であり、 `` subscriber``の呼び出しに関連して指定する必要があります。 Venusianがデコレータがクラスまたはモジュールコンテキストで使用されているかどうかをチェックするときに、callstackの深さとして:term: venusian` `attach``関数に渡されます。それは頻繁には使用されませんが、この状況では便利です。

`` _category``はデコレータのカテゴリ名を設定します。これは、どのビューを処理するかを制御する `` scan``の `` category``引数と組み合わせて使うと便利です。

`` _depth``と `` _category``引数の詳細については、Venusianの:py:func: `venusian.attach`関数を参照してください。

バージョン 1.9.1 で変更: `` _depth``と `` _category``引数を追加しました。

イベントの種類

class ApplicationCreated(app)[ソース]

:meth: pyramid.config.Configurator.make_wsgi_app`が呼び出されると、このクラスのインスタンスは:term: event`として発行されます。インスタンスには、属性: `` app``があります。この属性は、WSGI要求を処理する:term: `router`のインスタンスです。このクラスは:class: `pyramid.interfaces.IApplicationCreated`インタフェースを実装しています。

注釈

後方互換性のために、このクラスはclass: pyramid.events.WSGIApplicationCreatedEvent`としてインポートすることもできます。この前のイベントクラスの名前はapp: `Pyramid 1.0でした。

class NewRequest(request)[ソース]

このクラスのインスタンスは:app: Pyramid`が新しいリクエストを処理し始めるたびに:term: event`として発行されます。イベントインスタンスには、属性:「request」があります。これは:term: `request`オブジェクトです。このイベントクラスは、:class: `pyramid.interfaces.INewRequest`インターフェースを実装しています。

class ContextFound(request)[ソース]

このクラスのインスタンスは:app: Pyramid`の後に:term: event`として発行されます:term: router`はa:term: context`オブジェクトを見つけます(トラバーサルを実行した後)。実行される。インスタンスには属性:append: Pyramid`によって生成されたリクエストオブジェクトである `request``という属性があります。

特に、リクエストオブジェクトには、 `` context``という名前の属性があります。これは、最終的に呼び出されるビューに提供されるコンテキストだけでなく、コンテキスト発見コードによって付加された他の属性も持ちます。

このクラスは:class: `pyramid.interfaces.IContextFound`インターフェースを実装しています。

注釈

現在のところ:app: Pyramid 1.0では、下位互換性のために、このイベントをクラス:` pyramid.events.AfterTraversal`としてインポートすることもできます。

class BeforeTraversal(request)[ソース]

このクラスのインスタンスは、:app: Pyramid:term:` router`が:term: ルート`オブジェクトを見つけようとしましたが、トラバーサルまたはビューコードが実行される前に:term: `event`として発行されます。インスタンスには属性:append: `Pyramid`によって生成されたリクエストオブジェクトである `request``という属性があります。

特に、リクエストオブジェクト**には、一致ルートが見つかった場合は `` matched_route``という属性があります。一致するルートがない場合、この属性は使用できません。

このクラスは、:class: `pyramid.interfaces.IBeforeTraversal`インターフェースを実装しています。

class NewResponse(request, response)[ソース]

このクラスのインスタンスは:app: Pyramid:term:` view`または:term: exception view`のいずれかが:term: response`を返すときはいつでも:term: `event`として発行されます。

インスタンスには、レスポンスの原因となったリクエストである `` request``と、ビューやレンダラで返されるレスポンスオブジェクトである `` response``という2つの属性があります。

:term: exception view`によって response``が生成された場合、要求は例外ビューを実行させた例外オブジェクトである exception``という属性を持ちます。応答が '通常の'ビューによって生成された場合、この属性の属性は ` None``になります。

このイベントは、例外ビュー(この状況では応答が作成されない)によって捕捉されなかった例外のために応答を作成できない場合には生成されません。

このクラスは:class: `pyramid.interfaces.INewResponse`インターフェースを実装しています。

注釈

レスポンスの後処理は、通常:class: pyramid.interfaces.INewResponse`イベントによって呼び出されるサブスクライバコードよりも、WSGI:term:`ミドルウェア(middleware) 'コンポーネントで処理するほうが優れています。 :class: `pyramid.interfaces.INewResponse`イベントはほぼ:class: pyramid.interfaces.INewRequest`イベントで対称性のために存在します。

class BeforeRender(system, rendering_val=None)[ソース]

このイベントのサブスクライバは:term: renderer globals`のセットをin:term: renderer`に渡す前にイントロスペクトして変更することができます。このイベントオブジェクトiselfは、この目的のために使用できる辞書のようなインターフェイスを備えています。例えば::

from pyramid.events import subscriber
from pyramid.events import BeforeRender

@subscriber(BeforeRender)
def add_global(event):
    event['mykey'] = 'foo'

この型のオブジェクトは、a:term: `renderer`が呼び出される直前のイベントとして送信されます。

サブスクライバが、レンダラグローバルディクショナリにすでに存在する `` __setitem__``を介してキーを追加すると、古い値がそこに上書きされます。これは、BeforeRenderイベントへのイベントサブスクライバが相対的な順序付けを保持していないため問題となります。他のサードパーティのサブスクライバとの最大限の相互運用性を実現するために、BeforeRenderサブスクライバとして使用するイベントサブスクライバを作成する場合、サブスクライバコードはオーバーライド値を設定する前にレンダラグローバルディクショナリに値が存在しないことを確認する必要がありますイベントオブジェクトの `` .get``または `` __contains__``を使って行われます)。

ビューから返された辞書は:class: 〜pyramid.events.BeforeRender`イベントの:attr: rendering_val`属性からアクセスできます。

`` {'mykey': 'somevalue'、 'mykey2': 'somevalue2'} ``を呼び出し可能なビューから返すとします:

from pyramid.view import view_config

@view_config(renderer='some_renderer')
def myview(request):
    return {'mykey': 'somevalue', 'mykey2': 'somevalue2'}

:attr: rendering_val`は:class:〜pyramid.events.BeforeRender`オブジェクトからこれらの値にアクセスするために使用できます:

from pyramid.events import subscriber
from pyramid.events import BeforeRender

@subscriber(BeforeRender)
def read_return(event):
    # {'mykey': 'somevalue'} is returned from the view
    print(event.rendering_val['mykey'])

言い換えれば、:attr: rendering_val`は、ビューによって返される(システム以外の)値であるか、 render * `value``として渡されます。この機能はPyramid 1.2の新機能です。

レンダラーグローバルディクショナリに存在する値の説明については、:ref: `renderer_system_values`を参照してください。

参考

クラス: `pyramid.interfaces.IBeforeRender`も参照してください。

update(E, **F)

Eが.keys()メソッドを持っている場合、E:D [k] = E [k] Eが.keys()メソッドを持たない場合、for(k 、v:E:D [k] = vどちらの場合でも、Fの次のものが続きます。D [k] = F [k]。

clear() → None. Remove all items from D.
copy() → a shallow copy of D
fromkeys()

iterableのキーとvalueに等しい値を持つ新しいdictを返します。

get(k[, d]) → D[k] if k in D, else d. d defaults to None.
items() → a set-like object providing a view on D's items
keys() → a set-like object providing a view on D's keys
pop(k[, d]) → v, remove specified key and return the corresponding value.

keyが見つからなければ、与えられればdが返され、そうでなければKeyErrorが発生します

popitem() → (k, v), remove and return some (key, value) pair as a

2タプル; Dが空の場合はKeyErrorを上げます。

setdefault(k[, d]) → D.get(k,d), also set D[k]=d if k not in D
values() → an object providing a view on D's values

これらのイベントにサブスクライブするコードの登録方法の詳細については、ref: `events_chapter`を参照してください。