| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- '''
- @author: olivier.massot, févr. 2018
- '''
- import logging
- logger = logging.getLogger("model")
- class Model():
- """ Modèle de données d'un objet """
- def __repr__(self):
- return "<{} => {}>".format(self.__class__.__name__, ",".join(["{}={}".format(field, getattr(self, field)) for field in self.__dict__]))
- class CsvModel(Model):
- """ Modèle de données d'un objet à stocker au format CSV """
- _FIELDS = []
- def __init__(self):
- """ Génère un objet vide,
- les propriétés de l'objet sont générées automatiquement à partir de la variable de classe _FIELDS"""
- for fld in self._FIELDS:
- setattr(self, fld, None)
- @classmethod
- def from_dict(cls, data):
- """ Retourne un objet à partir d'un dictionnaire de données """
- facture = cls()
- for key, value in data.items():
- setattr(facture, key, value)
- return facture
- def to_csv(self):
- """ Renvoie une chaine de caractère correspondant aux données de l'objet au format CSV
- Séparateur = tabulation (car c'est un caractère interdit dans Access) """
- return "\t".join([str(getattr(self, field)).replace("\t", " ") for field in self._FIELDS] + ["\n"])
- @classmethod
- def from_csv(cls, line):
- """ Retourne un objet Facture à partir d'une ligne de texte au format CSV
- Séparateur = tabulation (car c'est un caractère interdit dans Access) """
- return cls.from_dict(dict(zip(cls._FIELDS, line.split("\t"))))
- def dump(self, path):
- """ Ajoute les données du modèle au format CSV dans le fichier spécifié en paramètre.
- Créé le fichier s'il n'existe pas, avec une ligne d'en-tête """
- if not path.exists():
- logger.debug("Génère le fichier %s", path)
- firstline = "\t".join(self._FIELDS + ["\n"])
- with open(path, 'w+') as f:
- f.write(firstline)
- with open(path, 'a') as f:
- f.write(self.to_csv())
|