pr0nstar

XV

......@@ -7,11 +7,14 @@ from aiocache import Cache
REDIS_CONN = open('./docs/redis').read().strip()
REDIS_PASS, REDIS_CONN = REDIS_CONN.split('@')
REDIS_CONN = REDIS_CONN.split(':')
cache = Cache(
Cache.REDIS,
endpoint=REDIS_CONN[0], port=REDIS_CONN[1],
namespace='httpcache'
endpoint=REDIS_CONN[0],
port=REDIS_CONN[1],
password=REDIS_PASS.strip(' :'),
namespace='httpcache',
)
# cache = Cache()
......
......@@ -41,3 +41,20 @@ class ProyectoResumenes(Base):
objeto: Mapped[str] = mapped_column(Text)
finfun: Mapped[str] = mapped_column(Text)
acteco: Mapped[str] = mapped_column(Text)
class ProyectoClasificadores(Base):
__tablename__ = "proyecto_clasificadores"
gestion: Mapped[int] = mapped_column(Integer)
tipo: Mapped[str] = mapped_column(String(16))
nivel: Mapped[str] = mapped_column(String(24))
programa_proyecto: Mapped[str] = mapped_column(String(32))
codigo: Mapped[str] = mapped_column(String(32))
codigo_padre: Mapped[str | None] = mapped_column(String(32))
devengado: Mapped[float] = mapped_column(Numeric(30, 15))
desc: Mapped[str] = mapped_column(Text)
desc_padre: Mapped[str | None] = mapped_column(Text)
......
......@@ -41,7 +41,7 @@ def fetch_programa_proyecto(
return project_items
@router.get('/{project_id}/proyectos')
@router.get('/{project_id}/proyectos', response_model=List[schemas.project.ProyectoProyectos])
@not_found
def fetch_programa_proyecto_proyectos(
project_id: str,
......@@ -71,31 +71,55 @@ def fetch_programa_proyecto_proyectos(
).mappings().all()
@router.get('/{project_id}/objetos')
@not_found
@router.get('/{project_id}/objetos', response_model=List[schemas.project.ProyectoClasificadores])
def fetch_programa_proyecto_objetos(
project_id: int,
db: Session = Depends(model.get_db),
query: schema.QueryParams = Depends(),
):
return []
return get_clasificadores(db, 'objeto', project_id, query)
@router.get('/{project_id}/finfuns')
@not_found
@router.get('/{project_id}/finfuns', response_model=List[schemas.project.ProyectoClasificadores])
def fetch_programa_proyecto_finfuns(
project_id: int,
db: Session = Depends(model.get_db),
query: schema.QueryParams = Depends(),
):
return []
return get_clasificadores(db, 'finfun', project_id, query)
@router.get('/{project_id}/actecos')
@not_found
@router.get('/{project_id}/actecos', response_model=List[schemas.project.ProyectoClasificadores])
def fetch_programa_proyecto_actecos(
project_id: int,
db: Session = Depends(model.get_db),
query: schema.QueryParams = Depends(),
):
return []
return get_clasificadores(db, 'acteco', project_id, query)
###############################################################################
# private
###############################################################################
@not_found
def get_clasificadores(db, tipo_codigo, programa_proyecto, query):
page_size = 10
page = query.page or 1
ProyectoClasificadoresSchema = schemas.project.ProyectoClasificadores
ProyectoClasificadores = models.project.ProyectoClasificadores
schema_fields = ProyectoClasificadoresSchema.model_fields.keys()
cols = [getattr(ProyectoClasificadores, name) for name in schema_fields]
filters = [
ProyectoClasificadores.tipo == tipo_codigo,
ProyectoClasificadores.programa_proyecto == programa_proyecto,
]
if query.gestion is not None:
filters.append(ProyectoClasificadores.gestion == query.gestion)
return select(*cols).where(*filters).offset(
(page - 1) * page_size
).limit(page_size).mappings().all()
......
......@@ -26,10 +26,23 @@ class ProyectoResumen(OrmBaseModel):
acteco: str | List[ProyectoResumenObj]
class ProyectoClasificadores(OrmBaseModel):
gestion: int
tipo: str
nivel: str
programa_proyecto: str
codigo: str
codigo_padre: str | None
devengado: float
desc: str
desc_padre: str | None
class ProyectoProyectos(OrmBaseModel):
nivel: str
codigo: str
desc: str
devengado: float
class ProjectSearch(BaseModel):
......