Showing
4 changed files
with
69 additions
and
12 deletions
| ... | @@ -7,11 +7,14 @@ from aiocache import Cache | ... | @@ -7,11 +7,14 @@ from aiocache import Cache |
| 7 | 7 | ||
| 8 | 8 | ||
| 9 | REDIS_CONN = open('./docs/redis').read().strip() | 9 | REDIS_CONN = open('./docs/redis').read().strip() |
| 10 | +REDIS_PASS, REDIS_CONN = REDIS_CONN.split('@') | ||
| 10 | REDIS_CONN = REDIS_CONN.split(':') | 11 | REDIS_CONN = REDIS_CONN.split(':') |
| 11 | cache = Cache( | 12 | cache = Cache( |
| 12 | Cache.REDIS, | 13 | Cache.REDIS, |
| 13 | - endpoint=REDIS_CONN[0], port=REDIS_CONN[1], | 14 | + endpoint=REDIS_CONN[0], |
| 14 | - namespace='httpcache' | 15 | + port=REDIS_CONN[1], |
| 16 | + password=REDIS_PASS.strip(' :'), | ||
| 17 | + namespace='httpcache', | ||
| 15 | ) | 18 | ) |
| 16 | # cache = Cache() | 19 | # cache = Cache() |
| 17 | 20 | ... | ... |
| ... | @@ -41,3 +41,20 @@ class ProyectoResumenes(Base): | ... | @@ -41,3 +41,20 @@ class ProyectoResumenes(Base): |
| 41 | objeto: Mapped[str] = mapped_column(Text) | 41 | objeto: Mapped[str] = mapped_column(Text) |
| 42 | finfun: Mapped[str] = mapped_column(Text) | 42 | finfun: Mapped[str] = mapped_column(Text) |
| 43 | acteco: Mapped[str] = mapped_column(Text) | 43 | acteco: Mapped[str] = mapped_column(Text) |
| 44 | + | ||
| 45 | + | ||
| 46 | +class ProyectoClasificadores(Base): | ||
| 47 | + __tablename__ = "proyecto_clasificadores" | ||
| 48 | + | ||
| 49 | + gestion: Mapped[int] = mapped_column(Integer) | ||
| 50 | + tipo: Mapped[str] = mapped_column(String(16)) | ||
| 51 | + nivel: Mapped[str] = mapped_column(String(24)) | ||
| 52 | + programa_proyecto: Mapped[str] = mapped_column(String(32)) | ||
| 53 | + | ||
| 54 | + codigo: Mapped[str] = mapped_column(String(32)) | ||
| 55 | + codigo_padre: Mapped[str | None] = mapped_column(String(32)) | ||
| 56 | + | ||
| 57 | + devengado: Mapped[float] = mapped_column(Numeric(30, 15)) | ||
| 58 | + | ||
| 59 | + desc: Mapped[str] = mapped_column(Text) | ||
| 60 | + desc_padre: Mapped[str | None] = mapped_column(Text) | ... | ... |
| ... | @@ -41,7 +41,7 @@ def fetch_programa_proyecto( | ... | @@ -41,7 +41,7 @@ def fetch_programa_proyecto( |
| 41 | return project_items | 41 | return project_items |
| 42 | 42 | ||
| 43 | 43 | ||
| 44 | -@router.get('/{project_id}/proyectos') | 44 | +@router.get('/{project_id}/proyectos', response_model=List[schemas.project.ProyectoProyectos]) |
| 45 | @not_found | 45 | @not_found |
| 46 | def fetch_programa_proyecto_proyectos( | 46 | def fetch_programa_proyecto_proyectos( |
| 47 | project_id: str, | 47 | project_id: str, |
| ... | @@ -71,31 +71,55 @@ def fetch_programa_proyecto_proyectos( | ... | @@ -71,31 +71,55 @@ def fetch_programa_proyecto_proyectos( |
| 71 | ).mappings().all() | 71 | ).mappings().all() |
| 72 | 72 | ||
| 73 | 73 | ||
| 74 | -@router.get('/{project_id}/objetos') | 74 | +@router.get('/{project_id}/objetos', response_model=List[schemas.project.ProyectoClasificadores]) |
| 75 | -@not_found | ||
| 76 | def fetch_programa_proyecto_objetos( | 75 | def fetch_programa_proyecto_objetos( |
| 77 | project_id: int, | 76 | project_id: int, |
| 78 | db: Session = Depends(model.get_db), | 77 | db: Session = Depends(model.get_db), |
| 79 | query: schema.QueryParams = Depends(), | 78 | query: schema.QueryParams = Depends(), |
| 80 | ): | 79 | ): |
| 81 | - return [] | 80 | + return get_clasificadores(db, 'objeto', project_id, query) |
| 82 | 81 | ||
| 83 | 82 | ||
| 84 | -@router.get('/{project_id}/finfuns') | 83 | +@router.get('/{project_id}/finfuns', response_model=List[schemas.project.ProyectoClasificadores]) |
| 85 | -@not_found | ||
| 86 | def fetch_programa_proyecto_finfuns( | 84 | def fetch_programa_proyecto_finfuns( |
| 87 | project_id: int, | 85 | project_id: int, |
| 88 | db: Session = Depends(model.get_db), | 86 | db: Session = Depends(model.get_db), |
| 89 | query: schema.QueryParams = Depends(), | 87 | query: schema.QueryParams = Depends(), |
| 90 | ): | 88 | ): |
| 91 | - return [] | 89 | + return get_clasificadores(db, 'finfun', project_id, query) |
| 92 | 90 | ||
| 93 | 91 | ||
| 94 | -@router.get('/{project_id}/actecos') | 92 | +@router.get('/{project_id}/actecos', response_model=List[schemas.project.ProyectoClasificadores]) |
| 95 | -@not_found | ||
| 96 | def fetch_programa_proyecto_actecos( | 93 | def fetch_programa_proyecto_actecos( |
| 97 | project_id: int, | 94 | project_id: int, |
| 98 | db: Session = Depends(model.get_db), | 95 | db: Session = Depends(model.get_db), |
| 99 | query: schema.QueryParams = Depends(), | 96 | query: schema.QueryParams = Depends(), |
| 100 | ): | 97 | ): |
| 101 | - return [] | 98 | + return get_clasificadores(db, 'acteco', project_id, query) |
| 99 | + | ||
| 100 | + | ||
| 101 | +############################################################################### | ||
| 102 | +# private | ||
| 103 | +############################################################################### | ||
| 104 | + | ||
| 105 | +@not_found | ||
| 106 | +def get_clasificadores(db, tipo_codigo, programa_proyecto, query): | ||
| 107 | + page_size = 10 | ||
| 108 | + page = query.page or 1 | ||
| 109 | + | ||
| 110 | + ProyectoClasificadoresSchema = schemas.project.ProyectoClasificadores | ||
| 111 | + ProyectoClasificadores = models.project.ProyectoClasificadores | ||
| 112 | + | ||
| 113 | + schema_fields = ProyectoClasificadoresSchema.model_fields.keys() | ||
| 114 | + cols = [getattr(ProyectoClasificadores, name) for name in schema_fields] | ||
| 115 | + | ||
| 116 | + filters = [ | ||
| 117 | + ProyectoClasificadores.tipo == tipo_codigo, | ||
| 118 | + ProyectoClasificadores.programa_proyecto == programa_proyecto, | ||
| 119 | + ] | ||
| 120 | + if query.gestion is not None: | ||
| 121 | + filters.append(ProyectoClasificadores.gestion == query.gestion) | ||
| 122 | + | ||
| 123 | + return select(*cols).where(*filters).offset( | ||
| 124 | + (page - 1) * page_size | ||
| 125 | + ).limit(page_size).mappings().all() | ... | ... |
| ... | @@ -26,10 +26,23 @@ class ProyectoResumen(OrmBaseModel): | ... | @@ -26,10 +26,23 @@ class ProyectoResumen(OrmBaseModel): |
| 26 | acteco: str | List[ProyectoResumenObj] | 26 | acteco: str | List[ProyectoResumenObj] |
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | +class ProyectoClasificadores(OrmBaseModel): | ||
| 30 | + gestion: int | ||
| 31 | + tipo: str | ||
| 32 | + nivel: str | ||
| 33 | + programa_proyecto: str | ||
| 34 | + codigo: str | ||
| 35 | + codigo_padre: str | None | ||
| 36 | + devengado: float | ||
| 37 | + desc: str | ||
| 38 | + desc_padre: str | None | ||
| 39 | + | ||
| 40 | + | ||
| 29 | class ProyectoProyectos(OrmBaseModel): | 41 | class ProyectoProyectos(OrmBaseModel): |
| 30 | nivel: str | 42 | nivel: str |
| 31 | codigo: str | 43 | codigo: str |
| 32 | desc: str | 44 | desc: str |
| 45 | + devengado: float | ||
| 33 | 46 | ||
| 34 | 47 | ||
| 35 | class ProjectSearch(BaseModel): | 48 | class ProjectSearch(BaseModel): | ... | ... |
-
Please register or login to post a comment