Configuración del módulo Python 2

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:

namespace_manager
  • default_namespace_for_request() (el valor predeterminado es None)

appstats

datastore_admin

  • BASE_PATH (valor de '/_ah/datastore_admin' predeterminado)
  • MAPREDUCE_PATH (valor de '/_ah/mapreduce' predeterminado)
  • CLEANUP_MAPREDUCE_STATE (valor de True predeterminado)

remoteapi

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.