Configuração do módulo do Python 2

O Google App Engine fornece um mecanismo que permite aos usuários especificar os próprios valores para constantes e "funções de gancho" a serem usadas por alguns dos módulos do 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. O arquivo em que você especifica essas constantes é appengine_config.py. Depois de criar esse arquivo, basta implantá-lo com o outro código.

Como configurar módulos do Python com appengine_config.py

É possível configurar diversos módulos do Python no App Engine usando appengine_config.py.

Para personalizar os módulos do Python dos seus serviços, é preciso criar um novo arquivo appengine_config.py no diretório raiz desse 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 no diretório em que o arquivo app.yaml está localizado para reimplantar o app 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 modificar a função de gancho 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 do Python listados abaixo são configuráveis usando-se appengine_config.py. Por convenção, as funções de gancho são minúsculas e as constantes são maiúsculas:

namespace_manager
  • default_namespace_for_request() (o padrão retorna None)

appstats

datastore_admin

  • BASE_PATH ('/_ah/datastore_admin' padrão)
  • MAPREDUCE_PATH ('/_ah/mapreduce' padrão)
  • CLEANUP_MAPREDUCE_STATE (True padrão)

remoteapi

Como configurar os módulos do Python próprios com lib_config

O App Engine também permite configurar os próprios módulos do Python com constantes e funções de gancho definidas em appengine_config.py. A função lib_config.register() permite registrar os nomes das constantes e dos ganchos substituíveis pelo usuário e definir padrões aceitáveis, caso os usuários não queiram substituí-los. Internamente, lib_config.register() tenta importar appengine_config. Se bem sucedido, ele substituirá os padrões dos módulos do Python especificados pelos definidos em appengine_config.py.

Uso de exemplo 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 substituir os padrões, um usuário pode definir em appengine_config.py:

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

Dessa maneira, em my_module.py, o seguinte será verdadeiro:

  • _config.CONSTANT1 agora é 'foofoo'
  • _config.CONSTANT2 continua 'bar'
  • _config.hook_function1() retorna 'bazbaz'

As modificações do usuário estarão disponíveis para my_module.py logo após o retorno de lib_config.register().