(機械翻訳) コマンドラインピラミッド

Your:app: `Pyramid`アプリケーションは、さまざまなコマンドラインユーティリティを使用して制御および検査できます。これらのユーティリティは、この章で説明されています。

指定されたURLの一致するビューの表示

参考

:ref: `pviews --helpの出力も参照してください。 <pviews_script> `

いくつかのビューを持つ大きなアプリケーションでは、すべてのビューを自分で定義したとしても、ビューの設定の詳細を頭に入れておくことは難しいでしょう。ターミナルウィンドウで `` pviews``コマンドを使うと、アプリケーション内の指定されたURLに対応するルートとビューの要約を表示できます。 `` pviews``コマンドは2つの引数を受け取ります。 `` pviews``の最初の引数はアプリケーションの `` .ini``ファイルへのパスで、 .ini`ファイル内のセクション名はアプリケーションを指しています。これは、 ` config_file#section_name``の形式でなければなりません。 2番目の引数は、一致するビューをテストするURLです。 `` section_name``は省略することができます。そうであれば、それは「主」とみなされます。

以下は、単純なビュー設定の例です:term: traversal

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ $VENV/bin/pviews development.ini#tutorial /FrontPage

URL = /FrontPage

    context: <tutorial.models.Page object at 0xa12536c>
    view name:

    View:
    -----
    tutorial.views.view_page
    required permission = view

出力には常に、要求されたURLがそのビュー構成の詳細と一致するすべてのビューの上部と下部に表示されます。この例では1つのビューのみが一致しているので、* View *セクションは1つだけです。一致するビューごとに、呼び出し可能な関連ビューへの完全なコードパスが、そのビュー設定の一部であるすべての権限と述部とともに表示されます。

より複雑な設定では、次のようなものが生成される可能性があります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$ $VENV/bin/pviews development.ini#shootout /about

URL = /about

    context: <shootout.models.RootFactory object at 0xa56668c>
    view name: about

    Route:
    ------
    route name: about
    route pattern: /about
    route path: /about
    subpath:
    route predicates (request method = GET)

        View:
        -----
        shootout.views.about_view
        required permission = view
        view predicates (request_param testing, header X/header)

    Route:
    ------
    route name: about_post
    route pattern: /about
    route path: /about
    subpath:
    route predicates (request method = POST)

        View:
        -----
        shootout.views.about_view_post
        required permission = view
        view predicates (request_param test)

        View:
        -----
        shootout.views.about_view_post2
        required permission = view
        view predicates (request_param test2)

この例では、:term: `URL dispatch`アプリケーションを扱っています。この特定のURLには、2つの一致するルートがあります。一致するルート情報が最初に表示され、その後にそのルートに関連付けられたビューが表示されます。第2の一致するルート出力からわかるように、ルートは複数のビューに関連付けることができます。

ビューと一致しないURLの場合、 `` pviews``は単に* Not found *メッセージを出力します。

インタラクティブシェル

参考

:ref: `pshell --helpの出力も参照してください。 <pshell_script> `

`` pip install -e .``を使って開発用にプログラムをインストールしたら、インタラクティブなPythonシェルを使ってPython環境で式を実行することができます&quot;これを行うには、 `` pshell``コマンドラインユーティリティを使用します。

`` pshell`の引数は `` config_file#section_name``の形式に従います。 `` config_file``はアプリケーションの `` .ini``ファイルへのパスで、 `` section_name``は `` app``です。あなたのアプリケーションを指し示す `` .ini``ファイル内のセクション名。例えば、あなたのアプリケーションの `` .ini``ファイルには、次のような `` [app:main] ``セクションがあります:

1
2
3
4
5
6
7
[app:main]
use = egg:MyProject
pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_templates = true
pyramid.default_locale_name = en

そのような場合は、次のコマンドを使用してセクション名として `` main``という名前を使用してデバッグシェルを呼び出すことができます:

$ $VENV/bin/pshell starter/development.ini#main
Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32)
[GCC 4.4.3] on linux2
Type "help" for more information.

Environment:
  app          The WSGI application.
  registry     Active Pyramid registry.
  request      Active request object.
  root         Root of the default resource tree.
  root_factory Default root factory used to create `root`.

>>> root
<myproject.resources.MyResource object at 0x445270>
>>> registry
<Registry myproject>
>>> registry.settings['pyramid.debug_notfound']
False
>>> from myproject.views import my_view
>>> from pyramid.request import Request
>>> r = Request.blank('/')
>>> my_view(r)
{'project': 'myproject'}

読み込まれたWSGIアプリケーションは、 `` app``グローバルとしてシェル内で利用可能になります。また、読み込まれたアプリケーションが:surrounding:term: middleware`を持たない:app: Pyramid`アプリケーションであれば、デフォルト:term: ルートファクトリ、 `` registry``によって返される ``ルート ``オブジェクト`と` `要求 &#39;&#39;が利用可能になります。

ファイル名の後にハッシュを省略することで、 `` main``のデフォルトのセクション名に頼ることもできます:

$ $VENV/bin/pshell starter/development.ini

対話シェルを終了するには `` Ctrl-D``を押します(Windowsでは `` Ctrl-Z``)。

シェルの拡張

`` pshell``を起動したときに、対話型シェルを使って、アプリケーションにとって重要な変数を既にグローバルとしてロードしている場合に便利です。これを容易にするために、 `` pshell``はINIファイル内の特別な `` [pshell] ``セクションを探し、後続のキーと値のペアをシェルに公開します。各キーは、pshellセッション内でグローバルになる変数名です。各値は:term: 点線のPython名`です。指定した場合、特殊キー ` setup``は:term: ドット付きPython名`でなければなりません。シェルにロードされるグローバルの辞書を受け付ける呼び出し可能ファイルを指します。これにより、 ` pshell``が実行されるたびにカスタム初期化コードが実行されるようになります。 INIファイルのキーを上書きする `` --setup``オプションを使用して、コマンドラインから `` setup``呼び出し可能ファイルを指定することもできます。

たとえば、実際のデータベースでモデルを変更できるように、モデルをシェルに公開してデータベースセッションとしたいとします。ここでは、モデルが `` myapp.models``パッケージに格納されていると仮定します。

1
2
3
4
5
[pshell]
setup = myapp.lib.pshell.setup
m = myapp.models
session = myapp.models.DBSession
t = transaction

`` setup``を呼び出し可能にすることで、シェルに公開される前に地球環境を受け取る `` setup``という名前の呼び出し可能モジュールを含む `` myapp.lib.pshell``モジュールを作成します。ここでは、環境の要求を変更し、要求を簡単に提出できるWebTestバージョンのアプリケーションを含む新しい値を追加します。

1
2
3
4
5
6
7
# myapp/lib/pshell.py
from webtest import TestApp

def setup(env):
    env['request'].host = 'www.example.com'
    env['request'].scheme = 'https'
    env['testapp'] = TestApp(env['app'])

このINIファイルがロードされると、余分な変数 `` m``、 `` session``、 `` t``がすぐに利用できるようになります。 `` setup``呼び出し可能関数も指定されているので、それが実行され、新しい変数 `` testapp``が公開され、リクエストはホスト `` http:// www.example.com``からURLを生成するように設定されます`。例えば:

$ $VENV/bin/pshell starter/development.ini
Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32)
[GCC 4.4.3] on linux2
Type "help" for more information.

Environment:
  app          The WSGI application.
  registry     Active Pyramid registry.
  request      Active request object.
  root         Root of the default resource tree.
  root_factory Default root factory used to create `root`.
  testapp      <webtest.TestApp object at ...>

Custom Variables:
  m            myapp.models
  session      myapp.models.DBSession
  t            transaction

>>> testapp.get('/')
<200 OK text/html body='<!DOCTYPE...l>\n'/3337>
>>> request.route_url('home')
'https://www.example.com/'

代替シェル

`` pshell``コマンドは、デフォルトのpython REPLが満足のいくものでなければ、別のREPLで簡単に拡張できます。 `` pyramid_ipython``のようなバインディングがインストールされていると仮定すると、通常自動的に選択されて使用されます。また、 `` -p choice``や `` --python-shell choice``オプションを使って選択を呼び出すこともできます。

$ $VENV/bin/pshell -p ipython development.ini#MyProject

使用可能なシェルを見るには、 `` --list-shells``オプションを使用してください。

$ $VENV/bin/pshell --list-shells
Available shells:
  bpython
  ipython
  python

箱の中でサポートされていないシェルを使いたい場合は、 `` setup.py``にエントリポイントを登録することで新しいシェルを導入できます:

setup(
    entry_points={
        'pyramid.pshell_runner': [
          'myshell=my_app:ptpython_shell_factory',
        ],
    },
)

そして、あなたのシェルファクトリは `` env``と `` help``という2つの引数を受け付ける関数を返すべきです。

from ptpython.repl import embed

def ptpython_shell_runner(env, help):
    print(help)
    return embed(locals=env)

バージョン 1.6 で変更: エントリポイントを使用してユーザ定義のシェルを登録することができます。それ以前はサポートされていたシェルは `` ipython``、 `` bpython``、 `` python``でした。

`` ipython``と `` bpython``はそれぞれのパッケージ `` ​​pyramid_ipython``と `` pyramid_bpython``に移されました。

デフォルトシェルの設定

あなたの `` [pshell] `` iniセクションで `` default_shell``オプションを使って好みのシェルのリストを指定することができます。

1
2
[pshell]
default_shell = ptpython ipython bpython

バージョン 1.6 で追加.

すべてのアプリケーションルートの表示

参考

:ref: `proutes --helpの出力も参照してください。 <proutes_script> `

ターミナルウィンドウで `` proutes``コマンドを使うと、アプリケーションに関連するルートの要約を表示できます。 `` pshell`コマンド(ref: interactive_shell`参照)と同様に、 proutes``コマンドは、 config_file#section_name``という形式の引数を受け取ります。 ` config_file``はあなたのアプリケーションの `` .ini``ファイルへのパスです。 `` section_name``はあなたのアプリケーションを指し示す `` .ini``ファイル内の `` app``セクション名です。デフォルトでは、 `` section_name``は `` main``であり省略することができます。

例えば:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ $VENV/bin/proutes development.ini
Name                       Pattern                     View                                          Method
----                       -------                     ----                                          ------
debugtoolbar               /_debug_toolbar/*subpath    <wsgiapp>                                     *
__static/                  /static/*subpath            dummy_starter:static/                         *
__static2/                 /static2/*subpath           /var/www/static/                              *
__pdt_images/              /pdt_images/*subpath        pyramid_debugtoolbar:static/img/              *
a                          /                           <unknown>                                     *
no_view_attached           /                           <unknown>                                     *
route_and_view_attached    /                           app1.standard_views.route_and_view_attached   *
method_conflicts           /conflicts                  app1.standard_conflicts                       <route mismatch>
multiview                  /multiview                  app1.standard_views.multiview                 GET,PATCH
not_post                   /not_post                   app1.standard_views.multview                  !POST,*

`` proutes``は* Name Pattern View Method *の4つのカラムを持つテーブルを生成します。 「名前」列にリストされている項目はルート名、「パターン」列にリストされている項目はルート・パターン、「ビュー」列にリストされている項目は、要求が関連するルート・パターンと一致したときに呼び出される、 [メソッド]列にリストされている項目は、ルート名に関連付けられているリクエストメソッドです。 [表示]列には、 <unknown>関連するビュー呼び出し可能なものが見つからない場合は ``ルート名のMethodカラムには、 `` <route mismatch> ``呼び出し可能なビューがルートのリクエストメソッドのどれも受け入れない場合は `` ``、呼び出し可能なビューがルートのリクエストメソッドのいずれかを受け入れる場合は `` * ``アプリケーション内でルートが設定されていない場合、 `` proutes``が実行されるとコンソールに何も出力されません。

`` proutes``コマンドを頻繁に使用して、表示する列や順序を設定すると便利です。これを容易にするため、 `` proutes``はあなたの `` .ini``ファイル中の特別な `` [proutes] ``セクションを探し、デフォルトとして使用します。

たとえば、リクエストメソッドを削除して、ビューを最初に配置することができます。

1
2
3
4
  [proutes]
  format = view
           name
           pattern

コンマまたはスペースでフォーマットを区切ることもできます。

1
2
3
4
5
  [proutes]
  format = view name pattern

  [proutes]
  format = view, name, pattern

一時的に列と順序を設定したい場合は、 `` --format``という引数があります。これは、カンマ区切りの列のリストです。現在利用可能なフォーマットは ``名前 ````パターン ````ビュー ````メソッド ``です。

&quot;Tweens

参考

:ref: `ptweens --helpの出力も参照してください。 <ptweens_script> `

A:term: tween`はPyramidの主なアプリケーションリクエストハンドラとそれを呼び出すWSGIアプリケーションの間にあるコードです。暗黙的なトゥイーンの順序(:meth: `pyramid.config.Configurator.add_tween`の呼び出しで指定された順序)と明示的なトゥイーンの順序( pyramid.tweens``設定の設定で指定された順序) ` ptweens``コマンドを使用します。 Tweenファクトリは、 `` ptweens``の出力に標準的なPythonの点線の名前で表されます。

たとえば、明示的なtweensなしで設定されたシステムに対して `` ptweens``コマンドを実行すると、次のようになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ $VENV/bin/ptweens development.ini
"pyramid.tweens" config value NOT set (implicitly ordered tweens used)

Implicit Tween Chain

Position    Name                                                Alias
--------    ----                                                -----
-           -                                                   INGRESS
0           pyramid_debugtoolbar.toolbar.toolbar_tween_factory  pdbt
1           pyramid.tweens.excview_tween_factory                excview
-           -                                                   MAIN

`` development.ini``ファイルで*明示的に定義されたtweensで設定されたシステムに対して実行される `` ptweens``コマンドは次のとおりです:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ ptweens development.ini
"pyramid.tweens" config value set (explicitly ordered tweens used)

Explicit Tween Chain (used)

Position    Name
--------    ----
-           INGRESS
0           starter.tween_factory2
1           starter.tween_factory1
2           pyramid.tweens.excview_tween_factory
-           MAIN

Implicit Tween Chain (not used)

Position    Name
--------    ----
-           INGRESS
0           pyramid_debugtoolbar.toolbar.toolbar_tween_factory
1           pyramid.tweens.excview_tween_factory
-           MAIN

上記の `` ptweens``コマンドで使用される `` development.ini``のアプリケーション設定セクションは、明示的なトゥイーンチェーンが使用されていることを報告します:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[app:main]
use = egg:starter
reload_templates = true
debug_authorization = false
debug_notfound = false
debug_routematch = false
debug_templates = true
default_locale_name = en
pyramid.include = pyramid_debugtoolbar
pyramid.tweens = starter.tween_factory2
                 starter.tween_factory1
                 pyramid.tweens.excview_tween_factory

トゥイーンの詳細については、ref: `registration_tweens`を参照してください。

リクエストの呼び出し

参考

:ref: `prequest --helpの出力も参照してください。 <prequest_script> `

`` prequest``コマンドラインユーティリティを使ってアプリケーションにリクエストを送信し、サーバを起動せずにレスポンスボディを見ることができます。

`` prequest``には二つの必須引数があります:

  • 設定ファイル/セクションは `` config_file#section_name``フォーマットに従います。 `` config_file``はアプリケーションの `` .ini``ファイルへのパスで、 `` section_name``は `` app``セクションです`` .ini``ファイルの中の名前。 `` section_name``はオプションです。デフォルトは `` main``です。例えば、 `` development.ini``です。
  • パス:これは、サーバー上でレンダリングするリソースへのURLのURLで引用されていないパス要素です。たとえば、 `` / ``とします。

例えば::

$ $VENV/bin/prequest development.ini /

これにより、応答の本体が呼び出されたコンソールに表示されます。

いくつかのオプションは `` prequest``でサポートされています。これらは、設定ファイル名またはURLの前に置く必要があります。

`` prequest``には出力前にサーバから返されたステータスとヘッダを出力する `` -d``(つまり `` --display-headers``)オプションがあります:

$ $VENV/bin/prequest -d development.ini /

これにより、コンソールへの応答のステータス、ヘッダー、および本文が出力されます。

`--header``オプションを使ってリクエストヘッダの値を追加することができます:

$ $VENV/bin/prequest --header=Host:example.com development.ini /

ヘッダは、CGI / WSGIに相当するものに変換することでWSGI環境に追加されます(例えば `` Host = example.com``は `` example.com``の値として `` HTTP_HOST``ヘッダ変数を挿入します)。複数の --header``オプションを指定できます。特別なヘッダ値 ` content-type``は、WSGI環境で `` CONTENT_TYPE``を設定します。

デフォルトでは、 `` prequest``は `` GET``要求を送信します。これを変更するには、 `` -m``(別名 `` --method``)オプションを使用します。現在、 `` GET``、 `` HEAD``、 `` POST``、 `` DELETE``がサポートされています。 `` POST``を使うと `` prequest``プロセスの標準入力が `` POST``本体として使われます:

$ $VENV/bin/prequest -mPOST development.ini / < somefile

`` p * ``スクリプトを実行するときのPythonへのカスタム引数の使用

バージョン 1.5 で追加.

Pyramidのコンソールスクリプト( `` pserve``、 `` pviews``など)は、 `` python3 -m``を使って直接実行でき、実行時にカスタム引数をPythonインタプリタに送ることができます。例えば::

python3 -m pyramid.scripts.pserve development.ini

インストールされているすべてのディストリビューションとそのバージョンの表示

バージョン 1.5 で追加.

参考

:ref: `pdistreport --helpの出力も参照してください。 <pdistreport_script> `

`` pdistreport``コマンドを使って:app: `Pyramid`のバージョン、使用しているPythonのバージョン、Python環境のすべてのPythonディストリビューションのバージョンを表示することができます:

$ $VENV/bin/pdistreport
Pyramid version: 1.5dev
Platform Linux-3.2.0-51-generic-x86_64-with-debian-wheezy-sid
Packages:
  authapp 0.0
    /home/chrism/projects/foo/src/authapp
  beautifulsoup4 4.1.3
    /home/chrism/projects/foo/lib/python2.7/site-packages/beautifulsoup4-4.1.3-py2.7.egg
... more output ...

`` pdistreport``オプションはありません。その出力は、問題を抱えているときにペーストビンに貼り付けるのに便利です。あなたの環境を見なければならないよりPythonのパッケージ化と配布に精通した人が必要です。

スクリプトを書く

すべてのWebアプリケーションは、要求を受け入れて応答を返すシステムです。 :app: Pyramid`アプリケーションによって要求が受け入れられると、システムは要求から状態を受け取ります。要求は、後でアプリケーションコードに依存します。たとえば、term: `view callable`は、特定のコンポジションの `request.matchdict``を持つリクエストに対して動作していると仮定していますが、別のものはmatchdictの異なる構成を想定しています。

それと同時に、:app: `Pyramid`アプリケーションで使用されるデータベーステーブルを更新するなど、Pyramid環境で動作するPythonスクリプトを書くことが便利です。しかし、&quot;実&quot;ピラミッド環境は、要求に依存しない完全に静的な状態を持っていません。あなたのアプリケーション(とPyramid自体)は、ほとんどの場合、要求から情報を得ることに頼っています。アプリケーションからコードを単純にインポートして実行しようとするPythonスクリプトを実行すると、実際のWeb要求がないため、要求データはありません。したがって、アプリケーションのいくつかの部分といくつかのPyramid APIは動作しません。

このため、:app: Pyramid`は、特定の:term: request`があなたの:app: `Pyramid`アプリケーションに到達したときに生成される環境のような環境でスクリプトを実行することを可能にします。これは、スクリプト本体に:func: `pyramid.paster.bootstrap`コマンドを使用することで実現します。

バージョン 1.1 で追加: :func: pyramid.paster.bootstrap

バージョン 1.8 で変更: `` boot```を `` with``文で自動的にクリーンアップする機能を追加しました。

最も単純なケースでは、:func: pyramid.paster.bootstrap`はPyramidアプリケーションの設定を単一の引数として表す:term: PasteDeploy` `` .ini``ファイルを受け入れる単一の引数で使用できます:

from pyramid.paster import bootstrap

with bootstrap('/path/to/my/development.ini') as env:
    print(env['request'].route_url('home'))

:func: pyramid.paster.bootstrap`は、フレームワーク関連の情報を含む辞書を返します。この辞書は常に:term: `request`オブジェクトを `request``キーとして含んでいます。

func: pyramid.paster.bootstrap:以下のキーは、` `env``ディクショナリで利用可能です。

要求

A:class: `pyramid.request.Request`オブジェクトはあなたのスクリプトの現在の要求状態を意味します。

アプリ

ブートストラップによって生成される:term: `WSGI`アプリケーションオブジェクト。

ルート

あなたの:app: Pyramid`アプリケーションの:term: resource`ルートです。これは、アプリケーションで設定された:term: `ルートファクトリ &#39;によって生成されるオブジェクトです。

レジストリ

あなたの:app: `Pyramid`アプリケーションの:term:`アプリケーションレジストリ。

クローザー

スクリプティングジョブが終了したときにinternal:app: Pyramid`スレッドローカルスタックをポップするために使用できるパラメータなしの呼び出し可能ファイル(:func: pyramid.threadlocal.get_current_registry`と:func: pyramid.threadlocal.get_current_request) 。

上記の例で使用されている `` / path / to / my / development.ini``ファイルが次のようになっていると仮定しましょう:

[pipeline:main]
pipeline = translogger
           another

[filter:translogger]
filter_app_factory = egg:Paste#translogger
setup_console_handler = False
logger_name = wsgi

[app:another]
use = egg:MyProject

上記のブートストラップの例で読み込まれた設定は、デフォルトで設定ファイルの `` [pipeline:main] ``セクションが暗示する設定を使用します。 `` / path / to / my / development.ini``を指定することは、論理的には `` / path / to / my / development.ini#main``を指定することと同じです。この場合、ペースト&quot;translogger &quot;:term: middleware`(リクエストをコンソールに記録する)にラップされた `app``オブジェクトを含む設定を使用します。

`` main``の代わりに読み込むPasteDeploy `` .ini``ファイルの特定の*セクション*を指定することもできます:

from pyramid.paster import bootstrap

with bootstrap('/path/to/my/development.ini#another') as env:
    print(env['request'].route_url('home'))

上記の例では、PasteDeploy設定ファイルの `` app``、 `` pipeline``、または `` composite``セクションを指定しています。 :func: pyramid.paster.bootstrap`によって返される env``辞書にある app``オブジェクトは、:app: Pyramid`:term: `router`になります。

リクエストの変更

デフォルトでは、Pyramidは `` env``ディクショナリに `` http:// localhost:80 / ``というURLのリクエストオブジェクトを生成します。つまり、スクリプトの実行中にPyramidによって生成されたURLは、ここに固定されます。これは一般的にあなたが望むものではありません。

それでは、ピラミッドに正しいURLを生成させるにはどうしたらいいですか?

あなたのアプリケーションで以下のようにルートを設定したと仮定します:

config.add_route('verify', '/verify/{code}')

WSGIアプリケーションが特定のベースからの要求を処理していることをPyramid環境に通知する必要があります。たとえば、アプリケーションを `https:// example.com / prefix`にマウントすることをシミュレートして、生成されたURLがGoogleのデプロイメントに適していることを確認します。これは、結果の要求オブジェクトを変更するか、または単に目的のリクエストを作成して、それをfunc: `〜pyramid.paster.bootstrap`に渡すことによって行うことができます:

from pyramid.paster import bootstrap
from pyramid.request import Request

request = Request.blank('/', base_url='https://example.com/prefix')
with bootstrap('/path/to/my/development.ini#another', request=request) as env:
    print(env['request'].application_url)
    # will print 'https://example.com/prefix'

これで、PyramidのAPIを使用してURLを生成できます。

env['request'].route_url('verify', code='1337')
# will return 'https://example.com/prefix/verify/1337'

掃除

`` with``ステートメントバリアントを使用している場合、心配することはありません。しかし、スクリプトロジックが終了したときに返された環境を直接使用している場合は、 `` close``コールバックを呼び出すのがよいでしょう。

from pyramid.paster import bootstrap
env = bootstrap('/path/to/my/development.ini')

# .. do stuff ...

env['closer']()

ロギングの設定

デフォルトでは、:func: pyramid.paster.bootstrap`は設定ファイルに存在するロギングパラメータを設定しません。 ` [logger] ``と設定ファイルの関連するセクションに基づいてロギングを設定するには、以下のコマンドを使用します:

import pyramid.paster
pyramid.paster.setup_logging('/path/to/my/development.ini')

app: Pyramid`の中でのロギングの詳細については:ref: logging_chapter`を参照してください。

スクリプトをコンソールスクリプトにする

&quot;コンソールスクリプト&quot;は次のようになります:term: `` setuptools`:Pythonの `` bin``ディレクトリにインストールされるスクリプトの用語です:term: virtual environment`(または&quot; base &quot;Python環境) a:そのスクリプトを格納しているterm: `distribution`がインストールされています。ディストリビューションのインストール時に仮想環境の ` bin``ディレクトリにインストールされるので、コマンドラインから呼び出せる機能をパッケージ化して配布するのに便利です。 `` .py``スクリプトを作成し、人々に&quot;右&quot; Pythonインタプリタで呼び出すように指示するよりもコンソールスクリプトを作成するほうが便利です。コンソールスクリプトは `` bin``に​​存在するファイルを生成し、それが呼び出されると常に&quot;右&quot; Python環境を使用します。つまり、必要なすべてのライブラリが必要な環境で常に呼び出されますピラミッドのように)利用可能です。

一般に、次のようにしてスクリプトをコンソールスクリプトにすることができます。

  • 既存のディストリビューション(例えば、 `` cookiecutter``で既に作成したディストリビューション)を使用するか、少なくとも1つのパッケージやモジュールを持つ新しいディストリビューションを作成してください。ディストリビューション内のどのモジュールでも、引数をとらず、実行するコードを実行する呼び出し可能な関数(通常は関数)を格納する必要があります。
  • スクリプト名と配布ファイルに追加した呼び出し可能ファイルを表すドット付きの名前の間のマッピングを作成する配布の `` entry_points``引数に `` [console_scripts] ``セクションを追加してください。
  • あなたのディストリビューションを再インストールするには、 `` pip install -e .``または `` pip install .``を実行してください。ディストリビューションを再インストールすると、最後のステップで指定したスクリプトを表すファイルは、ディストリビューションをインストールした仮想環境の `` bin``ディレクトリにあります。実行可能になります。ターミナルから呼び出すと、あなたの呼び出し可能コードが実行されます。

例として、Pyramidアプリケーションのデプロイメント設定を出力するコンソールスクリプトによって呼び出されるコードをいくつか作成しましょう。これを行うために、 `` myproject``という名前のパッケージを配布しているようです。このパッケージの中で、次のコードを含む `` scripts.py``モジュールを追加したようです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# myproject.scripts module

import optparse
import sys
import textwrap

from pyramid.paster import bootstrap

def settings_show():
    description = """\
    Print the deployment settings for a Pyramid application.  Example:
    'show_settings deployment.ini'
    """
    usage = "usage: %prog config_uri"
    parser = optparse.OptionParser(
        usage=usage,
        description=textwrap.dedent(description)
        )
    parser.add_option(
        '-o', '--omit',
        dest='omit',
        metavar='PREFIX',
        type='string',
        action='append',
        help=("Omit settings which start with PREFIX (you can use this "
              "option multiple times)")
        )

    options, args = parser.parse_args(sys.argv[1:])
    if not len(args) >= 1:
        print('You must provide at least one argument')
        return 2
    config_uri = args[0]
    omit = options.omit
    if omit is None:
        omit = []
    with bootstrap(config_uri) as env:
        settings = env['registry'].settings
        for k, v in settings.items():
            if any([k.startswith(x) for x in omit]):
                continue
            print('%-40s     %-20s' % (k, v))

このスクリプトはPythonの `` optparse``モジュールを使って、スクリプトに渡された余分な引数を理解できるようにします。 :func: `pyramid.paster.bootstrap`関数を使用して、設定ファイルで定義されたアプリケーションに関する情報を取得し、その設定ファイルに定義されているデプロイメント設定を出力します。

このスクリプトをパッケージに追加したら、ディストリビューションの `` setup.py``にその存在を伝える必要があります。あなたのディストリビューションのトップレベルディレクトリ内で、 `` setup.py``ファイルは次のようになります:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import os

from setuptools import setup, find_packages

here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.txt')) as f:
    README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
    CHANGES = f.read()

requires = ['pyramid', 'pyramid_debugtoolbar']

tests_require = [
    'WebTest >= 1.3.1',  # py3 compat
    'pytest',  # includes virtualenv
    'pytest-cov',
    ]

setup(name='MyProject',
      version='0.0',
      description='My project',
      long_description=README + '\n\n' +  CHANGES,
      classifiers=[
          "Programming Language :: Python",
          "Framework :: Pyramid",
          "Topic :: Internet :: WWW/HTTP",
          "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
      ],
      author='',
      author_email='',
      url='',
      keywords='web pyramid pylons',
      packages=find_packages(),
      include_package_data=True,
      zip_safe=False,
      install_requires=requires,
      extras_require={
          'testing': tests_require,
      },
      entry_points = """\
      [paste.app_factory]
      main = myproject:main
      """,
      )

`` setup.py``ファイルを変更して、 `` entry_points``文字列に `` [console_scripts] ``セクションを追加します。このセクションでは、 `` scriptname = dotted.path.to:yourfunction``行を指定する必要があります。例えば:

[console_scripts]
show_settings = myproject.scripts:settings_show

`` show_settings``の名前は、 `` bin``に​​インストールされているスクリプトの名前になります。上記の `` myproject.scripts``と `` settings_show``のコロン( ````)は `` myproject.scripts``がPythonモジュールであることを示し、 `` settings_show``はそのモジュールの関数ですコマンドラインから `` show_settings``スクリプトを起動した結果として実行したいコードが入っています。

結果は次のようになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import os

from setuptools import setup, find_packages

here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.txt')) as f:
    README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
    CHANGES = f.read()

requires = ['pyramid', 'pyramid_debugtoolbar']

tests_require = [
    'WebTest >= 1.3.1',  # py3 compat
    'pytest',  # includes virtualenv
    'pytest-cov',
    ]

setup(name='MyProject',
      version='0.0',
      description='My project',
      long_description=README + '\n\n' +  CHANGES,
      classifiers=[
          "Programming Language :: Python",
          "Framework :: Pyramid",
          "Topic :: Internet :: WWW/HTTP",
          "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
      ],
      author='',
      author_email='',
      url='',
      keywords='web pyramid pylons',
      packages=find_packages(),
      include_package_data=True,
      zip_safe=False,
      install_requires=requires,
      extras_require={
          'testing': tests_require,
      },
      entry_points = """\
      [paste.app_factory]
      main = myproject:main
      [console_scripts]
      show_settings = myproject.scripts:settings_show
      """,
      )

これをやったら、 `` $ VENV / bin / pip install -e .``を実行すると `` $ somevenv / bin``ディレクトリに `` show_settings``という名前のファイルが小さなPythonコードでインストールされますあなたのエントリーポイントを指しています。実行可能になります。引数なしで実行すると、エラーが出力され、終了します。設定ファイルのパスである1つの引数を指定して実行すると、設定が出力されます。 `` --omit = foo``引数でそれを実行すると、 `` foo``で始まるキーを持つ設定は省略されます。 2つの &quot;省略&quot;オプション(例えば、 `` --omit = foo --omit = bar``)で実行すると、 `` foo``や `` bar``で始まるキーを持つ設定はすべて省略されます。 :

$ $VENV/bin/show_settings development.ini --omit=pyramid --omit=debugtoolbar
debug_routematch                             False
debug_templates                              True
reload_templates                             True
mako.directories                             []
debug_notfound                               False
default_locale_name                          en
reload_resources                             False
debug_authorization                          False
reload_assets                                False
prevent_http_cache                           False

Pythonの `` pserve``、 `` pcreate``、 `` pshell``、 `` prequest``、 `` ptweens``などの `` p * ``スクリプトはコンソールスクリプトとして実装されています。そのうちの1つを起動すると、コンソールスクリプトを使用しています。