Configurazione del modulo Python 2

Il file appengine_config.py è un file di configurazione che ti consente di specificare la cartella di installazione delle librerie e di fornire i tuoi valori per le costanti e le "funzioni di hook" per alcuni dei moduli Python nei pacchetti google.appengine. Specificando i tuoi valori puoi cambiare il comportamento predefinito dei ai servizi App Engine correlati in base alle esigenze dell'applicazione. Lo definisci insieme al app.yaml file di configurazione e lo esegui 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, crei un nuovo file appengine_config.py nella directory radice di quel servizio. Per utilizzare questo file, devi definire solo le costanti o le funzioni di hook che vuoi sostituire. Quindi 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 di hook che da te definiti verranno usati internamente da quei servizi App Engine.

Per eseguire l'override di una costante, anteponi al nome della costante il nome del modulo Python e un'underscore, 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. Per esempio, in workspace_manager, puoi eseguire l'override della funzione hook default_namespace_for_request a 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 in maiuscolo:

namespace_manager
  • default_namespace_for_request() (resi predefiniti per None)

statistiche app

datastore_admin

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

remoteapi

Configurare i propri moduli Python con lib_config

App Engine ti consente inoltre di configurare i tuoi moduli Python con costanti e hook definite in appengine_config.py. La lib_config.register() consente di registrare la funzione nomi di costanti e hook modificabili dall'utente e per definire valori sensibili valori predefiniti nel caso in cui gli utenti non vogliano sostituirli. Internamente, lib_config.register() tentativi di importazione appengine_config. Se l'operazione ha esito positivo, sostituisce i valori predefiniti del moduli Python specificati con quelli definiti 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 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 sostituire le impostazioni predefinite, un utente può definire 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 utente sono disponibili per my_module.py immediatamente dopo il ritorno di lib_config.register().