Coverage for models\account.py: 98%
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 import Column, Integer, String, Boolean, Date
6from sqlalchemy.sql import func
7from models import db
9logger = logging.getLogger()
12class DataValidationError(Exception):
13 """Se utiliza para errores de validación de datos al deserializar"""
16class Account(db.Model):
17 """Clase que representa una Cuenta"""
19 __tablename__ = 'accounts' # Asegúrate de definir el nombre de la tabla
21 id = Column(Integer, primary_key=True)
22 name = Column(String(64), nullable=False)
23 email = Column(String(64), nullable=False, unique=True)
24 phone_number = Column(String(32), nullable=True)
25 disabled = Column(Boolean(), nullable=False, default=False)
26 date_joined = Column(Date, nullable=False, server_default=func.now())
28 def __repr__(self):
29 return f"<Account '{self.name}'>"
31 def to_dict(self) -> dict:
32 """Serializa la clase como un diccionario"""
33 return {c.name: getattr(self, c.name) for c in self.__table__.columns} 33 ↛ exitline 33 didn't run the dictionary comprehension on line 33
35 def from_dict(self, data: dict) -> None:
36 """Establece los atributos desde un diccionario"""
37 for key, value in data.items():
38 setattr(self, key, value)
40 def create(self):
41 """Crea una Cuenta en la base de datos"""
42 logger.info(f"Creando {self.name}")
43 db.session.add(self)
44 db.session.commit()
46 def update(self):
47 """Actualiza una Cuenta en la base de datos"""
48 logger.info(f"Guardando {self.name}")
49 if not self.id:
50 raise DataValidationError("Actualización llamada con campo ID vacío")
51 db.session.commit()
53 def delete(self):
54 """Elimina una Cuenta del almacén de datos"""
55 logger.info(f"Eliminando {self.name}")
56 db.session.delete(self)
57 db.session.commit()
59 ##################################################
60 # Métodos de clase
61 ##################################################
63 @classmethod
64 def all(cls) -> list:
65 """Devuelve todas las Cuentas en la base de datos"""
66 logger.info("Procesando todas las Cuentas")
67 stmt = db.select(cls)
68 return db.session.execute(stmt).scalars().all()
70 @classmethod
71 def find(cls, account_id: int):
72 """Encuentra una Cuenta por su ID
74 :param account_id: el id de la Cuenta a encontrar
75 :type account_id: int
76 :return: una instancia con el account_id, o None si no se encuentra
77 :rtype: Account
78 """
79 logger.info(f"Procesando búsqueda para id {account_id} ...")
80 return db.session.get(cls, account_id)