Persistence
3 06 2007
Comment rendre les variables du code persistentes à 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 etre 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 fut developpé le modèle de persistence.
Le modèle de persistence é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étaclasse pour accélérer l’intégration au sein du code.
Voici un exemple d’implémentation de classe persistente, prenons l’exemple d’un chat :
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 agé de 8 ans.
# Roooh il est beau ce chat !
Catégories : Développement





