Google App Engine では、google.appengine の Python モジュールで使用する定数や「フック関数」について、ユーザーが独自の値を指定できます。独自の値を指定することで、関連する App Engine サービスのデフォルトの動作をアプリケーションのニーズに応じて変更することが可能です。これらの定数は appengine_config.py ファイルで指定します。このファイルを作成したら、他のコードと一緒にデプロイします。
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_AUTHENTICATIONclass 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 で利用できるようになります。


