Configuración del módulo de Python 2

El archivo appengine_config.py es un archivo de configuración que te permite especificar la carpeta de instalación para bibliotecas y proporcionar tus propios valores de constantes y “funciones hook” para algunos de los módulos de Python en los paquetes google.appengine. Si especificas tus valores propios, puede modificarse el comportamiento predeterminado de los servicios relacionados con App Engine según las necesidades de la aplicación. Debes definir este archivo junto con tu archivo de configuración app.yaml e implementarlo con el resto del código de tu app.

Configurar módulos de Python mediante 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 nuevo en el directorio raíz de ese servicio. Para usar este archivo, debes definir solo aquellas constantes o funciones hook que deseas anular. Luego, ejecuta gcloud app deploy desde el directorio en el que se encuentra el archivo app.yaml para volver a implementar la app junto con el archivo appengine_config.py nuevo. Las contantes y las funciones hook que hayas definido se usarán en los servicios de App Engine de forma interna.

Para anular una constante, agrega el nombre del módulo de Python y un guion bajo como prefijo al nombre de la constante. Luego, asigna un valor. Por ejemplo, para editar anulaciones en appstats, puedes definir el valor de KEY_PREFIX.

appstats_KEY_PREFIX = '__my_custom_prefix__'

El nombramiento de funciones hook anuladas es similar en otros módulos de Python. Por ejemplo, en namespace_manager, puedes anular la función hook 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 enumeran a continuación se pueden configurar mediante appengine_config.py. Por convención, las funciones hook están en minúsculas y las constantes, en mayúsculas.

namespace_manager
  • default_namespace_for_request() (de forma predeterminada muestra None)

appstats

datastore_admin

  • BASE_PATH (la configuración predeterminada es '/_ah/datastore_admin')
  • MAPREDUCE_PATH (la configuración predeterminada es '/_ah/mapreduce')
  • CLEANUP_MAPREDUCE_STATE (la configuración predeterminada es True)

remoteapi

Configura tus propios módulos de Python mediante lib_config

App Engine también te permite configurar tus propios módulos de Python con constantes y funciones hook definidas en appengine_config.py. La función lib_config.register() te permite registrar los nombres de las constantes y los hooks anulables por el usuario, y definir valores predeterminados sensibles en caso de que los usuarios no deseen anularlos. De forma interna, lib_config.register() intenta importar appengine_config. Si se ejecuta de forma correcta, reemplaza 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 como:

_config.CONSTANT1
_config.CONSTANT2

y llamar a la función de enlace como:

_config.hook_function1()

Algunos programadores prefieren agrupar los 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 podría definir en appengine_config.py:

my_module_CONSTANT1 = 'foofoo'
my_module_hook_function1 = lambda: 'bazbaz'

Como resultado, en my_module.py, se aplicará lo siguiente:

  • _config.CONSTANT1 es ahora 'foofoo'
  • _config.CONSTANT2 sigue siendo 'bar'
  • _config.hook_function1() muestra 'bazbaz'

Las anulaciones del usuario están disponibles en my_module.py de inmediato después de que se muestra lib_config.register().