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 ConfigDefaultsin 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 ConfigDefaultsin 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.CONSTANT1agora é'foofoo'_config.CONSTANT2continua 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().