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:
-
default_namespace_for_request()
(restituisceNone
per impostazione predefinita)
- Vedi
class ConfigDefaults
in appengine/ext/appstats/recording.py - vedi un esempio in appengine/ext/appstats/sample_appengine_config.py
BASE_PATH
(valore predefinito:'/_ah/datastore_admin'
)MAPREDUCE_PATH
(valore predefinito:'/_ah/mapreduce'
)CLEANUP_MAPREDUCE_STATE
(valore predefinito:True
)
CUSTOM_ENVIRONMENT_AUTHENTICATION
- Vedi
class ConfigDefaults
in appengine/ext/remote_api/handler.py
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()
.