Configuration du module Python

Google App Engine fournit un mécanisme qui permet aux utilisateurs de spécifier leurs propres valeurs pour les constantes et les "fonctions de hook" à utiliser par certains modules Python des packages google appengine. La spécification de vos propres valeurs peut modifier le comportement par défaut des services App Engine associés en fonction des besoins de l'application. Le fichier appengine_config.py est celui dans lequel vous spécifiez ces constantes. Après avoir créé ce fichier, vous le déployez simplement avec votre autre code.

Configurer des modules Python avec appengine_config.py

Le fichier appengine_config.py permet de configurer plusieurs modules Python dans App Engine.

Pour personnaliser les modules Python de vos services, vous créez un nouveau fichier appengine_config.py dans le répertoire racine de ces services. Pour utiliser ce fichier, seules les constantes ou les fonctions de hook que vous souhaitez remplacer doivent être définies. Vous exécutez ensuite la commande gcloud app deploy à partir du répertoire où se trouve le fichier app.yaml afin de redéployer votre application avec le nouveau fichier appengine_config.py. Les constantes et les fonctions de hook que vous avez définies seront ensuite utilisées en interne par ces services App Engine.

Pour remplacer une constante, ajoutez à son nom un préfixe constitué du nom du module Python et d'un trait de soulignement, puis attribuez une valeur. Par exemple, pour modifier les remplacements dans appstats, vous pouvez définir la valeur de KEY_PREFIX.

appstats_KEY_PREFIX = '__my_custom_prefix__'

Le processus de dénomination des fonctions de hook remplacées est similaire dans les autres modules Python. Par exemple, dans namespace_manager, vous pouvez remplacer la fonction de hook default_namespace_for_request dans appengine_config.py comme suit :

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

Modules Python configurables dans App Engine

Le fichier appengine_config.py permet de configurer les modules Python répertoriés ci-dessous. Par convention, les fonctions de hook sont écrites en minuscules et les constantes en majuscules :

namespace_manager
  • default_namespace_for_request() (renvoie None par défaut)

appstats

datastore_admin

  • BASE_PATH ('/_ah/datastore_admin' par défaut)
  • MAPREDUCE_PATH ('/_ah/mapreduce' par défaut)
  • CLEANUP_MAPREDUCE_STATE (True par défaut)

remoteapi

Configurer vos propres modules Python avec lib_config

App Engine permet également de configurer vos propres modules Python avec des constantes et des fonctions de hook définies dans le fichier appengine_config.py. La fonction lib_config.register() vous permet à la fois d’enregistrer les noms des constantes et des hooks pouvant être remplacés par l’utilisateur, et de définir des valeurs par défaut acceptables si les utilisateurs ne souhaitent pas les remplacer. En interne, lib_config.register() tente d'importer le fichier appengine_config. En cas de succès, les valeurs par défaut des modules Python spécifiés sont remplacées par celles définies dans appengine_config.py.

Exemple d'utilisation dans 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})

Vous pouvez maintenant accéder aux constantes d'un utilisateur en tant que :

_config.CONSTANT1
_config.CONSTANT2

et appeler leur fonction de hook en tant que :

_config.hook_function1()

Certains programmeurs préfèrent regrouper leurs valeurs par défaut dans une classe, comme ceci :

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

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

Afin de remplacer vos valeurs par défaut, un utilisateur peut définir dans appengine_config.py les valeurs suivantes :

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

Par conséquent, dans my_module.py, les valeurs ci-dessous seront définies sur vrai :

  • _config.CONSTANT1 est maintenant 'foofoo'
  • _config.CONSTANT2 reste 'bar'
  • _config.hook_function1() renvoie 'bazbaz'

Les remplacements d’utilisateur sont disponibles dans my_module.py immédiatement après le renvoi de lib_config.register().

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python