Configuração do módulo Python 2

O ficheiro appengine_config.py é um ficheiro de configuração que lhe permite especificar a pasta de instalação para bibliotecas e fornecer os seus próprios valores para constantes e "funções de gancho" para alguns dos módulos Python nos pacotes google.appengine. A especificação dos seus próprios valores pode alterar o comportamento predefinido dos serviços do App Engine relacionados com base nas necessidades da aplicação. Define este ficheiro juntamente com o ficheiro de configuração app.yaml e implementa-o com o resto do código da sua app.

Configurar módulos Python com o ficheiro appengine_config.py

Vários módulos Python no App Engine são configuráveis através do appengine_config.py.

Para personalizar os módulos Python dos seus serviços, crie um novo ficheiro appengine_config.py no diretório raiz desse serviço. Para usar este ficheiro, só tem de definir as constantes ou as funções de gancho que quer substituir. Em seguida, execute gcloud app deploy a partir do diretório onde o ficheiro app.yaml está localizado para voltar a implementar a sua app juntamente com o novo ficheiro appengine_config.py. As constantes e as funções de gancho que definiu são, em seguida, usadas internamente por esses serviços do App Engine.

Para substituir uma constante, adicione o prefixo do nome do módulo Python e um sublinhado ao nome da constante e, em seguida, atribua um valor. Por exemplo, para editar substituições em appstats, pode definir o valor de KEY_PREFIX

appstats_KEY_PREFIX = '__my_custom_prefix__'

A nomenclatura das funções de gancho substituídas é semelhante noutros módulos Python. Por exemplo, no namespace_manager, pode substituir a função de gancho default_namespace_for_request em appengine_config.py da seguinte forma:

import os
def namespace_manager_default_namespace_for_request():
    return os.environ.get('HTTP_HOST', '')

Módulos Python configuráveis no App Engine

Os módulos Python indicados abaixo são configuráveis através de appengine_config.py. Por convenção, as funções de gancho são escritas em minúsculas e as constantes em maiúsculas:

namespace_manager
  • default_namespace_for_request() (a predefinição devolve None)

appstats

datastore_admin

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

remoteapi

Configurar os seus próprios módulos Python com lib_config

O App Engine também lhe permite configurar os seus próprios módulos Python com constantes e funções de gancho definidas em appengine_config.py. A função lib_config.register() permite-lhe registar os nomes das constantes e dos hooks substituíveis pelo utilizador, bem como definir predefinições sensatas caso os utilizadores não os queiram substituir. Internamente, lib_config.register() tenta importar appengine_config. Se tiver êxito, substitui as predefinições dos módulos Python especificados pelas definidas em appengine_config.py.

Exemplo de utilização 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})

Agora, pode aceder às constantes de um utilizador da seguinte forma:

_config.CONSTANT1
_config.CONSTANT2

e chamar a respetiva função de gancho da seguinte forma:

_config.hook_function1()

Alguns programadores gostam de agrupar as respetivas predefinições numa classe:

class _ConfigDefaults(object):
  CONSTANT1 = 'foo'
  CONSTANT2 = 'bar'
  def hook_function1():
      return 'baz'

_config = lib_config.register('my_module',  _ConfigDefaults.__dict__)

Para substituir as predefinições, um utilizador pode definir em appengine_config.py:

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

Como resultado, em my_module.py, o seguinte é verdadeiro:

  • _config.CONSTANT1 é agora 'foofoo'
  • _config.CONSTANT2 permanece 'bar'
  • _config.hook_function1() devoluções 'bazbaz'

As substituições do utilizador estão disponíveis my_module.py imediatamente após o retorno de lib_config.register().