Classe Expando

Remarque : Les développeurs qui créent des applications sont vivement encouragés à utiliser la bibliothèque cliente NDB, qui présente plusieurs avantages par rapport à cette bibliothèque cliente, tels que la mise en cache automatique des entités via l'API Memcache. Si vous utilisez actuellement l'ancienne bibliothèque cliente DB, consultez le guide de migration de la bibliothèque cliente DB vers NDB.

La classe Expando est une superclasse de définitions de modèles de données dont les propriétés sont déterminées dynamiquement. Un modèle Expando peut combiner des propriétés fixes semblables à celles d'une classe Model et des propriétés dynamiques attribuées à une entité au moment de l'exécution.

Expando est fourni par le module google.appengine.ext.db.

La classe Expando est une sous-classe de Model et hérite de cette classe et de ses méthodes d'instances. La classe Expando ne définit ni ne remplace aucune méthode.

Présentation

Un modèle Expando peut avoir des propriétés fixes et des propriétés dynamiques. Les propriétés fixes se comportent de la même manière que les propriétés d'une classe Model et sont également définies dans la classe de modèle Expando à l'aide d'attributs de classe. Les propriétés dynamiques sont créées lorsque l'application leur affecte des valeurs sur l'instance. Deux instances de la même classe Expando peuvent comporter des ensembles de propriétés dynamiques distincts, et des propriétés dynamiques de même nom mais de types différents. Les propriétés dynamiques sont toujours facultatives et ne possèdent aucune valeur par défaut : elles n'existent pas tant qu'une valeur ne leur est pas affectée.

Les propriétés dynamiques ne peuvent pas utiliser les instances Propriété pour effectuer une validation, définir des valeurs par défaut ou appliquer une logique automatique aux valeurs. Les propriétés dynamiques stockent tout simplement des valeurs correspondant aux types pris en charge par le datastore. Consultez la section Types et classes de propriétés.

En outre, contrairement aux propriétés fixes, les propriétés dynamiques ne peuvent pas utiliser un nom différent pour l'attribut de la classe et le nom de la propriété du datastore. Consultez la section Noms de propriétés interdits.

Conseil : Si vous souhaitez valider une valeur de propriété dynamique à l'aide d'une classe de propriété, vous pouvez instancier la classe de propriété et appeler sa méthode validate() sur la valeur.

Une sous-classe Expando peut définir des propriétés fixes semblables à celles d'une classe Model. Le comportement des propriétés fixes d'une classe Expando est semblable à celui des propriétés d'une classe Model. Une instance Expando peut comporter des propriétés fixes et des propriétés dynamiques.

import datetime

from google.appengine.ext import db

class Song(db.Expando):
    title = db.StringProperty()

crazy = Song(title='Crazy like a diamond',
             author='Lucy Sky',
             publish_date='yesterday',
             rating=5.0)

hoboken = Song(title='The man from Hoboken',
               author=['Anthony', 'Lou'],
               publish_date=datetime.datetime(1977, 5, 3))

crazy.last_minute_note=db.Text('Get a train to the station.')

Vous pouvez supprimer les propriétés dynamiques (non fixes) d'une instance Expando. Pour supprimer une propriété dynamique, une application supprime l'attribut de l'instance :

del crazy.last_minute_note

Constructeur

Le constructeur de la classe Expando est défini comme suit :

class Expando(parent=None, key_name=None, **kwds)

Classe Model dont les propriétés n'ont pas besoin d'être définies dans la classe avant utilisation. Tout comme la classe Model, la classe Expando doit être sous-classée pour définir le genre des entités de données.

La classe Expando est une sous-classe de Model, et hérite ou remplace ses méthodes.

Arguments

parent
Instance Model ou instance Key de l'entité représentant le parent de la nouvelle entité.
key_name

Nom de la nouvelle entité. Le nom fait partie de la clé primaire. Si aucun nom n'est indiqué (None), un ID généré par le système est utilisé pour la clé.

La valeur de key_name ne doit pas commencer par un nombre et ne doit pas se présenter au format __*__. Si l'application utilise des données soumises par l'utilisateur en tant que noms de clés d'entité Datastore (telles qu'une adresse électronique), elle doit d'abord nettoyer la valeur, par exemple en la préfixant d'une chaîne connue telle que "key:", pour satisfaire ces exigences.

Un key_name est stocké en tant que chaîne Unicode, avec les valeurs str converties en texte ASCII.

**kwds
Valeurs initiales des propriétés de l'instance, sous forme d'arguments à mots clés. Chaque nom correspond à un attribut de la nouvelle instance, et peut soit correspondre à des propriétés fixes définies dans la classe Expando, soit représenter des propriétés dynamiques.
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python