(機械翻訳)Pyramid 1.5の新機能¶
この記事では、app: Pyramid`バージョン1.5の新機能について説明します:app: Pyramid` 1.4。また、2つのバージョン間の非互換性と、app: Pyramid 1.5に追加されたdeprecationsと、ソフトウェアの依存関係の変更と、著しいドキュメントの追加についても説明しています。
主要な後方互換性¶
Pyramidは、デフォルトでMakoとChameleonのテンプレートシステムレンダラに依存したり、設定したりしません。デフォルトでこれらのテンプレートシステムを含めないということは、Pyramidコアの依存性が少なく、テンプレートアドオンの互換性がすぐに気になることなく将来のプラットフォームで実行できることを意味します。 Pyramidコアへのコミットアクセスを必要とせずに理解して気にするテンプレートシステムのアドオンをメンテナンスできるようになり、メンテナンスが少し効率的になります。彼らはピラミッドをインストールするときに乗るために来ることはありません。
つまり、Pyramid 1.5a2 +にアップグレードすると、これらのテンプレートシステムのいずれかを使用するプロジェクトで、アプリケーションがカメレオンまたはMakoテンプレートをレンダリングしようとすると、次のような終わりのトレースバックが表示されます。
ValueError: No such renderer factory .pt
または:
ValueError: No such renderer factory .mako
または:
ValueError: No such renderer factory .mak
Makoテンプレートのサポートは `` pyramid_mako``というアドオンパッケージに移行し、カメレオンテンプレートのサポートは `` pyramid_chameleon``というアドオンパッケージに移行しました。これらのパッケージは、これらのテンプレートランゲージの古い組み込みサポートのためのドロップイン置換です。インストールするだけで設定を有効にして、 `` .pt``や `` .mako``(または `` .mak``)のレンダラファクトリを登録してアプリケーションを再び動作させるだけです。
ChameleonまたはMakoテンプレートレンダラーのサポートを既存のプロジェクトに再度追加するには、以下の手順に従います。
Makoテンプレートに依存している場合:
`` pyramid_mako``パッケージがインストールされていることを確認してください。これを行う1つの方法は、パッケージの `` setup.py``ファイルの `` install_requires``セクションに `` pyramid_mako``を追加した後、 `` setup.py develop``を再実行することです:
setup( #... install_requires=[ 'pyramid_mako', # new dependency 'pyramid', #... ], )
Pyramid:class: 〜pyramid.config.Configurator`(プロジェクトの __init __。py``ファイルの main() 関数であることが多い)をインスタンス化するアプリケーションの中で、Pyramidに` pyramid_mako`` includeme
config = Configurator(.....) config.include('pyramid_mako')
カメレオンのテンプレートに依存している場合:
`` pyramid_chameleon``パッケージがインストールされていることを確認してください。これを行う1つの方法は、パッケージの `` setup.py``ファイルの `` install_requires``セクションに `` pyramid_chameleon``を追加し、 `` setup.py develop``を再実行することです:
setup( #... install_requires=[ 'pyramid_chameleon', # new dependency 'pyramid', #... ], )
Pyramid:class: 〜pyramid.config.Configurator`(プロジェクトの __init __。py``ファイルの main() 関数であることが多い)をインスタンス化するアプリケーションの中で、Pyramidに` pyramid_chameleon`` includeme
config = Configurator(.....) config.include('pyramid_chameleon')
これらのパッケージを互換性のために古い*ピラミッドにインストールすることもできます。 Pyramid 1.5に直ちにアップグレードしなくても、Pyramid 1.4のインストールで上記の手順を実行すると問題はありません。Pyramid 1.5にアップグレードすると、互換性があります。
コアからのMakoとChameleonのサポートを削除すると、 `` pyramid.renderers.render * ``メソッドを使用するいくつかの単体テストが失敗することがあります。あなたのユニットテストのいずれかがMakoかChameleonのいずれかのテンプレートで `` pyramid.renderers.render() ``または `` pyramid.renderers.render_to_response() ``を呼び出す場合、 `` pyramid.config.Configurator``インスタンス上記のようにアドオンを含むように更新する必要があります。例えば::
class ATest(unittest.TestCase): def setUp(self): self.config = pyramid.testing.setUp() self.config.include('pyramid_mako') def test_it(self): result = pyramid.renderers.render('mypkg:templates/home.mako', {})
または:
class ATest(unittest.TestCase): def setUp(self): self.config = pyramid.testing.setUp() self.config.include('pyramid_chameleon') def test_it(self): result = pyramid.renderers.render('mypkg:templates/home.pt', {})
Pyramidデバッグツールバーを使用している場合は、Pyramidを1.5a2 +にアップグレードする際に、Pyramid 1.5と互換性がないため、Pyramid_debugtoolbarパッケージを少なくとも1.0.8にアップグレードする必要があります。 a2 +はコアからのMakoサポートの削除によるものです。旧バージョンのPyramidsでもこの新しいバージョンのツールバーコードを使用するのは良いことです。
機能の追加¶
Pyramid 1.5の機能追加が続きます。
Python 3.4との互換性。
使用中のPythonバージョン、使用中のPyramidバージョン、現在インストールされているすべてのPythonディストリビューションのバージョン番号と場所を表示する `` pdistreport``スクリプトを追加してください。
`` not_``クラスを使用して、ビュー、ルート、またはサブスクライバの述語値の結果を逆転させる機能を追加します。例えば:
from pyramid.config import not_ @view_config(route_name='myroute', request_method=not_('POST')) def myview(request): ...
上記の例では、少なくとも他のビューがより具体的でない場合、リクエストメソッドがPOSTでない場合にビューが確実に呼び出されます。
:class: `pyramid.config.not_`クラスは、これらのコンテキストのいずれかで渡される述語値である任意の値に対して使用できます。
- :meth: pyramid.config.Configurator.add_view
- :meth: pyramid.config.Configurator.add_route
- :meth: pyramid.config.Configurator.add_subscriber
- :meth: pyramid.view.view_config
- :meth: pyramid.events.subscriber
ビュールックアップは、コンテキストの継承階層に基づいて有効なビューを検索します。最も具体的なコンテキストに基づいてビューを最初に見つけようとします。そして、述部の失敗時に、スーパータイプのコンテキストによって検出されたビューをテストするために継承チェーンを上げます。過去には、ビューを含む最も特定の型だけがチェックされ、一致するビューが見つからない場合には、PredicateMismatchが発生しました。今や述語の不一致は、スーパータイプに登録された有効なビューを隠さない。ここで今動作する例があります:
class IResource(Interface): ... @view_config(context=IResource) def get(context, request): ... @view_config(context=IResource, request_method='POST') def post(context, request): ... @view_config(context=IResource, request_method='DELETE') def delete(context, request): ... @implementer(IResource) class MyResource: ... @view_config(context=MyResource, request_method='POST') def override_post(context, request): ...
以前は、override_postビューの登録によって、MyResourceのコンテキストでgetおよびdeleteビューが非表示になり、GETメソッドまたはDELETEメソッドを使用しようとしたときに述語の不一致エラーが発生しました。今、ビューが見つかり、述語の不一致が発生しません。 https://github.com/Pylons/pyramid/pull/786およびhttps://github.com/Pylons/pyramid/pull/1004およびhttps://github.com/Pylons/pyramid/pull/1046を参照してください。
`` scripts / prequest.py``(別名 `` prequest``コンソールスクリプト): `` PUT``と `` PATCH``要求を提出するサポートを追加しました。 https://github.com/Pylons/pyramid/pull/1033を参照してください。 `` OPTIONS``と `` PROPFIND``リクエストを提出するためのサポートを追加し、ユーザがスクリプトの `` --login``引数を使って要求の中で基本認証資格を指定できるようにします。 https://github.com/Pylons/pyramid/pull/1039を参照してください。
:meth: `pyramid.config.Configurator.add_route`メソッドは、外部URLをパターンとして呼び出すことができるようになりました。 https://github.com/Pylons/pyramid/issues/611とドキュメンテーションセクション:ref: `external_route_narr`を参照してください。
:class: pyramid.authorization.ACLAuthorizationPolicy`は __acl__``を呼び出し可能としてサポートしています。これは、プロパティが定義されていないときに ` context``で生成される可能性のある `` AttributeError``と動的プロパティ内のユーザ定義コードから生成される `` AttributeError``のあいまいさを取り除きます。このあいまいさを避けるために、動的ACLを呼び出し可能として定義することをお勧めします。 https://github.com/Pylons/pyramid/issues/735を参照してください。
プロトコル相対URL(例えば `` // example.com / images``)を:meth: `pyramid.config.Configurator.add_static_view`に渡すことを許可します。これにより、外部でホストされている静的URLを現在のプロトコルに基づいて生成することができます。
:class: `pyramid.authentication.AuthTktAuthenticationPolicy`クラスには、ドメイン使用を設定するための2つの新しいオプションがあります:
- `` parent_domain``:もし設定されていれば、認証クッキーは親ドメイン上に設定されます。複数のサイトが同じドメインを共有している場合に便利です。
- `` domain``:提供されていれば、いつものすべてのロジックをバイパスして、このドメインに対して常にクッキーが設定されます。
https://github.com/Pylons/pyramid/pull/1028、https://github.com/Pylons/pyramid/pull/1072およびhttps://github.com/Pylons/pyramid/pull/1078を参照してください。
:class: pyramid.authentication.AuthTktPolicy`は include_ip = True``オプションを使うときにIPv6アドレスをサポートするようになりました。これは、仕様がIPv6を適切に扱う方法を定義していないため、代替の ` auth_tkt``実装とは互換性がありません。 https://github.com/Pylons/pyramid/issues/831を参照してください。
func: pyramid.paster.get_appsettings`で可変引数を使用できるようにします。これにより、生成された ` alchemy`` scaffoldの `` initialize_db``スクリプトは `` a = 1 b = 2``の形式でオプションをサポートできるようになり、パラメータ化された `` .ini ``ファイル、例えば `` initialize_myapp_db etc / development.ini a = 1 b = 2``のようなものです。 https://github.com/Pylons/pyramid/pull/911を参照してください。
`` request.session.check_csrf_token() ``メソッドと `` check_csrf``ビュー述語は、 `` X-CSRF-Token``という名前のHTTPヘッダーの値を考慮に入れます( `` csrf_token彼らが常にやった ``フォームパラメータ)。フォームパラメータが存在しない場合、ヘッダーが試されます。
新しい `` route_name``、 `` route_kw``、 `` route_remainder_name``の引数をmeth: 〜pyramid.request.Request.resource_urlに使うことで、より簡単に" hybrid "urldispatch / traversal URLを生成することができます`と:meth:〜pyuramid.request.Request.resource_path`となります。参照:ref: `generate_hybrid_urls`を参照してください。
新しいhttp例外スーパークラスclass: 〜pyramid.httpexceptions.HTTPSuccessful`が追加されました。このクラスを例外ビューの ` context``として使用して、すべての200シリーズ"例外"(たとえば "raise HTTPOk ")をキャッチすることができます。これはまた:class: 〜pyramid.httpexceptions.HTTPOk`例外自体を捕まえることもできます。他の多くの例外( ` HTTPNoContent``など)は `` HTTPOk``から継承されましたが、今はそうではありません。
Pyramid足場で二重の括弧をエスケープすることが可能になりました(エスケープされていない、これらは置換値を表しています)。 `` {{a } } ``を使って"bare " `` {{a}} ``を表すことができます。 https://github.com/Pylons/pyramid/pull/862を参照してください。
localizer`と locale_name``のプロパティ(reified)をclass: pyramid.request.Request`に追加してください。 https://github.com/Pylons/pyramid/issues/508を参照してください。 :func: pyramid.i18n.get_localizer`と:func: pyramid.i18n.get_locale_name`関数は、単にリクエストでこれらのプロパティを検索するようになりました。
`` pserve``コマンドは、 `` -v``(または `` - verbose``)フラグと `` -q``(または `` --quiet``)フラグを取るようになりました。 `` pserve``からの出力は、これらのフラグを使って制御することができます。 `` -v``を複数回指定して冗長性を増やすことができます。 `` -q``は冗長に `` 0``を無条件に設定します。デフォルトの冗長レベルは `` 1``です。
``錬金術 ``足場テストは、より良いカバレッジを提供するようになりました。 https://github.com/Pylons/pyramid/pull/1029を参照してください。
ユーザーは、以下のような名前のコンフィグレータメソッドを `` factory``引数として、点線のPython名を提供できるようになりました:meth: 〜pyramid.config.Configurator.add_view_predicate、:meth:〜pyramid.config.Configurator.add_route_predicate`と:meth : `〜pyramid.config.Configurator.add_subscriber_predicate。述語ファクトリを直接渡す代わりに、ファクトリを指す点線の名前を渡すことができます。
:func: pyramid.path.package_name`は、 `__file__``属性のない名前空間パッケージのパッケージ名を解決する際に、もはや例外を表示しません。
リクエストのメソッドとして承認APIが追加されました::meth: pyramid.request.Request.has_permission。それは:func: pyramid.security.has_permission APIのメソッドベースの代替であり、まったく同じように動作します。古いAPIは廃止されました。
:attr: pyramid.request.Request.authenticated_userid、:attr:` pyramid.request.Request.unauthenticated_userid`、および:attr: pyramid.requestプロパティーAPI属性が要求に追加されました。 .Request.effective_principals。これらは、それぞれ:func: pyramid.security.authenticated_userid、:func:` pyramid.security.unauthenticated_userid`、:func: `pyramid.security.effective_principals`のアナログです。要求を受け入れる関数ではなく、要求の属性である点を除いて、まったく同じように動作します。それらはプロパティなので、割り当てることはできません。古い関数ベースのAPIは非推奨になりました。
Pyramidのコンソールスクリプト( `` pserve``、 `` pviews``など)は、実行時にPythonインタプリタにカスタム引数を送ることができるようになりました。例えば::
python -3 -m pyramid.scripts.pserve development.ini
class: pyramid.httpexceptions.HTTPBadRequest:class:` pyramid.exceptions.BadCSRFToken`の特定のサブクラスを追加しました。これは `` check_csrf_token``ビュー述語の失敗に応答して呼び出されるようになりました。 https://github.com/Pylons/pyramid/pull/1149を参照してください。
`` UnencryptedCookieSessionFactoryConfig``に非常に似ていますが、署名にもっと焦点を当てた新しい `` SignedCookieSessionFactory``を追加しました。この関数のカスタムシリアライザ引数は、シリアライザにも署名を実行することを要求していた前のバージョンとは異なり、シリアライズにのみ焦点を合わせる必要があります。 https://github.com/Pylons/pyramid/pull/1142を参照してください。 `` SignedCookieSessionFactory``を使って生成されたクッキーは `` UnencryptedCookieSessionFactory``を使って生成されたクッキーと互換性がないので、既存のユーザセッションデータはあなたがそれに切り替えると破壊されることに注意してください。
独自のセッション実装を作成するためにフレームワーク実装者が使用できる汎用クッキーファクトリとして機能する新しい `` BaseCookieSessionFactory``を追加しました。これは、再利用、タイムアウト、および `` Session API`の適合性を適切に処理する辞書のようなオブジェクトを提供することに厳密に焦点を当てた、再利用可能なAPIを提供します。 https://github.com/Pylons/pyramid/pull/1142を参照してください。
我々は、もはや `` request.exception``と `` request.exc_info``を例外ビューtweenで熱心にクリアしません。これにより、完了したコールバック内の例外情報を検査することができます。 https://github.com/Pylons/pyramid/issues/1223を参照してください。
その他の後方互換性¶
- :meth: `〜pyramid.request.Reuqest.current_route_url`メソッドを修正しました。このメソッドは、以前はデフォルトでクエリ文字列のないURLを返していましたが、オーバーライドされていない限りクエリ文字列を添付しています。
- :meth: 〜pyramid.request.Request.route_url`と:meth:〜pyramid.request.Request.route_path` APIは、置換値にaが含まれている場合、 `` /
を ``%2F``に引用しません
/ ``とにかくWSGIサーバーは常にスラッシュを引用符で囲まず、Pyramidは引用された値を決して見ないため、これは無意味でした。 - リクエストの `` locale_name``属性を設定することも、リクエストの `` localizer``属性を設定することもできません。これらは、ref: `i18n_chapter`に記述されている機械を使ってロケール名とローカライザをそれぞれ検索する" reified "プロパティです。
- 任意の数のスラッシュで終わる値を持つ `` X-Vhm-Root``ヘッダーを送信した場合、:meth: `〜pyramid.request.Requestを使用すると、URLが生成される前に後続のスラッシュが削除されます。 resource_url`または:meth: `〜pyramid.request.Request.resource_path`を参照してください。以前は、仮想ルートパスに後続のスラッシュが取り除かれていなかったため、URLの生成に影響します。
- :class: pyramid.interfaces.IResourceURL`インターフェースは、 virtual_path_tuple``と `physical_path_tuple``という2つの新しい属性を持ちました。これらは、リソースのパス(物理的および仮想的)のタプル形式でなければなりません。
- `` request.response_ * ``属性を変更しました( ``request.response_headers``など)。これらの属性は、Pyramid 1.1以降、廃止予定ポリシーに従って廃止されました。
- : `` request.response``は:func: pyramid.renderers.render APIを使用してもはや変更されません。ほとんどのレンダラが `` request.response``レスポンスオブジェクトを変更します(例えば、JSONレンダラが `` application / json``に `` request.response.content_type``を設定します)が、これはレンダラが応答を生成する。 func: `pyramid.renderers.render`を呼び出す副作用として実行されたときのバグでした。
- `` bfg2pyramid``フィーダスクリプトを削除しました。
- :class: `pyramid.events.NewResponse`イベントは**応答コールバックが実行された後に**送信されます。以前は応答コールバックが実行される前に実行されていました。理論的根拠:応答コールバックが前回ではなく仕事をした後に、応答を検査できる方が便利です。
- Pyramid 1.1以来廃止されていた `` pyramid.view.static``という名前のクラスを削除しました。代わりに、 `` use_subpath = True``引数で:class: `pyramid.static.static_view`を使用してください。
- Pyramid 1.1以来廃止されていた `` pyramid.view.is_response``関数を削除しました。代わりに:meth: `pyramid.request.Request.is_response`メソッドを使用してください。
- meth: pyramid.config.Configurator.add_route:` view`、` view_context``に以下の引数を渡す機能を削除しました。 ` view_for``、 `` view_permission``、 `` view_renderer``、 `` view_attr``です。これらの引数を使用することは、Pyramid 1.1以降では廃止されました。ビュー関連の引数を `` add_route``に渡すのではなく、 `` route_name``引数を使ってビューをルートに関連付けるために:meth: pyramid.config.Configurator.add_view`を別々に呼び出します。これは:meth: `pyramid.config.Configurator.add_static_view`関数にも影響します。なぜなら、 `add_route``に委譲するからです。
- a:class: pyramid.request.Request`オブジェクトに影響を与え、それを辞書のように照会する機能を削除しました。以前は、 ` __getitem__``、 `` get``、 `` items``などのメソッドを使用して、WSGI環境の値にアクセスするためのメソッドを使用することができました。この動作はPyramid 1.1以降では廃止されました。代わりに、 `` request.environ``(実際の辞書)のメソッドを使用してください。
- `` pyramid.traversal.DefaultRootFactory``の古くからの互換性のあるハックを削除し、BFG 0.9との互換性のためのマッチディック値で工場の `` __dict__``を設定しました。
- :class: pyramid.config.Configurator`コンストラクタの renderer_globals_factory``引数と:meth:〜pyramid.config.Configurator.setup_registry`の対応する引数が削除されました。 class: 〜pyramid.config.Configurator`の set_renderer_globals_factory``メソッドも削除されました。 (内部の) ` pyramid.interfaces.IRendererGlobals``インターフェースも削除されました。これらの引数、メソッド、およびインタフェースは、1.1以降で非難されていました。コンフィギュレータにレンダラグローバル値を提供するのではなく、ピラミッドの説明文書の"Hooks "章に書かれているように、 `` BeforeRender``イベントサブスクライバを使用してください。
- :meth: pyramid.request.Request.route_url`の _query``パラメータと:meth: pyramid.request.Request.resource_url`(およびその変形)の `` query``パラメータのキー/ )は `` None``の値を文字列 `` 'None'``でエンコードし、結果のクエリ文字列は `` a = b&key = None``のままにしていました。この状況では値が削除され、 `` a = b&key = ``というクエリ文字列が残っています。 https://github.com/Pylons/pyramid/issues/1119を参照してください。
廃止¶
- Makoレンダラーを持つビューから ``("defname "、dict) ``タプルを返すことは廃止されました。その代わりに、レンダラのスペルを `` foo#defname.mak``をビュー構成定義に使用し、dictのみを返すべきです。
- :meth: `pyramid.config.Configurator.set_request_property`メソッドは、使用時に非推奨警告を発行するようになりました。 1.4ではdocs-deprecatedとなっていましたが、使用すると非推奨の警告は発行されませんでした。
- :func: pyramid.security.has_permission`は:meth: pyramid.request.Request.has_permission`を使うことになっています。
- :func: pyramid.security.authenticated_userid、:func:` pyramid.security.unauthenticated_userid`、および:func: pyramid.security.effective_principals`関数は廃止予定です。代わりに:attr: `pyramid.request.Request.authenticated_userid、:attr:` pyramid.request.Request.unauthenticated_userid`と:attr: `pyramid.request.Request.effective_principals`を代わりに使用してください。
- `` pyramid.interfaces.ITemplateRenderer``インタフェースを非推奨にしてください。 MakoとChameleonのテンプレートバインディングを独自のパッケージに分割すると、定義が不明瞭になり、使用されなくなりました。
- `` pyramid.session.UnencryptedCookieSessionFactoryConfig`` APIは廃止され、 `` pyramid.session.SignedCookieSessionFactory``に置き換えられました。 `` UnencryptedCookieSessionFactoryConfig``によって生成されたクッキーは古いリリースで生成されたクッキーと互換性がありますが、SignedCookieSessionFactoryによって生成されるクッキーはそうではありません。 https://github.com/Pylons/pyramid/pull/1142を参照してください。
ドキュメントの機能拡張¶
足場の強化¶
- すべての足場には新しいHTML + CSSテーマがあります。
- ドキュメンテーションとスキャフォールドを更新し、 ``ングワ(Lingua) の新バージョン2.0を続ける。これには、すべての ` setup.cfg``ファイルを足場やドキュメント環境から削除することが含まれていました。
依存関係の変更¶
- ピラミッドはもはや `` Mako``や `` Chameleon``に依存しません。
- PyramidはWebOb> = 1.3(1.3+から `` webob.cookies.CookieProfile``を使います)に依存しています。