La compatibilité de Python 2 n'est plus assurée par la communauté. Nous vous recommandons de migrer les applications Python 2 vers Python 3.

Configuration du module Python 2

Le fichier appengine_config.py est un fichier de configuration qui vous permet de spécifier le dossier d'installation des bibliothèques et de fournir vos propres valeurs pour les constantes et les "fonctions de hook" utilisées 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. Ce fichier doit se trouver au même niveau que le fichier de configuration app.yaml et être déployé avec le reste du code de votre application.

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 redéfinir la valeur de KEY_PREFIX du module appstats, on écrira :

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, vous pouvez redéfinir la fonction de hook default_namespace_for_request de namespace_manager en écrivant les lignes suivantes dans le fichier appengine_config.py :

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 vous 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 de déclarer les noms des constantes et des hooks pouvant être redéfinis par les utilisateurs, et de définir des valeurs par défaut acceptables dans le cas où les utilisateurs ne souhaitent pas les redéfinir. En interne, lib_config.register() tente d'importer 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 le fichier appengine_config.py.

Exemple d'utilisation dans un fichier 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 les valeurs suivantes dans le fichier appengine_config.py :

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

En tenant compte de ces redéfinitions, les valeurs dans le fichier my_module.py seront les suivantes :

  • _config.CONSTANT1 vaut désormais 'foofoo'.
  • _config.CONSTANT2 reste inchangé et vaut '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().