Skip to content

Commit

Permalink
Merge pull request #12 from guivaloz/guivaloz/mapped
Browse files Browse the repository at this point in the history
guivaloz/mapped
  • Loading branch information
guivaloz authored Jul 8, 2024
2 parents 3a0a226 + 7dcd442 commit 8646b0e
Show file tree
Hide file tree
Showing 35 changed files with 296 additions and 207 deletions.
1 change: 1 addition & 0 deletions .gcloudignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*.xlsx

__pycache__/
/.idea
/.git
/.github
/.venv
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ poetry.lock
__pycache__/
*.egg-info/

/.idea/
/.venv/
/venv/
2 changes: 1 addition & 1 deletion lib/fastapi_pagination_custom_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class CustomPageParams(LimitOffsetParams):
"""

offset: int = Query(0, ge=0, description="Page offset")
limit: int = Query(10, ge=1, le=100, description="Page size limit")
limit: int = Query(50, ge=1, le=500, description="Page size limit")


T = TypeVar("T")
Expand Down
11 changes: 7 additions & 4 deletions lib/universal_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
"""

import re
from datetime import datetime

from hashids import Hashids
from sqlalchemy import Column, DateTime, String, func
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.sql.functions import now
from sqlalchemy.types import CHAR

from config.settings import get_settings

Expand All @@ -16,9 +19,9 @@
class UniversalMixin:
"""Columnas y métodos comunes a todas las tablas"""

creado = Column(DateTime, server_default=func.now(), nullable=False)
modificado = Column(DateTime, onupdate=func.now(), server_default=func.now())
estatus = Column(String(1), server_default="A", nullable=False)
creado: Mapped[datetime] = mapped_column(default=now())
modificado: Mapped[datetime] = mapped_column(default=now(), onupdate=now())
estatus: Mapped[str] = mapped_column(CHAR, default="A")

def encode_id(self):
"""Convertir el ID de entero a cadena"""
Expand Down
24 changes: 13 additions & 11 deletions perseo/core/autoridades/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
Autoridades, modelos
"""

from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from typing import List

from sqlalchemy import ForeignKey, String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from lib.database import Base
from lib.universal_mixin import UniversalMixin
Expand All @@ -16,20 +18,20 @@ class Autoridad(Base, UniversalMixin):
__tablename__ = "autoridades"

# Clave primaria
id = Column(Integer, primary_key=True)
id: Mapped[int] = mapped_column(primary_key=True)

# Claves foráneas
distrito_id = Column(Integer, ForeignKey("distritos.id"), index=True, nullable=False)
distrito = relationship("Distrito", back_populates="autoridades")
# Clave foránea
distrito_id: Mapped[int] = mapped_column(ForeignKey("distritos.id"))
distrito: Mapped["Distrito"] = relationship(back_populates="autoridades")

# Columnas
clave = Column(String(16), nullable=False, unique=True)
descripcion = Column(String(256), nullable=False)
descripcion_corta = Column(String(64), nullable=False)
es_extinto = Column(Boolean, nullable=False, default=False)
clave: Mapped[str] = mapped_column(String(16), unique=True)
descripcion: Mapped[str] = mapped_column(String(256))
descripcion_corta: Mapped[str] = mapped_column(String(64))
es_extinto: Mapped[bool] = mapped_column(default=False)

# Hijos
usuarios = relationship("Usuario", back_populates="autoridad")
usuarios: Mapped[List["Usuario"]] = relationship("Usuario", back_populates="autoridad")

def __repr__(self):
"""Representación"""
Expand Down
20 changes: 10 additions & 10 deletions perseo/core/bitacoras/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
Bitacoras, modelos
"""

from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy import ForeignKey, String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from lib.database import Base
from lib.universal_mixin import UniversalMixin
Expand All @@ -16,18 +16,18 @@ class Bitacora(Base, UniversalMixin):
__tablename__ = "bitacoras"

# Clave primaria
id = Column(Integer, primary_key=True)
id: Mapped[int] = mapped_column(primary_key=True)

# Claves foráneas
modulo_id = Column(Integer, ForeignKey("modulos.id"), index=True, nullable=False)
modulo = relationship("Modulo", back_populates="bitacoras")
usuario_id = Column(Integer, ForeignKey("usuarios.id"), index=True, nullable=False)
usuario = relationship("Usuario", back_populates="bitacoras")
modulo_id: Mapped[int] = mapped_column(ForeignKey("modulos.id"))
modulo: Mapped["Modulo"] = relationship(back_populates="bitacoras")
usuario_id: Mapped[int] = mapped_column(ForeignKey("usuarios.id"))
usuario: Mapped["Usuario"] = relationship(back_populates="bitacoras")

# Columnas
descripcion = Column(String(256), nullable=False)
url = Column(String(512), nullable=False)
descripcion: Mapped[str] = mapped_column(String(256))
url: Mapped[str] = mapped_column(String(512))

def __repr__(self):
"""Representación"""
return f"<Bitacora {self.creado} {self.descripcion}>"
return f"<Bitacora {self.id}>"
20 changes: 11 additions & 9 deletions perseo/core/distritos/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
Distritos, modelos
"""

from sqlalchemy import Boolean, Column, Integer, String
from sqlalchemy.orm import relationship
from typing import List

from sqlalchemy import String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from lib.database import Base
from lib.universal_mixin import UniversalMixin
Expand All @@ -16,17 +18,17 @@ class Distrito(Base, UniversalMixin):
__tablename__ = "distritos"

# Clave primaria
id = Column(Integer, primary_key=True)
id: Mapped[int] = mapped_column(primary_key=True)

# Columnas
clave = Column(String(16), nullable=False, unique=True)
nombre = Column(String(256), nullable=False, unique=True)
nombre_corto = Column(String(64), nullable=False)
es_distrito = Column(Boolean, nullable=False, default=False)
es_jurisdiccional = Column(Boolean, nullable=False, default=False)
clave: Mapped[str] = mapped_column(String(16), unique=True)
nombre: Mapped[str] = mapped_column(String(256), unique=True)
nombre_corto: Mapped[str] = mapped_column(String(64))
es_distrito: Mapped[bool] = mapped_column(default=False)
es_jurisdiccional: Mapped[bool] = mapped_column(default=False)

# Hijos
autoridades = relationship("Autoridad", back_populates="distrito")
autoridades: Mapped[List["Autoridad"]] = relationship("Autoridad", back_populates="distrito")

def __repr__(self):
"""Representación"""
Expand Down
26 changes: 11 additions & 15 deletions perseo/core/entradas_salidas/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@
Entradas-Salidas, modelos
"""

from collections import OrderedDict

from sqlalchemy import Column, Enum, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy import Enum, ForeignKey, String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from lib.database import Base
from lib.universal_mixin import UniversalMixin
Expand All @@ -14,26 +12,24 @@
class EntradaSalida(Base, UniversalMixin):
"""EntradaSalida"""

TIPOS = OrderedDict(
[
("INGRESO", "Ingresó"),
("SALIO", "Salió"),
]
)
TIPOS = {
"INGRESO": "Ingresó",
"SALIO": "Salió",
}

# Nombre de la tabla
__tablename__ = "entradas_salidas"

# Clave primaria
id = Column(Integer, primary_key=True)
id: Mapped[int] = mapped_column(primary_key=True)

# Claves foráneas
usuario_id = Column(Integer, ForeignKey("usuarios.id"), index=True, nullable=False)
usuario = relationship("Usuario", back_populates="entradas_salidas")
usuario_id: Mapped[int] = mapped_column(ForeignKey("usuarios.id"))
usuario: Mapped["Usuario"] = relationship(back_populates="entradas_salidas")

# Columnas
tipo = Column(Enum(*TIPOS, name="entradas_salidas_tipos", native_enum=False), index=True, nullable=False)
direccion_ip = Column(String(64), nullable=False)
tipo: Mapped[str] = mapped_column(Enum(*TIPOS, name="entradas_salidas_tipos", index=True))
direccion_ip: Mapped[str] = mapped_column(String(64))

def __repr__(self):
"""Representación"""
Expand Down
22 changes: 12 additions & 10 deletions perseo/core/modulos/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
Modulos, modelos
"""

from sqlalchemy import Boolean, Column, Integer, String
from sqlalchemy.orm import relationship
from typing import List

from sqlalchemy import String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from lib.database import Base
from lib.universal_mixin import UniversalMixin
Expand All @@ -16,18 +18,18 @@ class Modulo(Base, UniversalMixin):
__tablename__ = "modulos"

# Clave primaria
id = Column(Integer, primary_key=True)
id: Mapped[int] = mapped_column(primary_key=True)

# Columnas
nombre = Column(String(256), unique=True, nullable=False)
nombre_corto = Column(String(64), nullable=False)
icono = Column(String(48), nullable=False)
ruta = Column(String(64), nullable=False)
en_navegacion = Column(Boolean, nullable=False, default=True)
nombre: Mapped[str] = mapped_column(String(256), unique=True)
nombre_corto: Mapped[str] = mapped_column(String(64))
icono: Mapped[str] = mapped_column(String(48))
ruta: Mapped[str] = mapped_column(String(64))
en_navegacion: Mapped[bool] = mapped_column(default=False)

# Hijos
bitacoras = relationship("Bitacora", back_populates="modulo")
permisos = relationship("Permiso", back_populates="modulo")
bitacoras: Mapped[List["Bitacora"]] = relationship("Bitacora", back_populates="modulo")
permisos: Mapped[List["Permiso"]] = relationship("Permiso", back_populates="modulo")

def __repr__(self):
"""Representación"""
Expand Down
32 changes: 23 additions & 9 deletions perseo/core/nominas/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,18 @@
Nominas, modelos
"""

from sqlalchemy import Column, Date, Enum, ForeignKey, Integer
from sqlalchemy.orm import relationship
from datetime import date
from decimal import Decimal, getcontext
from typing import List, Optional

from sqlalchemy import Enum, ForeignKey, Integer, Numeric, String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from lib.database import Base
from lib.universal_mixin import UniversalMixin

getcontext().prec = 4 # Cuatro decimales en los cálculos monetarios


class Nomina(Base, UniversalMixin):
"""Nomina"""
Expand All @@ -24,19 +30,27 @@ class Nomina(Base, UniversalMixin):
__tablename__ = "nominas"

# Clave primaria
id = Column(Integer, primary_key=True)
id: Mapped[int] = mapped_column(primary_key=True)

# Clave foránea
persona_id = Column(Integer, ForeignKey("personas.id"), index=True, nullable=False)
persona = relationship("Persona", back_populates="nominas")
persona_id: Mapped[int] = mapped_column(ForeignKey("personas.id"))
persona: Mapped["Persona"] = relationship(back_populates="nominas")

# Columnas
fecha_pago = Column(Date(), nullable=False)
tipo = Column(Enum(*TIPOS, name="nominas_tipos"), nullable=False, index=True)
timbrado_id = Column(Integer()) # Pueder ser nulo o el ID del Timbrado
tipo: Mapped[str] = mapped_column(Enum(*TIPOS, name="nominas_tipos"), index=True)
desde: Mapped[date]
desde_clave: Mapped[str] = mapped_column(String(6))
hasta: Mapped[date]
hasta_clave: Mapped[str] = mapped_column(String(6))
percepcion: Mapped[Decimal] = mapped_column(Numeric(precision=24, scale=4))
deduccion: Mapped[Decimal] = mapped_column(Numeric(precision=24, scale=4))
importe: Mapped[Decimal] = mapped_column(Numeric(precision=24, scale=4))
num_cheque: Mapped[str] = mapped_column(String(24), default="", server_default="")
fecha_pago: Mapped[date]
timbrado_is: Mapped[Optional[int]] = mapped_column(Integer(), nullable=True)

# Hijos
timbrados = relationship("Timbrado", back_populates="nomina")
timbrados: Mapped[List["Timbrado"]] = relationship("Timbrado", back_populates="nomina")

@property
def persona_curp(self):
Expand Down
18 changes: 9 additions & 9 deletions perseo/core/permisos/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
Permisos, modelos
"""

from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy import ForeignKey, String
from sqlalchemy.orm import Mapped, mapped_column, relationship

from lib.database import Base
from lib.universal_mixin import UniversalMixin
Expand All @@ -28,17 +28,17 @@ class Permiso(Base, UniversalMixin):
__tablename__ = "permisos"

# Clave primaria
id = Column(Integer, primary_key=True)
id: Mapped[int] = mapped_column(primary_key=True)

# Claves foráneas
rol_id = Column(Integer, ForeignKey("roles.id"), index=True, nullable=False)
rol = relationship("Rol", back_populates="permisos")
modulo_id = Column(Integer, ForeignKey("modulos.id"), index=True, nullable=False)
modulo = relationship("Modulo", back_populates="permisos")
rol_id: Mapped[int] = mapped_column(ForeignKey("roles.id"))
rol: Mapped["Rol"] = relationship(back_populates="permisos")
modulo_id: Mapped[int] = mapped_column(ForeignKey("modulos.id"))
modulo: Mapped["Modulo"] = relationship(back_populates="permisos")

# Columnas
nombre = Column(String(256), nullable=False, unique=True)
nivel = Column(Integer(), nullable=False)
nombre: Mapped[str] = mapped_column(String(256), unique=True)
nivel: Mapped[int]

@property
def rol_nombre(self):
Expand Down
Loading

0 comments on commit 8646b0e

Please sign in to comment.