Il file appengine_config.py è un file di configurazione che ti consente di specificare la
cartella di installazione per le librerie e di fornire i tuoi valori per le costanti e le "funzioni hook" per alcuni dei moduli Python nei pacchetti google.appengine.
La specifica di valori personalizzati può modificare il comportamento predefinito dei
servizi App Engine correlati in base alle esigenze dell'applicazione. Definisci questo file insieme al file di configurazione app.yaml e lo implementi 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,
crea un nuovo file appengine_config.py nella directory principale
del servizio. Per utilizzare questo file, devi definire solo le costanti o
le funzioni hook che vuoi sostituire. Quindi esegui gcloud app
deploy dalla directory in cui si trova il file app.yaml per eseguire di nuovo il deployment dell'app insieme al nuovo file appengine_config.py. Le costanti e le funzioni hook che hai definito verranno poi utilizzate internamente da questi servizi App Engine.
Per sostituire 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 sottoposte a override è simile in altri moduli Python. Ad esempio, in
namespace_manager, puoi eseguire l'override della funzione hook
default_namespace_for_request in appengine_config.py
nel seguente modo:
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 in maiuscolo:
-
default_namespace_for_request()(valore predefinito restituitoNone)
- vedi
class ConfigDefaultsin appengine/ext/appstats/recording.py - vedi l'esempio in appengine/ext/appstats/sample_appengine_config.py
BASE_PATH('/_ah/datastore_admin'predefinito)MAPREDUCE_PATH('/_ah/mapreduce'predefinito)CLEANUP_MAPREDUCE_STATE(Truepredefinito)
CUSTOM_ENVIRONMENT_AUTHENTICATION- vedi
class ConfigDefaultsin appengine/ext/remote_api/handler.py
Configurazione dei tuoi moduli Python con lib_config
App Engine ti consente anche di configurare i tuoi moduli Python con costanti
e funzioni hook definite in appengine_config.py. La
funzione lib_config.register() ti consente di registrare i nomi delle costanti e degli hook sostituibili dall'utente e di definire valori predefiniti ragionevoli nel caso in cui gli utenti non vogliano sostituirli. A livello interno,
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 chiama la relativa funzione di hook come segue:
_config.hook_function1()
Alcuni programmatori preferiscono raggruppare i valori predefiniti in una classe:
class _ConfigDefaults(object): CONSTANT1 = 'foo' CONSTANT2 = 'bar' def hook_function1(): return 'baz' _config = lib_config.register('my_module', _ConfigDefaults.__dict__)
Per ignorare 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.CONSTANT1ora è'foofoo'_config.CONSTANT2rimanenti'bar'_config.hook_function1()restituisce'bazbaz'
Gli override utente sono disponibili per my_module.py immediatamente
dopo il ritorno di lib_config.register().