Configurazione del modulo Python 2

Il file appengine_config.py è un file di configurazione che consente di specificare la cartella di installazione per le librerie e di fornire valori personalizzati per le costanti e le funzioni "hook" per alcuni moduli Python nei pacchetti google.appengine. Specificando valori personalizzati 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 app.yaml ed eseguirne il deployment con il resto del codice dell'app.

Configurazione di moduli Python con appengine_config.py

Diversi moduli Python in App Engine possono essere configurati utilizzando appengine_config.py.

Per personalizzare i moduli Python dei servizi, devi creare un nuovo file appengine_config.py nella directory principale di quel servizio. Per utilizzare questo file, devi definire solo le costanti o le funzioni di hook che vuoi sostituire. Esegui quindi gcloud app deploy dalla directory in cui si trova il file app.yaml per rieseguire il deployment dell'app insieme al nuovo file appengine_config.py. Le costanti e le funzioni di hook definite verranno quindi utilizzate internamente da tali servizi di App Engine.

Per sostituire una costante, anteponi al nome della costante il nome del modulo Python e il trattino basso, quindi assegna un valore. Ad esempio, per modificare le sostituzioni in appstats, puoi definire il valore di KEY_PREFIX.

appstats_KEY_PREFIX = '__my_custom_prefix__'

La denominazione delle funzioni di hook sostituite è simile in altri moduli Python. Ad esempio, in space_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 in minuscolo e le costanti sono maiuscole:

namespace_manager
    (nome spazio gestore)
  • default_namespace_for_request() (restituzione predefinita: None)

appstat

datastore_admin

  • BASE_PATH ('/_ah/datastore_admin' predefinita)
  • MAPREDUCE_PATH ('/_ah/mapreduce' predefinita)
  • CLEANUP_MAPREDUCE_STATE (True predefinita)

remoteapi

Configurazione dei tuoi moduli Python con lib_config

App Engine consente inoltre di configurare i propri moduli Python con costanti e funzioni di hook definite in appengine_config.py. La funzione lib_config.register() consente di registrare i nomi delle costanti e degli hook sostituibili dall'utente e di definire impostazioni predefinite sensibili nel caso in cui gli utenti non vogliano eseguirne l'override. 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 hook come:

_config.hook_function1()

Alcuni programmatori raggruppano 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 sostituire i valori predefiniti, 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'

Le sostituzioni dell'utente sono disponibili per my_module.py subito dopo la restituzione di lib_config.register().