Comment rendre les variables du code persistantes à travers le temps et les pannes de courants en passant par les crashs d'application ?
Cette problématique fut mise en avant lors du développement d'ECS, un framework e-commerce écrit en Python, au sein d'Emencia, société de services en logiciels libres.
Les modules Python pickle et cPickle servent à cela, mais leurs mise en place de manière générique peuvent être coûteuse et de plus comment centraliser des centaines d'objets à un moment T donné ?
ECS grâce au projet SQLAchemy, supporte tous types de bases données et fournis en plus un tas de fonctions pour manipuler des tables en base de donnée à partir d'un modèle de code. C'est donc à partir de la que fût développé le modèle de persistance.
Le modèle de persistance écrit pour ECS, fournit donc les outils pour effectuer la sauvegarde de tout objet instancié au sein de Python. Il contient en plus une implémentation rapide par méta-classe pour accélérer l'intégration au sein du code.
Voici un exemple d'implémentation de classe persistante, prenons l'exemple d'un chat :
from persistency import PersistentClass class Cat(object): __metaclass__ = PersistentClass age = None name = None def __init__(self, name='', age=-1): self.age = age self.name = name if self.age == -1: self.load() else: self.save() def database(cls): return 'sqlite:///:memory:' Cat._sqluri_callback = database
Nous allons donc créer un chat du nom de Felix âgé de 8 ans.
felix = Cat('Felix', 8) # Roooh il est ...