Konfiguration Python 2-Modul

Die Datei appengine_config.py ist eine Konfigurationsdatei, in der Sie den Installationsordner für Bibliotheken angeben können. Außerdem können Sie eigene Werte für Konstanten und „Hook-Funktionen“ einiger der Python-Module in google.appengine-Paketen angeben. Wenn Sie eigene Werte angeben, können Sie das Standardverhalten der betroffenen App Engine-Dienste entsprechend den Anforderungen der Anwendung ändern. Sie legen diese Datei zusammen mit Ihrer app.yaml-Konfigurationsdatei fest und stellen sie mit dem restlichen Code Ihrer Anwendung bereit.

Python-Module mit appengine_config.py konfigurieren

Mit appengine_config.py können verschiedene Python-Module in App Engine konfiguriert werden.

Erstellen Sie im Stammverzeichnis Ihres Diensts eine neue Datei appengine_config.py, um die zugehörigen Python-Module anzupassen. Sie müssen lediglich die Konstanten oder Hook-Funktionen definieren, die Sie überschreiben möchten, um diese Datei zu verwenden. Anschließend führen Sie gcloud app deploy aus dem Verzeichnis aus, in dem sich die Datei app.yaml befindet, um Ihre Anwendung zusammen mit der neuen Datei appengine_config.py noch einmal bereitzustellen. Die definierten Konstanten und Hook-Funktionen werden dann von diesen App Engine-Diensten intern verwendet.

Stellen Sie dem Namen einer Konstante den Python-Modulnamen sowie einen Unterstrich voran und weisen Sie einen Wert zu, um die Konstante zu überschreiben. Wenn Sie zum Beispiel Überschreibungen in AppStats bearbeiten möchten, können Sie den Wert von KEY_PREFIX definieren:

appstats_KEY_PREFIX = '__my_custom_prefix__'

Das Benennen von überschriebenen Hook-Funktionen erfolgt in anderen Python-Modulen auf ähnliche Weise. Zum Beispiel können Sie in namespace_manager die Hook-Funktion default_namespace_for_request in appengine_config.py so überschreiben:

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

Konfigurierbare Python-Module in App Engine

Die unten aufgeführten Python-Module sind mit appengine_config.py konfigurierbar. Konventionsgemäß werden Hook-Funktionen in Kleinbuchstaben und Konstanten in Großbuchstaben geschrieben:

namespace_manager
  • default_namespace_for_request() (Standard gibt None zurück)

appstats

datastore_admin

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

remoteapi

Eigene Python-Module mit lib_config konfigurieren

Mit App Engine können Sie auch Ihre eigenen Python-Module mit Konstanten und Hook-Funktionen konfigurieren, die in appengine_config.py definiert sind. Mit der Funktion lib_config.register() lassen sich sowohl die Namen der vom Nutzer überschreibbaren Konstanten und Hook-Funktionen registrieren als auch sinnvolle Standardwerte definieren, falls die Nutzer sie nicht überschreiben möchten. lib_config.register() versucht intern, appengine_config zu importieren. Bei Erfolg werden die Standardwerte der angegebenen Python-Module durch die in appengine_config.py definierten Werte ersetzt.

Beispielverwendung 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})

Nun können Sie auf die folgenden Konstanten eines Nutzers zugreifen:

_config.CONSTANT1
_config.CONSTANT2

Und Sie können folgende Hook-Funktion aufrufen:

_config.hook_function1()

Einige Programmierer gruppieren Standardwerte gern zu einer Klasse:

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

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

Ein Nutzer könnte in appengine_config.py Folgendes definieren, um Ihre Standardwerte zu überschreiben:

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

Damit gilt in my_module.py Folgendes:

  • _config.CONSTANT1 ist jetzt 'foofoo'
  • _config.CONSTANT2 bleibt 'bar'
  • _config.hook_function1() gibt 'bazbaz' zurück

Überschreibungen durch Nutzer sind in my_module.py sofort verfügbar, nachdem lib_config.register() zurückgegeben wurde.