O appengine_config.py
é um arquivo de configuração que permite especificar a pasta de instalação para bibliotecas e fornecer seus próprios valores para constantes e "funções hook" para alguns dos módulos Python nos pacotes google.appengine.
A especificação dos valores próprios pode alterar o comportamento padrão dos serviços do App Engine relacionados com base nas necessidades do aplicativo. Você define esse arquivo junto com seu arquivoapp.yaml
de configuração e implanta-o com o restante do código do aplicativo.
Como configurar módulos do Python com appengine_config.py
Vários módulos de Python no App Engine podem ser configurados usando appengine_config.py
.
Para personalizar os módulos de Python dos seus serviços, crie um novo arquivo appengine_config.py
no diretório raiz do serviço. Para usar esse arquivo, você precisa definir apenas as constantes ou as funções de gancho que quer substituir. Em seguida, execute gcloud app
deploy
a partir do diretório em que o arquivo app.yaml
está localizado para reimplantar seu aplicativo junto com o novo arquivo appengine_config.py
. As constantes e as funções de gancho definidas serão usadas por esses serviços do App Engine internamente.
Para substituir uma constante, ise o nome do módulo Python e um sublinhado como prefixo do nome da constante e atribua um valor. Por exemplo, para editar modificações em appstats, defina o valor de KEY_PREFIX
appstats_KEY_PREFIX = '__my_custom_prefix__'
A nomeação de funções gancho modificadas é semelhante em outros módulos do Python. Por exemplo, em
namespace_manager, é possível substituir a função hook default_namespace_for_request
em appengine_config.py
da seguinte maneira:
import os def namespace_manager_default_namespace_for_request(): return os.environ.get('HTTP_HOST', '')
Módulos do Python configuráveis no App Engine
Os módulos de Python listados abaixo podem ser configurados usando appengine_config.py
. Por convenção, as funções de gancho são minúsculas e as constantes são maiúsculas:
default_namespace_for_request()
(o padrão retornaNone
)
- veja
class ConfigDefaults
in appengine/ext/appstats/recording.py - consulte o exemplo em appengine/ext/appstats/sample_appengine_config.py
BASE_PATH
(padrão'/_ah/datastore_admin'
)MAPREDUCE_PATH
(padrão'/_ah/mapreduce'
)CLEANUP_MAPREDUCE_STATE
(padrãoTrue
)
CUSTOM_ENVIRONMENT_AUTHENTICATION
- veja
class ConfigDefaults
in appengine/ext/remote_api/handler.py
Como configurar os módulos do Python próprios com lib_config
O App Engine também permite que você configure seus próprios módulos de Python com constantes e funções hook definidas em appengine_config.py
. A função lib_config.register()
permite registrar os nomes das constantes e hooks substituíveis pelo usuário e definir padrões sensíveis caso os usuários não queiram substituí-los. Internamente, lib_config.register()
tenta importar appengine_config
. Se for bem-sucedido, ele substituirá os padrões dos módulos de Python especificados por aqueles definidos em appengine_config.py
.
Exemplo de uso em 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})
Já é possível acessar as constantes de um usuário como:
_config.CONSTANT1 _config.CONSTANT2
e chamar a função de gancho como:
_config.hook_function1()
Alguns programadores gostam de agrupar os padrões em uma classe:
class _ConfigDefaults(object): CONSTANT1 = 'foo' CONSTANT2 = 'bar' def hook_function1(): return 'baz' _config = lib_config.register('my_module', _ConfigDefaults.__dict__)
Para modificar seus padrões, um usuário pode definir em appengine_config.py
:
my_module_CONSTANT1 = 'foofoo' my_module_hook_function1 = lambda: 'bazbaz'
Como resultado, em my_module.py
, o seguinte será verdadeiro:
_config.CONSTANT1
agora é'foofoo'
_config.CONSTANT2
continua sendo'bar'
_config.hook_function1()
retorna'bazbaz'
As modificações do usuário estão disponíveis para my_module.py
imediatamente após o retorno de lib_config.register()
.