(機械翻訳)Pyramid 1.3の新機能¶
この記事では、app: Pyramid`バージョン1.3の新機能を、前のバージョンの:app: Pyramid` 1.2と比較して説明します。また、app: Pyramid 1.3に追加された2つのバージョンと廃止予定の間の後方互換性も文書化されています。また、ソフトウェア依存の変更や著しいドキュメントの追加も含まれています。
主な機能の追加¶
Pyramid 1.3の主な機能の追加は以下のとおりです。
Python 3の互換性¶

PyramidはPython 2上で動作し続けますが、PyramidもPython 3と互換性があります。 Python 3でPyramidを使用するには、Python 3.3以上が必要です。
多くのPyramidアドオンはすでにPython 3と互換性があります。例えば、 `` pyramid_debugtoolbar``、 `` pyramid_jinja2``、 `` pyramid_exclog``、 `` pyramid_tm``、 `` pyramid_mailer``、および `` pyramid_handlers``はすべてPython 3-readyです。しかし、他のアドオンはPython 2の下でのみ動作することが知られています。また、いくつかの足場依存(特にZODB)はPython 3ではまだ動作しません。
Python 3の完全なエコシステムサポートが得られるまで、忍耐強くお待ちください。継続的な移植作業の詳細については、https://github.com/Pylons/pyramid/wiki/Python-3-Portingをご覧ください。
Python 3との互換性では、いくつかのパッケージの依存関係を削除し、古いPythonのバージョンとプラットフォームをサポートする必要がありました。詳細については、"下位互換性のない"セクションを参照してください。
`` paster``コマンドが置き換えられました¶
`` paster``コマンドをPyramid特有の類義語に置き換えました。どうして? `` Paste``と `` PasteScript``という名前の `` paster``コマンドをサポートしていたライブラリは、Python 3の下では動作しません。その結果、私たちはいくつかの変更を加えなければなりませんでした。
以前は(Pyramid 1.0,1.1、および1.2)、 `` paster create``を使ってPyramidアプリケーションを作成しました:
$ $VENV/bin/paster create -t pyramid_starter foo
1.3では、代わりに `` pcreate``を使ってアプリケーションを作成する必要があります:
$ $VENV/bin/pcreate -s starter foo
内部ピラミッドの足場には `` pcreate``を使う必要があります。外部に分散された足場は `` pcreate``や `` paster create``の両方を可能にします。
以前のPyramidのバージョンでは、次のようなPyramidアプリケーションを実行しました:
$ $VENV/bin/paster serve development.ini
代わりに、1.3で `` pserve``コマンドを使わなければなりません:
$ $VENV/bin/pserve development.ini
Pyramidでサポートされている `` ini``設定ファイルフォーマットは変更されていません。その結果、Python 2のみのユーザはPasteScriptを手動でインストールし、好きな場合は `` paster serve``を代わりに使うことができます。しかし、 `` pserve``を使うと、Python 2とPython 3の両方で動作します。
`` pshell``、 `` pviews``、 `` pshs``、 `` psts``というコンソール名の下には、 `` paster pshell``、 `` paster p```、 `` paster request``、 `` 「prequest」と「ptweens」。
Scaffoldsで `` paste.httpserver``を `` waitress``に置き換えました¶
これまでスカホールドで使用していた `` paste.httpserver``サーバーはPython 3と互換性がないため、Pyramidが使用するデフォルトのWSGIサーバーを:term: `waitress`サーバーをスキャフォールディングしました。ウェイトレスサーバーは、Python 2とPython 3の両方に対応しています。
scaffoldからプロジェクトを作成すると、 `` development.ini``と `` production.ini``に次の行があります:
use = egg:waitress#main
これの代わりに(これは古いバージョンのデフォルトです):
use = egg:Paste#http
イントロスペクション¶
構成イントロスペクションシステムが追加されました。イントロスペクションシステムを開発者として使用する方法の詳細は、:ref: `using_introspection`と:ref:`イントロスペクション 'を参照してください。
ピラミッドデバッグツールバー(0.9.7+)の最新リリースでは、イントロスペクション情報をPyramidアプリケーション開発者に公開する「イントロスペクション」パネルが提供されています。
attr: pyramid.registry.Introspectable、:attr:` pyramid.config.Configurator.introspector`、:attr: pyramid.config.Configurator.introspectable、:attr:`ピラミッド。新しいイントロスペクションをサポートするためのAPIが追加されました。レジストリ。レジストス。
`` @ view_defaults``デコレータ¶
クラスをビューとして使用する場合は、クラスのnew:class: pyramid.view.view_defaults`デコレータを使用して、デコレータを装飾するすべての `@ view_config``デコレータによって使用されるビュー設定情報にデフォルトを提供できます。そのクラスのメソッド。
たとえば、「RESTアクション」を表すメソッドを持つクラスがある場合、これらのクラスはすべて同じルートにマッピングされますが、リクエストメソッドは異なります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from pyramid.view import view_config
from pyramid.response import Response
class RESTView(object):
def __init__(self, request):
self.request = request
@view_config(route_name='rest', request_method='GET')
def get(self):
return Response('get')
@view_config(route_name='rest', request_method='POST')
def post(self):
return Response('post')
@view_config(route_name='rest', request_method='DELETE')
def delete(self):
return Response('delete')
|
あなたはこれを行うことができます:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from pyramid.view import view_defaults
from pyramid.view import view_config
from pyramid.response import Response
@view_defaults(route_name='rest')
class RESTView(object):
def __init__(self, request):
self.request = request
@view_config(request_method='GET')
def get(self):
return Response('get')
@view_config(request_method='POST')
def post(self):
return Response('post')
@view_config(request_method='DELETE')
def delete(self):
return Response('delete')
|
これは、クラスを伴う必須のビュー構成でも機能します。
詳細は、:ref: `view_defaults`を参照してください。
サブクラス化せずにリクエストを拡張する¶
カスタム要求ファクトリを作成することなく、:class: `pyramid.request.Request`オブジェクトをプロパティ記述子で拡張することが可能になりました。新しいメソッド:meth: `pyramid.config.Configurator.set_request_property`は、各リクエストに追加されるプロパティを登録するアドオンのエントリポイントを提供します。新しいプロパティが再定義され、インスタンスの存続期間中の戻り値が効果的にキャッシュされます。このための一般的な使用例は、要求に対するデータベース接続を取得するか、または現在のユーザーを識別することです。新しいメソッド:meth: `pyramid.request.Request.set_property`も追加されましたが、プロパティの存続期間中にコンフリクト検出と一貫性を提供するため、コンフィギュレータメソッドが優先されるべきです。
ヘルパーを見る¶
見つからないヘルパー:
- 新しいAPI :: meth: pyramid.config.Configurator.add_notfound_view`これは:meth: `pyramid.config.Configurator.add_view`のラッパーで、" append_slash "機能をサポートしています。また、パーミッションに関しては正しいことをしています(Not Found Viewは常にpublicにする必要があります) 。これまで推奨されていた ` context = HTTPNotFound``で直接 `` add_view``を呼び出すのが好ましいでしょう。
- 新しいAPI :: class: pyramid.view.notfound_view_config。これは:class: pyramid.view.view_config`のようなデコレータコンストラクタです:スキャン時に:meth: pyramid.config.Configurator.add_notfound_view`を呼び出します。前に推奨したように、 `` pyramid.view.view_config``を `` context = HTTPNotFound``で使うのが好ましいでしょう。
禁じられたヘルパー:
- 新しいAPI :: meth: pyramid.config.Configurator.add_forbidden_view。これは:meth: pyramid.config.Configurator.add_view`のラッパーです。これはアクセス許可について正しいことです。これまで推奨されていた ` context = HTTPForbidden``で直接 `` add_view``を呼び出すのが望ましいでしょう。
- 新しいAPI :: class: pyramid.view.forbidden_view_config`これは:class: `pyramid.view.view_config`のようなデコレータコンストラクタです:スキャン時に:meth: pyramid.config.Configurator.add_forbidden_view`を呼び出します。これまで推奨されていたように `` pyramid.view.view_config``を `` context = HTTPForbidden``で使うのが好ましいでしょう。
マイナー機能追加¶
- 新しいAPI::class: pyramid.path.AssetResolver`と:class: pyramid.path.DottedNameResolver`です。前者は、アセットのデータを読むために使用できるAPIに:term: asset specification 'を解決するために使うことができます。後者は:term: dotted Python name`をモジュールまたはパッケージに解決するために使用できます。
- Makoテンプレートを使用するための `` mako.directories``設定はもはや必要ありません。理由:Makoテンプレートレンダラーは絶対アセット仕様を使用して指定することができます。そのようなアセット仕様でアプリケーション全体を記述することができ、順序付けられた参照パスを必要としません。
- `` pshell``での `` bpython``インタプリタの互換性。詳細は:ref: `ipython_or_bpython`を参照してください。
- 追加:func: pyramid.paster.get_appsettings API関数。この関数は、PasteDeployの `` ini``ファイルの `` [app:...] ``セクションで定義された設定を返します。
- 追加:func: pyramid.paster.setup_logging API関数。この関数は、PasteDeployの `` ini``ファイルのロギング設定に従ってPythonログを設定します。
- 設定の競合の報告は、より分かりやすい方法で報告されます("行11のファイル... "対類似の情報の組です)。
- 追加のキーワード引数を:meth: `pyramid.config.Configurator.action`メソッドに渡すことができます。
- Pyramidの:class: pyramid.static.static_view`が生成する応答は、 `wsgi.file_wrapper``を使用します(http://www.python.org/dev/peps/pep-0333/#optional-platform-specificを参照)。 -file-handling)がWebサーバーによって提供されている場合に使用します。
- :meth: pyramid.config.Configurator.scan`メソッドは、 ignore``引数を渡すことができます。引数には、文字列、呼び出し可能なもの、文字列や呼び出し可能なものからなるリストを指定できます。この機能を使用すると、サブモジュール、サブパッケージ、およびグローバルオブジェクトのスキャンが許可されます。 ` scan``に `` ignore``引数を使う方法の詳細については、http://readthedocs.org/docs/venusian/en/latest/#ignore-scan-argumentを参照してください。
- Add:meth: pyramid.config.Configurator.add_traverser APIメソッド。詳細はref: `changing_the_traverser`を参照してください。これは新機能ではなく、ZCA APIを使用せずにトラバーサを追加するためのAPIを提供するだけです。
- Add:meth: pyramid.config.Configurator.add_resource_url_adapter APIメソッド。詳細はref: `changing_resource_url`を参照してください。これは新しい機能ではなく、ZCA APIを使用せずにリソースURLアダプタを追加するためのAPIを提供するだけです。
- ビュー呼び出し可能関数が応答に変換できない値を返すとき(たとえば、ビュー呼び出し可能関数がレンダラーが定義されていないディクショナリを返すか、まったく値を返さないなど)、エラーメッセージが改善されます。エラーメッセージには、ビュー呼び出し可能なものに関する情報と呼び出し結果が含まれるようになりました。
- .pycのみのモジュールが `` config.include``されたときのエラーメッセージが改善されました。これは、エラー報告要件のために許可されていません。試行されると、より良いエラーメッセージが表示されます。以前は、"AttributeError: 'NoneType'オブジェクトに属性 'rfind' "がありません。
- システム値 `` req``が `` request``のエイリアスとしてレンダラーに供給されるようになりました。これは、例えば、テンプレート内で、 `` request.route_url(...) ``の代わりに `` req.route_url(...) を実行できることを意味します。これは、テンプレート内から要求メソッドと属性を使用するのに必要な型付け量を減らすための変更です。値 ` request``も引き続き利用できますが、これは単なる選択肢です。
- 新しいインタフェースが追加されました::class: pyramid.interfaces.IResourceURL`そのインタフェースを実装するアダプタを使用すると、:meth: `pyramid.request.Request.resource_url`が呼び出されたときに、リソースURLの生成を無効にすることができます。このインタフェースは、現在廃止されている ` pyramid.interfaces.IContextURL``インタフェースを置き換えます。
- リソースの `` __resource_url__``メソッド(ref: overriding_resource_url_generation`参照)に渡される辞書は、 app_url``キーを含んでいます:meth: pyramid.request.Request.resource_url`の間に生成されたアプリケーションURLを表します。これは潜在的にカスタマイズされたURLプレフィックスを表し、ユーザーが `` request.resource_url``に渡す可能性のあるカスタムスキーム、ホスト、ポート情報を含みます。必要に応じて `` request.application_url``の代わりに使用してください。
- :meth: pyramid.request.Request.resource_url APIは、` app_url`、` scheme`、` host`、` port``の引数を受け付けるようになりました。 app_url引数を使用して、URLの生成時にURL接頭辞を置き換えることができます。 ` scheme``、 `` host``、 `` port``の引数は、 `` request.application_url``のデフォルト値を部分的に置き換えるために使うことができます。
- :meth: `pyramid.request.Request.resource_path`という名前の新しいAPIが存在するようになりました。これは:meth: `pyramid.request.Request.resource_url`のように動作しますが、絶対URLではなく相対URLを生成します。
- :meth: pyramid.request.Request.route_url APIは、` _app_url`、` _scheme`、` _host`、` _port``の引数を受け付けるようになりました。 ` _app_url``引数は、URLの生成時にURL接頭辞を置換するために使用できます。 `` _scheme``、 `` _host``、 `` _port``の引数を使って、 `` request.application_url``のデフォルト値を部分的に置き換えることができます。
- 新しいAPI::class: pyramid.response.FileResponse`と:class: pyramid.response.FileIter`:ファイルを "手動で"提供する必要のあるビューでの使用です。
後方の非互換性¶
PyramidはPython 2.5で動作しなくなりました。これには、Jythonの最新リリースとGoogle App EngineのPython 2.5バージョンが含まれます。
理由?我々はPython 2と3のバージョンを簡単に"橋渡しする"ことができず、Python 2.6より古いPython 2のバージョンをサポートすることはできませんでした。このバージョンのPyramidを実行するには、Python 2.6以上が必要です。 Python 2.5を使用する必要がある場合は、Pyramidの最新の1.2.Xリリースを使用する必要があります。
利用可能なスキャフォールドの名前が変更され、 `` pcreate``でサポートされているフラグは `` paster create``でサポートされていたフラグと異なります。例えば、 `` pyramid_alchemy``はちょうど `` alchemy``です。
`` paster``コマンドは、もはやプロジェクトを作成したり、サーバを起動したり、デバッグコマンドを実行するための文書化された方法ではなくなりました。 scaffoldsからプロジェクトを作成するために、 `` paster create``は `` pcreate``コンソールスクリプトに置き換えられます。プロジェクトを提供するために、 `` paster serve``は `` pserve``コンソールスクリプトに置き換えられます。 `` pshell``、 `` pviews``、 `` proutes``、 `` ptweens``という新しいコンソールスクリプトは、 `` paster <commandname> ``相当することがあった。すべての関連するナレーション文書が更新されました。根拠:PasteとPasteScriptパッケージはPython 3では動作しません。
新たにレンダリングされたスキャフォールディングからの `` pserve``の結果として実行されるデフォルトのWSGIサーバは、 `` paste.httpserver``サーバの代わりに `` waitress`` WSGIサーバになりました。根拠:PasteとPasteScriptパッケージはPython 3では動作しません。
`` pshell``コマンド("paster pshell "を参照)は、 `` --disable-ipython``コマンドライン引数を受け付けません。代わりに、 `` -p``または `` --python-shell``引数を受け取ります。引数には、 `` python``、 `` ipython``、 `` bpython``のいずれかの値を指定できます。
`` pyramid.renderers.renderer_from_name``関数を削除しました。これはPyramid 1.0以来廃止され、決してAPIではありませんでした。
Pyramid> = 1.3のバージョンでZCMLを使うには、 `` pyramid_zcml``のバージョン> = 0.8と `` zope.configuration``のバージョン> = 3.8.0が必要です。 `` pyramid_zcml``パッケージのバージョン0.8は、Pyramid 1.0まで下位互換性がありますので、古いバージョンがインストールされていて、Pyramid自体を "インプレース"にアップグレードしても警告は表示されません。単にZCMLの `` includeOverrides``ディレクティブを使用している場合は、単に破損する可能性があります。
"remainder"のマッチを置換するための:meth: pyramid.request.Request.route_url`または:meth: pyramid.request.Request.route_path`に渡される文字列値は、埋め込まれたスラッシュを除いてURLクォートされます。例えば::
config.add_route('remain', '/foo*remainder') request.route_path('remain', remainder='abc / def') # -> '/foo/abc%20/%20def'
以前は、残りの置換文字として渡された文字列の値は、URLクォートを付けずに変更されませんでした。しかし、渡される値がUnicode(生のUnicodeはURLまたはパスに配置することはできません)であり、値が文字列であれば残りのURL生成機構と矛盾します(これは '呼び出し側が指定しない限り引用符で囲まないでください)。
いくつかの人々は、クエリ文字列要素とURLの部分を固定するために古い動作に頼っているでしょう。申し訳ありませんが、これを行うには、 `` _query``や `` _anchor``引数を `` route_path``または `` route_url``に使用するようにコードを変更する必要があります。
非ASCII文字を含むバイトストリングをパターンとして:meth: `pyramid.config.Configurator.add_route`に渡すと、起動時に失敗するようになりました。代わりにUnicodeを使用してください。
`` path_info``ルートとビューの述語は、 `` request.path_info``(Python 3とPython 2に基づく不定値)ではなく、 `` request.upath_info``(Unicode)と一致するようになりました。これは、Python 2とPython 3のマッチングを正規化するために行う必要があります。
`` match_param``のビュー述語は、もはやdictを受け付けません。これは、dictベースの引数の実装が壊れているため、悪影響はありません。
`` pyramid.interfaces.IContextURL``インタフェースは非推奨です。ピラミッド1.0以来、カスタムトラバーサを介して見つかったリソースのmeth: pyramid.request.Request.resource_url URL生成に影響を及ぼすために使用するために、これを使用して"フック"章にリソースURLアダプタを登録するように指示されました。
インターフェイスはまだ存在しており、古いバージョンでも説明されているようにアダプタを使用してアダプタを登録することはできますが、Pyramidの主要なリリースの後にこのインターフェイスはソフトウェアから削除されます。等価な:class: pyramid.interfaces.IResourceURL`アダプタで置き換える必要があります。これはnew:meth: pyramid.config.Configurator.add_resource_url_adapter` APIを使って登録します。 `` pyramid.interquery.Request.resource_url`が呼び出されたときに、 `` pyramid.interfaces.IContextURL``アダプタが見つかったときに非推奨警告が出されました。
`` pyramid.config.Configurator.with_context``クラスメソッドを削除してください。これは決してAPIではなく、 `` pyramid_zcml``だけで使用され、その機能はそのパッケージの最新リリースに移されました。つまり、Pyramidのこのリリースでは0.9.2以降のリリースの `` pyramid_zcml``を使う必要があります。
廃止予定の `` set_notfound_view``コンフィグレータメソッドは、新しい `` add_notfound_view``コンフィグレータメソッドのエイリアスになりました。同様に、非推奨の `` set_forbidden_view``は、新しい `` add_forbidden_view``コンフィグレータメソッドのエイリアスになりました。 `` set_notfound_view``または `` set_forbidden_view``を介して登録された ``(コンテキスト、リクエスト) ``コールシグネチャでビューに送られた `` context``は次のような例外オブジェクトになりました。実際のリソースコンテキストが見つかりました。実際のリソースコンテキストを取得するには `` request.context``を使います。また、 `` set_notfound_view``を `` add_notfound_view``に向けて廃止し、エイリアシングにもかかわらず `` add_forbidden_view``を優先して `` set_forbidden_view``を廃止することもお勧めします。
廃止¶
- `` pyramid.view.append_slash_notfound_view``と `` pyramid.view.AppendSlashNotFoundViewFactory``のAPIドキュメントが削除されました。これらの名前はまだ存在し、インポート可能ですが、もはやAPIではありません。同じ動作をするには、 `` pyramid.config.Configurator.add_notfound_view(append_slash = True) ``または `` pyramid.view.notfound_view_config(append_slash = True) ``を使用します。
- コンフィギュレータの `` set_forbidden_view``メソッドと `` set_notfound_view``メソッドはドキュメントから削除されました。彼らはPyramid 1.1以来非難されています。
- `` tmpl_context``要求変数へのすべての参照は、ドキュメントから削除されました。ピラミッドに存在することは、決してPylonsユーザーではない人々にとって混乱を招いています。それはPyramid 1.0のPylonsユーザーのための移植の便宜のために追加されましたが、PyramidレンダリングシステムがPylonsのものとは大きく異なり、Pylonsで提供するように設計された方法を実行するための方法があります。それは"永遠に"存在し続けるでしょうが、それはドキュメントで推奨されたり言及されません。
- すべてのPyramid提供の.iniファイルで、何もしない `` pyramid.debug_templates``設定への参照を削除してください。この設定は、以前より優れた例外を表示するようにChameleonに伝えました。現在、Chameleonはこの設定の値に関係なく常に素晴らしい例外をレンダリングします。
既知の問題点¶
- この記事(Pyramid 1.3b2のリリース)の時点で、Python 3.2で `` setup.py develop``を介して `` alchemy``足場を使ったPyramidプロジェクトをインストールしようとすると、インストールエラーで終了します`` Pygments``をインストールしようとしています。このような場合は、 `` setup.py develop``コマンドをもう一度やり直すと、正常に完了します。これは、Python 3のSQLAlchemy 0.7.5のマイナーなバグが原因で、後のSQLAlchemyリリースで修正されています。 http://www.sqlalchemy.org/trac/ticket/2421を見てください。
ドキュメントの機能拡張¶
- :ref: bfg_sql_wiki_tutorial`が更新されました。これは、 ` @ view_config``デコレータと明示的なデータベース投入スクリプトを使用します。
- :ref: `bfg_wiki_tutorial`のマイナーアップデート。
- narrative documentation chapter:ref: extconfig_narr`が追加されました。 custom:term: `設定ディレクティブ 'を追加する方法と、カスタムディレクティブ内で:meth: pyramid.config.Configurator.action`メソッドを使用する方法について説明しています。また、term: `introspectable`オブジェクトを追加する方法についても説明します。
- narrative documentation chapter:ref: `using_introspection`が追加されました。イントロスペクションシステムを照会する方法について説明します。
- mod: `pyramid.scaffolds`のAPIドキュメントの章を追加しました。
- ref: `scaffolding_chapter`というナレーション文書の章を追加しました。
- `` prequest``コマンドラインスクリプトの説明を:ref: `invoking_a_request`に追加しました。
- "Command-Line Pyramid "章に:ref: `making_a_console_script`というセクションを追加しました。
- メインのドキュメントから"Google App EngineでPyramidを実行する"チュートリアルを削除しました。それはPyramid Community Cookbookで、ref: `Pyramid on GoogleのApp Engine(appengine-monkeyを使って) <cookbook:appengine_tutorial> `。理論的根拠:GAEのみのPython 2.5バージョンの正しい情報を提供します。このバージョンのPyramidはPython 2.5をサポートしていません。
- :ref: changing_the_forbidden_view`セクションを更新し、 add_view``または view_config``を使ってビューを add_forbidden_view``または `forbidden_view_config``を使って説明することを置き換えました。
- :ref: changing_the_notfound_view`セクションを更新し、 add_view``や view_config``を使ってビューを add_notfound_view``や `notfound_view_config``を使って説明したものに置き換えました。
- :ref: redirecting_to_slash_appended_routes`セクションを更新し、 add_view``や view_config``を使って add_notfound_view``や `notfound_view_config``を使ってビューを登録する説明を置き換えました
- すべてのチュートリアルで、 `` pyramid.view.view_config``ではなく、 `` pyramid.view.forbidden_view_config``をHTTPForbiddenコンテキストで使用するように更新しました。
依存関係の変更¶
- ピラミッドは、テスト依存関係を除いて、 `` zope.component``パッケージに依存しなくなりました。
- pyramidはPython 3との互換性のため、zope.interface> = 3.8.0、WebOb> = 1.2dev、repoze.lru> = 0.4、zope.deprecation> = 3.5.0、translationstring> = 0.4のパッケージバージョンに依存しています。また、テストの依存関係として、同じ理由でWebTest> = 1.3.1に依存します。
- ピラミッドは `` Paste``や `` PasteScript``パッケージに依存しなくなりました。これらのパッケージは、Python 3と互換性がありません。
- `` venusian`` = 1.0a3に依存して、スキャンの ``無視 '`のサポートを提供してください。