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_request
を appengine_config.py
内で次のようにオーバーライドできます。
import os def namespace_manager_default_namespace_for_request(): return os.environ.get('HTTP_HOST', '')
App Engine で構成可能な Python モジュール
以下にリストされている Python モジュールは、appengine_config.py
を使用して構成できます。慣例により、フック関数は小文字、定数は大文字とします。
default_namespace_for_request()
(デフォルトの戻り値:None
)
class ConfigDefaults
の参考情報: appengine/ext/appstats/recording.py- 例: appengine/ext/appstats/sample_appengine_config.py
BASE_PATH
(デフォルトは'/_ah/datastore_admin'
)MAPREDUCE_PATH
(デフォルトは'/_ah/mapreduce'
)CLEANUP_MAPREDUCE_STATE
(デフォルトはTrue
)
CUSTOM_ENVIRONMENT_AUTHENTICATION
class ConfigDefaults
の参考情報: appengine/ext/remote_api/handler.py
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
で利用できるようになります。