Python 2 モジュールの構成

appengine_config.py ファイルという構成ファイルを使用すると、ライブラリのインストール フォルダを指定できます。また、google.appengine パッケージの Python モジュールのいくつかで定数や「フック関数」に独自の値を設定できます。独自の値を指定することで、関連する App Engine サービスのデフォルトの動作をアプリケーションのニーズに応じて変更することが可能です。このファイルを app.yaml 構成ファイルとともに定義し、アプリの残りのコードと一緒にデプロイします。

appengine_config.py を使用した Python モジュールの構成

App Engine の Python モジュールのいくつかは、appengine_config.py を使用して構成できます。

サービスの Python モジュールをカスタマイズするには、そのサービスのルート ディレクトリに新しい appengine_config.py ファイルを作成します。このファイルを使用するのに必要な作業は、オーバーライド対象の定数やフック関数を定義することだけです。次に、app.yaml ファイルがあるディレクトリから gcloud app deploy を実行して、新しい appengine_config.py ファイルとともにアプリを再デプロイします。これにより、定義した定数やフック関数が該当する App Engine サービス内で使用されるようになります。

定数をオーバーライドするには、定数の名前の前に Python モジュール名とアンダースコアを付加してから値を割り当てます。たとえば、appstats でオーバーライドを編集するには、KEY_PREFIX の値を定義します。

appstats_KEY_PREFIX = '__my_custom_prefix__'

オーバーライドされるフック関数の命名は、他の Python モジュールの場合と同様です。たとえば、namespace_manager では、フック関数 default_namespace_for_requestappengine_config.py 内で次のようにオーバーライドできます。

import os
def namespace_manager_default_namespace_for_request():
    return os.environ.get('HTTP_HOST', '')

App Engine で構成可能な Python モジュール

以下にリストされている Python モジュールは、appengine_config.py を使用して構成できます。慣例により、フック関数は小文字、定数は大文字とします。

namespace_manager
  • default_namespace_for_request()(デフォルトの戻り値: None

appstats

datastore_admin

  • BASE_PATH(デフォルトは '/_ah/datastore_admin'
  • MAPREDUCE_PATH(デフォルトは '/_ah/mapreduce'
  • CLEANUP_MAPREDUCE_STATE(デフォルトは True

remoteapi

lib_config を使用した独自の Python モジュールの構成

App Engine では、appengine_config.py で定義した定数やフック関数を使用して、独自の Python モジュールを構成することも可能です。lib_config.register() 関数を使用すると、ユーザーがオーバーライドできる定数とフックの名前を登録でき、またユーザーがオーバーライドしない場合の適切なデフォルト値も定義できます。内部的には、lib_config.register()appengine_config をインポートしようとします。正常にインポートされると、指定した Python モジュールのデフォルトが、appengine_config.py で定義した内容に置き換えられます。

my_module.py での使用例:

from google.appengine.api import lib_config

def _hook_function1_default():
   return 'baz'

_config = lib_config.register('my_module', {'CONSTANT1': 'foo',
                                            'CONSTANT2': 'bar',
                                            'hook_function1': _hook_function1_default})

これで、次に示すユーザーの定数にアクセスできます。

_config.CONSTANT1
_config.CONSTANT2

また、次のフック関数を呼び出すことができます。

_config.hook_function1()

プログラマによっては、デフォルトを 1 つのクラスにまとめる場合もあります。

class _ConfigDefaults(object):
  CONSTANT1 = 'foo'
  CONSTANT2 = 'bar'
  def hook_function1():
      return 'baz'

_config = lib_config.register('my_module',  _ConfigDefaults.__dict__)

デフォルトをオーバーライドするには、appengine_config.py で次のように定義します。

my_module_CONSTANT1 = 'foofoo'
my_module_hook_function1 = lambda: 'bazbaz'

その結果、my_module.py では以下のようになります。

  • _config.CONSTANT1'foofoo' に変更されます。
  • _config.CONSTANT2'bar' のままです。
  • _config.hook_function1()'bazbaz' を返します。

ユーザーによるオーバーライドは、lib_config.register() が返されるとすぐに my_module.py で利用できるようになります。