Configurazione del modulo Python 2

Il file appengine_config.py è un file di configurazione che consente di specificare la cartella di installazione delle librerie e di fornire i propri valori per le costanti e le "funzioni di hook" per alcuni moduli Python nei pacchetti google.appengine. Specificando i tuoi valori puoi modificare il comportamento predefinito dei servizi App Engine correlati in base alle esigenze dell'applicazione. Devi definire questo file insieme al file di configurazione di app.yaml e eseguirne il deployment con il resto del codice dell'app.

Configurazione dei moduli Python con appengine_config.py

Diversi moduli Python in App Engine sono configurabili utilizzando appengine_config.py.

Per personalizzare i moduli Python dei tuoi servizi, devi creare un nuovo file appengine_config.py nella directory radice del servizio. Per utilizzare questo file, devi definire solo le costanti o le funzioni hook che vuoi sostituire. Esegui gcloud app deploy dalla directory in cui si trova il file app.yaml per eseguire nuovamente il deployment dell'app insieme al nuovo file appengine_config.py. Le costanti e le funzioni hook che hai definito verranno quindi utilizzate internamente dai servizi App Engine.

Per eseguire l'override di una costante, anteponi al nome della costante il nome del modulo Python e un trattino basso, quindi assegna un valore. Ad esempio, per modificare gli override in appstats, puoi definire il valore di KEY_PREFIX

appstats_KEY_PREFIX = '__my_custom_prefix__'

La denominazione delle funzioni hook sostituite è simile in altri moduli Python. Ad esempio, in workspace_manager, puoi eseguire l'override della funzione hook default_namespace_for_request in appengine_config.py come segue:

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

Moduli Python configurabili in App Engine

I moduli Python elencati di seguito sono configurabili utilizzando appengine_config.py. Per convenzione, le funzioni di hook sono minuscole e le costanti sono in maiuscolo:

namespace_manager
  • default_namespace_for_request() (restituisce None per impostazione predefinita)

statistiche

datastore_admin

  • BASE_PATH (valore predefinito: '/_ah/datastore_admin')
  • MAPREDUCE_PATH (valore predefinito: '/_ah/mapreduce')
  • CLEANUP_MAPREDUCE_STATE (valore predefinito: True)

remoteapi

Configurazione dei tuoi moduli Python con lib_config

App Engine consente inoltre di configurare i moduli Python con costanti e funzioni hook definite in appengine_config.py. La funzione lib_config.register() consente di registrare i nomi delle costanti e degli hook sovrapponibili dall'utente, nonché di definire valori predefiniti sensibili nel caso in cui gli utenti non vogliano ignorarli. Internamente, lib_config.register() tenta di importare appengine_config. In caso di esito positivo, sostituisce i valori predefiniti dei moduli Python specificati con quelli definiti in appengine_config.py.

Esempio di utilizzo in 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})

Ora puoi accedere alle costanti di un utente come:

_config.CONSTANT1
_config.CONSTANT2

e chiamare la funzione di hook come:

_config.hook_function1()

Ad alcuni programmatori piace raggruppare le impostazioni predefinite in un corso:

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

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

Per eseguire l'override delle impostazioni predefinite, un utente può definire in appengine_config.py:

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

Di conseguenza, in my_module.py si verificherà quanto segue:

  • _config.CONSTANT1 ora è 'foofoo'
  • _config.CONSTANT2 rimane 'bar'
  • _config.hook_function1() restituisce 'bazbaz'

Gli override utente sono disponibili per my_module.py subito dopo il reso di lib_config.register().