El archivo appengine_config.py
es un archivo de configuración que te permite especificar la
carpeta de instalación de las bibliotecas y proporcionar tus propios valores para las constantes y las "funciones de gancho" de algunos de los módulos de Python de los paquetes google.appengine.
Si especificas tus propios valores, puedes cambiar el comportamiento predeterminado de los servicios de App Engine relacionados en función de las necesidades de la aplicación. Este archivo se define junto con el archivo de configuración app.yaml
y se implementa con el resto del código de la aplicación.
Configurar módulos de Python con appengine_config.py
Varios módulos de Python en App Engine se pueden configurar mediante appengine_config.py
.
Para personalizar los módulos de Python de tus servicios, crea un archivo appengine_config.py
en el directorio raíz de ese servicio. Para usar este archivo, solo tienes que definir las constantes o las funciones de gancho que quieras anular. A continuación, ejecuta gcloud app
deploy
desde el directorio en el que se encuentra el archivo app.yaml
para volver a implementar tu aplicación junto con el nuevo archivo appengine_config.py
. Las constantes y las funciones de gancho que hayas definido se usarán internamente en esos servicios de App Engine.
Para anular una constante, añade el prefijo del nombre de la constante con el nombre del módulo de Python y un guion bajo, y, a continuación, asigna un valor. Por ejemplo, para editar las anulaciones en appstats, puedes definir el valor de KEY_PREFIX
appstats_KEY_PREFIX = '__my_custom_prefix__'
El nombre de las funciones de gancho sustituidas es similar en otros módulos de Python. Por ejemplo, en
namespace_manager, puedes anular la función de gancho
default_namespace_for_request
en appengine_config.py
de la siguiente manera:
import os def namespace_manager_default_namespace_for_request(): return os.environ.get('HTTP_HOST', '')
Módulos de Python configurables en App Engine
Los módulos de Python que se indican a continuación se pueden configurar mediante
appengine_config.py
. Por convención, las funciones de gancho se escriben en minúsculas y las constantes en mayúsculas:
-
default_namespace_for_request()
(el valor predeterminado esNone
)
- Consulta
class ConfigDefaults
en appengine/ext/appstats/recording.py - Consulta un ejemplo en appengine/ext/appstats/sample_appengine_config.py
BASE_PATH
(valor de'/_ah/datastore_admin'
predeterminado)MAPREDUCE_PATH
(valor de'/_ah/mapreduce'
predeterminado)CLEANUP_MAPREDUCE_STATE
(valor deTrue
predeterminado)
CUSTOM_ENVIRONMENT_AUTHENTICATION
- Consulta
class ConfigDefaults
en appengine/ext/remote_api/handler.py.
Configurar tus propios módulos de Python con lib_config
App Engine también te permite configurar tus propios módulos de Python con constantes y funciones de enlace definidas en appengine_config.py
. La función
lib_config.register()
te permite registrar los nombres de las constantes y los hooks que pueden modificar los usuarios, así como definir valores predeterminados adecuados por si los usuarios no quieren modificarlos. Internamente, lib_config.register()
intenta importar appengine_config
. Si se ejecuta correctamente, sustituye los valores predeterminados de los módulos de Python especificados por los definidos en appengine_config.py
.
Ejemplo de uso en 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})
Ahora puedes acceder a las constantes de un usuario de la siguiente manera:
_config.CONSTANT1 _config.CONSTANT2
y llama a su función de gancho de la siguiente manera:
_config.hook_function1()
A algunos programadores les gusta agrupar sus valores predeterminados en una clase:
class _ConfigDefaults(object): CONSTANT1 = 'foo' CONSTANT2 = 'bar' def hook_function1(): return 'baz' _config = lib_config.register('my_module', _ConfigDefaults.__dict__)
Para anular los valores predeterminados, un usuario puede definir lo siguiente en
appengine_config.py
:
my_module_CONSTANT1 = 'foofoo' my_module_hook_function1 = lambda: 'bazbaz'
Por lo tanto, en my_module.py
, se cumplirá lo siguiente:
_config.CONSTANT1
ahora es'foofoo'
_config.CONSTANT2
restantes'bar'
_config.hook_function1()
devoluciones'bazbaz'
Las anulaciones de usuario están disponibles para my_module.py
inmediatamente
después de que lib_config.register()
devuelva un valor.