Coverage for models\account.py: 65%
Shortcuts on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2Clase Account
3"""
4import logging
5from sqlalchemy.sql import func
6from models import db
8logger = logging.getLogger()
11class DataValidationError(Exception):
12 """Utilizada para errores de validación de datos al deserializar"""
15class Account(db.Model):
16 """Clase que representa una Cuenta"""
18 id = db.Column(db.Integer, primary_key=True)
19 name = db.Column(db.String(64))
20 email = db.Column(db.String(64))
21 phone_number = db.Column(db.String(32), nullable=True)
22 disabled = db.Column(db.Boolean(), nullable=False, default=False)
23 date_joined = db.Column(db.Date, nullable=False, server_default=func.now())
25 def __repr__(self):
26 return '<Account %r>' % self.name
28 def to_dict(self) -> dict:
29 """Serializa la clase como un diccionario"""
30 return {c.name: getattr(self, c.name) for c in self.__table__.columns}
32 def from_dict(self, data: dict) -> None:
33 """Establece atributos desde un diccionario"""
34 for key, value in data.items():
35 setattr(self, key, value)
37 def create(self):
38 """Crea una cuenta en la base de datos"""
39 logger.info("Creando %s", self.name)
40 db.session.add(self)
41 db.session.commit()
43 def update(self):
44 """Actualiza una cuenta en la base de datos"""
45 logger.info("Guardando %s", self.name)
46 if not self.id:
47 raise DataValidationError("Se llamó a update sin un ID")
48 db.session.commit()
50 def delete(self):
51 """Elimina una cuenta de la base de datos"""
52 logger.info("Eliminando %s", self.name)
53 db.session.delete(self)
54 db.session.commit()
56 ##################################################
57 # Métodos de clase
58 ##################################################
60 @classmethod
61 def all(cls) -> list:
62 """Devuelve todas las cuentas en la base de datos"""
63 logger.info("Procesando todas las cuentas")
64 return cls.query.all()
66 @classmethod
67 def find(cls, account_id: int):
68 """Encuentra una cuenta por su ID
69 :param account_id: el id de la cuenta que se quiere encontrar
70 :type account_id: int
71 :return: una instancia con el account_id o None si no se encuentra
72 :rtype: Account
73 """
74 logger.info("Buscando cuenta con id %s ...", account_id)
75 return cls.query.get(account_id)