Configuração do módulo em Python 2

O appengine_config.py é um arquivo de configuração que permite especificar a pasta de instalação para bibliotecas e fornecer seus próprios valores para constantes e "funções hook" para alguns dos módulos 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. Você define esse arquivo junto com seu arquivoapp.yaml de configuração e implanta-o com o restante do código do aplicativo.

Como configurar módulos do Python com appengine_config.py

Vários módulos de Python no App Engine podem ser configurados usando appengine_config.py.

Para personalizar os módulos de Python dos seus serviços, crie um novo arquivo appengine_config.py no diretório raiz do 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 a partir do diretório em que o arquivo app.yaml está localizado para reimplantar seu aplicativo junto 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 substituir a função hook 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 de Python listados abaixo podem ser configurados usando 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 (padrão '/_ah/datastore_admin')
  • MAPREDUCE_PATH (padrão '/_ah/mapreduce')
  • CLEANUP_MAPREDUCE_STATE (padrão True)

remoteapi

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

O App Engine também permite que você configure seus próprios módulos de Python com constantes e funções hook definidas em appengine_config.py. A função lib_config.register() permite registrar os nomes das constantes e hooks substituíveis pelo usuário e definir padrões sensíveis caso os usuários não queiram substituí-los. Internamente, lib_config.register() tenta importar appengine_config. Se for bem-sucedido, ele substituirá os padrões dos módulos de Python especificados por aqueles definidos em appengine_config.py.

Exemplo de uso 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 modificar seus padrões, um usuário pode definir em appengine_config.py:

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

Como resultado, em my_module.py, o seguinte será verdadeiro:

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

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