O ficheiro appengine_config.py
é um ficheiro de configuração que lhe permite especificar a
pasta de instalação para bibliotecas e fornecer os seus próprios valores para constantes e "funções de gancho" para alguns dos módulos Python nos pacotes google.appengine.
A especificação dos seus próprios valores pode alterar o comportamento predefinido dos serviços do App Engine relacionados com base nas necessidades da aplicação. Define este ficheiro juntamente com o ficheiro de configuração app.yaml
e implementa-o com o resto do código da sua app.
Configurar módulos Python com o ficheiro appengine_config.py
Vários módulos Python no
App Engine são configuráveis através do appengine_config.py
.
Para personalizar os módulos Python dos seus serviços,
crie um novo ficheiro appengine_config.py
no diretório raiz
desse serviço. Para usar este ficheiro, só tem de definir as constantes ou as funções de
gancho que quer substituir. Em seguida, execute gcloud app
deploy
a partir do diretório onde o ficheiro app.yaml
está localizado para voltar a implementar a sua app juntamente com o novo ficheiro appengine_config.py
. As constantes e as funções de gancho que definiu são, em seguida, usadas internamente por esses serviços do App Engine.
Para substituir uma constante, adicione o prefixo do nome do módulo Python
e um sublinhado ao nome da constante e, em seguida, atribua um valor. Por exemplo, para editar substituições em
appstats, pode
definir o valor de KEY_PREFIX
appstats_KEY_PREFIX = '__my_custom_prefix__'
A nomenclatura das funções de gancho substituídas é semelhante noutros módulos Python. Por exemplo, no
namespace_manager, pode substituir a função de gancho
default_namespace_for_request
em appengine_config.py
da seguinte forma:
import os def namespace_manager_default_namespace_for_request(): return os.environ.get('HTTP_HOST', '')
Módulos Python configuráveis no App Engine
Os módulos Python indicados abaixo são configuráveis através de
appengine_config.py
. Por convenção, as funções de gancho são escritas em minúsculas e as constantes em maiúsculas:
-
default_namespace_for_request()
(a predefinição devolveNone
)
- consulte
class ConfigDefaults
in appengine/ext/appstats/recording.py - Veja o exemplo em appengine/ext/appstats/sample_appengine_config.py
BASE_PATH
(predefinição'/_ah/datastore_admin'
)MAPREDUCE_PATH
(predefinição'/_ah/mapreduce'
)CLEANUP_MAPREDUCE_STATE
(predefiniçãoTrue
)
CUSTOM_ENVIRONMENT_AUTHENTICATION
- consulte
class ConfigDefaults
em appengine/ext/remote_api/handler.py
Configurar os seus próprios módulos Python com lib_config
O App Engine também lhe permite configurar os seus próprios módulos Python com constantes e funções de gancho definidas em appengine_config.py
. A função
lib_config.register()
permite-lhe registar os nomes das constantes e dos hooks substituíveis pelo utilizador, bem como definir predefinições sensatas caso os utilizadores não os queiram substituir. Internamente,
lib_config.register()
tenta importar
appengine_config
. Se tiver êxito, substitui as predefinições dos módulos Python especificados pelas definidas em appengine_config.py
.
Exemplo de utilização 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})
Agora, pode aceder às constantes de um utilizador da seguinte forma:
_config.CONSTANT1 _config.CONSTANT2
e chamar a respetiva função de gancho da seguinte forma:
_config.hook_function1()
Alguns programadores gostam de agrupar as respetivas predefinições numa classe:
class _ConfigDefaults(object): CONSTANT1 = 'foo' CONSTANT2 = 'bar' def hook_function1(): return 'baz' _config = lib_config.register('my_module', _ConfigDefaults.__dict__)
Para substituir as predefinições, um utilizador pode definir em
appengine_config.py
:
my_module_CONSTANT1 = 'foofoo' my_module_hook_function1 = lambda: 'bazbaz'
Como resultado, em my_module.py
, o seguinte é verdadeiro:
_config.CONSTANT1
é agora'foofoo'
_config.CONSTANT2
permanece'bar'
_config.hook_function1()
devoluções'bazbaz'
As substituições do utilizador estão disponíveis my_module.py
imediatamente
após o retorno de lib_config.register()
.