model.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. '''
  2. @author: olivier.massot, févr. 2018
  3. '''
  4. class Model():
  5. """ Modèle de données d'un objet """
  6. _FIELDS = []
  7. def __init__(self):
  8. """ Génère un objet vide,
  9. les propriétés de l'objet sont générées automatiquement à partir de la variable de classe _FIELDS"""
  10. for fld in self._FIELDS:
  11. setattr(self, fld, None)
  12. def __repr__(self):
  13. return "<{} => {}>".format(self.__class__.__name__, ",".join(["{}={}".format(field, getattr(self, field)) for field in self._FIELDS]))
  14. @classmethod
  15. def from_dict(cls, data):
  16. """ Retourne un objet à partir d'un dictionnaire de données """
  17. facture = cls()
  18. for key, value in data.items():
  19. setattr(facture, key, value)
  20. return facture
  21. def to_csv(self):
  22. """ Renvoie une chaine de caractère correspondant aux données de l'objet au format CSV
  23. Séparateur = tabulation (car c'est un caractère interdit dans Access) """
  24. return "\t".join([str(getattr(self, field)).replace("\t", " ") for field in self._FIELDS] + ["\n"])
  25. @classmethod
  26. def from_csv(cls, line):
  27. """ Retourne un objet Facture à partir d'une ligne de texte au format CSV
  28. Séparateur = tabulation (car c'est un caractère interdit dans Access) """
  29. return cls.from_dict(dict(zip(cls._FIELDS, line.split("\t"))))