pr0nstar

VIII

...@@ -41,7 +41,9 @@ app = FastAPI( ...@@ -41,7 +41,9 @@ app = FastAPI(
41 root_path='/api' 41 root_path='/api'
42 ) 42 )
43 app.include_router(project.router) 43 app.include_router(project.router)
44 -app.include_router(entity.router) 44 +app.include_router(entity.router_entidad)
45 +app.include_router(entity.router_ubigeo)
46 +app.include_router(entity.router_da)
45 app.include_router(classifier.router_objeto) 47 app.include_router(classifier.router_objeto)
46 app.include_router(classifier.router_acteco) 48 app.include_router(classifier.router_acteco)
47 app.include_router(classifier.router_finfun) 49 app.include_router(classifier.router_finfun)
......
...@@ -8,13 +8,16 @@ from sqlalchemy.orm import relationship as relationship_ ...@@ -8,13 +8,16 @@ from sqlalchemy.orm import relationship as relationship_
8 8
9 SQLALCHEMY_DATABASE_URL = open('./docs/postgres').read().strip() 9 SQLALCHEMY_DATABASE_URL = open('./docs/postgres').read().strip()
10 10
11 -engine = create_engine(SQLALCHEMY_DATABASE_URL) 11 +engine = create_engine(
12 + SQLALCHEMY_DATABASE_URL,
13 + pool_size=10,
14 + max_overflow=5,
15 +)
12 SessionLocal = sessionmaker( 16 SessionLocal = sessionmaker(
13 autocommit=False, 17 autocommit=False,
14 autoflush=False, 18 autoflush=False,
15 bind=engine, 19 bind=engine,
16 # pool_size=1, 20 # pool_size=1,
17 - #max_overflow=5
18 ) 21 )
19 22
20 Base = declarative_base() 23 Base = declarative_base()
...@@ -49,3 +52,7 @@ def update_from_schema(model, schema): ...@@ -49,3 +52,7 @@ def update_from_schema(model, schema):
49 for field, field_data in schema.dict().items(): 52 for field, field_data in schema.dict().items():
50 setattr(model, field, field_data) 53 setattr(model, field, field_data)
51 return model 54 return model
55 +
56 +
57 +def model_columns(model):
58 + return [col.label(col.key) for col in model.__table__.c]
......
...@@ -101,7 +101,7 @@ class ClasGeografico(ClasBase, Base): ...@@ -101,7 +101,7 @@ class ClasGeografico(ClasBase, Base):
101 101
102 ubigeo: Mapped[str] = mapped_column(Text, primary_key=True) 102 ubigeo: Mapped[str] = mapped_column(Text, primary_key=True)
103 103
104 - desc_departamento: Mapped[str] = mapped_column(String(12)) 104 + desc_departamento: Mapped[str] = mapped_column(String(18))
105 desc_ubigeo: Mapped[str | None] = mapped_column(Text) 105 desc_ubigeo: Mapped[str | None] = mapped_column(Text)
106 106
107 municipio_ubigeo: Mapped[int | None] = mapped_column(Integer) 107 municipio_ubigeo: Mapped[int | None] = mapped_column(Integer)
......
...@@ -44,7 +44,7 @@ class EjecucionClasificadores(Base): ...@@ -44,7 +44,7 @@ class EjecucionClasificadores(Base):
44 devengado: Mapped[float] = mapped_column(Numeric(30, 15)) 44 devengado: Mapped[float] = mapped_column(Numeric(30, 15))
45 45
46 padre: Mapped[str] = mapped_column(Text) 46 padre: Mapped[str] = mapped_column(Text)
47 - hijo: Mapped[str] = mapped_column(Text) 47 + hijo: Mapped[str | None] = mapped_column(Text)
48 48
49 49
50 class EjecucionEntidades(Base): 50 class EjecucionEntidades(Base):
...@@ -90,7 +90,9 @@ class Timeline(Base): ...@@ -90,7 +90,9 @@ class Timeline(Base):
90 90
91 class TimeSeries(Base): 91 class TimeSeries(Base):
92 __tablename__ = "diario_timeseries" 92 __tablename__ = "diario_timeseries"
93 - 93 + __table_args__ = (
94 + {"schema": "web"},
95 + )
94 id: Mapped[int] = mapped_column(Integer, primary_key=True) 96 id: Mapped[int] = mapped_column(Integer, primary_key=True)
95 97
96 fecha: Mapped[date] = mapped_column(Date) 98 fecha: Mapped[date] = mapped_column(Date)
......
1 from sqlalchemy.orm import Mapped, mapped_column 1 from sqlalchemy.orm import Mapped, mapped_column
2 -from presupuestov1.model import Base 2 +from presupuestov1.model import Base, model_columns
3 3
4 from sqlalchemy import ( 4 from sqlalchemy import (
5 Integer, 5 Integer,
...@@ -9,7 +9,7 @@ from sqlalchemy import ( ...@@ -9,7 +9,7 @@ from sqlalchemy import (
9 Index, 9 Index,
10 MetaData, 10 MetaData,
11 ) 11 )
12 -from sqlalchemy import and_, or_ 12 +from sqlalchemy import and_, or_, select
13 13
14 14
15 class TreemapObjeto(Base): 15 class TreemapObjeto(Base):
...@@ -115,4 +115,6 @@ def get_clas_entities(query_filters, db, query, ClassObject, object_id): ...@@ -115,4 +115,6 @@ def get_clas_entities(query_filters, db, query, ClassObject, object_id):
115 ids = or_([getattr(ClassObject, object_id) == _ for _ in ids]) 115 ids = or_([getattr(ClassObject, object_id) == _ for _ in ids])
116 query_filters.append(ids) 116 query_filters.append(ids)
117 117
118 - return db.query(ClassObject).filter(and_(*query_filters)).all() 118 + return db.execute(
119 + select(*model_columns(ClassObject)).where(and_(*query_filters))
120 + ).mappings().all()
......
...@@ -4,7 +4,7 @@ from typing import List, Any, Optional, Union ...@@ -4,7 +4,7 @@ from typing import List, Any, Optional, Union
4 4
5 from fastapi import APIRouter, Depends, Request, HTTPException, Body 5 from fastapi import APIRouter, Depends, Request, HTTPException, Body
6 from sqlalchemy.orm import Session 6 from sqlalchemy.orm import Session
7 -from sqlalchemy import and_, or_ 7 +from sqlalchemy import and_, or_, select
8 8
9 from presupuestov1 import model, schema, constant, schemas, models, search 9 from presupuestov1 import model, schema, constant, schemas, models, search
10 10
...@@ -26,10 +26,6 @@ router_finfun = APIRouter( ...@@ -26,10 +26,6 @@ router_finfun = APIRouter(
26 tags=['finfun'], 26 tags=['finfun'],
27 ) 27 )
28 28
29 -router_ubigeo = APIRouter(
30 - prefix='/ubigeo',
31 - tags=['ubigeo'],
32 -)
33 29
34 30
35 ############################################################################### 31 ###############################################################################
...@@ -51,11 +47,6 @@ def fetch_object_classifier(db: Session = Depends(model.get_db)): ...@@ -51,11 +47,6 @@ def fetch_object_classifier(db: Session = Depends(model.get_db)):
51 return _fetch_classifier('finfun', db) 47 return _fetch_classifier('finfun', db)
52 48
53 49
54 -@router_ubigeo.get('/clasificador', response_model=List[schemas.classifier.ClasGeografico])
55 -def fetch_object_classifier(db: Session = Depends(model.get_db)):
56 - return _fetch_classifier('ubigeo', db)
57 -
58 -
59 @router_objeto.get('/{object_id}', response_model=schemas.objeto.ClasObjetosEstados) 50 @router_objeto.get('/{object_id}', response_model=schemas.objeto.ClasObjetosEstados)
60 def fetch_objeto_estado( 51 def fetch_objeto_estado(
61 object_id: str, 52 object_id: str,
...@@ -84,13 +75,15 @@ def fetch_objeto_entidad( ...@@ -84,13 +75,15 @@ def fetch_objeto_entidad(
84 gestion = query.gestion or 0 75 gestion = query.gestion or 0
85 ClasObjetos = models.objeto.ObjetoEntidad 76 ClasObjetos = models.objeto.ObjetoEntidad
86 77
87 - return db.query(ClasObjetos).filter( 78 + return db.execute(
88 - ClasObjetos.objeto == object_id, 79 + select(*model.model_columns(ClasObjetos)).where(
89 - ClasObjetos.gestion == gestion 80 + ClasObjetos.objeto == object_id,
90 - ).all() 81 + ClasObjetos.gestion == gestion
82 + )
83 + ).mappings().all()
91 84
92 85
93 -@router_objeto.get('/{object_id}/entidades/map', response_model=List[schemas.treemap.TreemapObjeto]) 86 +@router_objeto.get('/{object_id}/entidades/map', response_model=List[schemas.treemap.TreemapObjetoSingle])
94 def fetch_objeto_treemap( 87 def fetch_objeto_treemap(
95 object_id: str, 88 object_id: str,
96 db: Session = Depends(model.get_db), 89 db: Session = Depends(model.get_db),
...@@ -119,11 +112,11 @@ def fetch_objeto_entidad_single( ...@@ -119,11 +112,11 @@ def fetch_objeto_entidad_single(
119 112
120 113
121 @router_acteco.get('/{acteco_id}', response_model=schemas.acteco.ClasActecoEstados) 114 @router_acteco.get('/{acteco_id}', response_model=schemas.acteco.ClasActecoEstados)
122 -def fetch_objeto_estado( 115 +def fetch_acteco_estado(
123 acteco_id: str, 116 acteco_id: str,
124 db: Session = Depends(model.get_db), 117 db: Session = Depends(model.get_db),
125 ): 118 ):
126 - ClasEstado = models.objeto.ActecoEstado 119 + ClasEstado = models.acteco.ActecoEstado
127 estados = db.query(ClasEstado).filter( 120 estados = db.query(ClasEstado).filter(
128 ClasEstado.acteco == acteco_id, 121 ClasEstado.acteco == acteco_id,
129 ).all() 122 ).all()
...@@ -146,13 +139,15 @@ def fetch_acteco_entidad( ...@@ -146,13 +139,15 @@ def fetch_acteco_entidad(
146 gestion = query.gestion or 0 139 gestion = query.gestion or 0
147 ClasObjetos = models.acteco.ActecoEntidad 140 ClasObjetos = models.acteco.ActecoEntidad
148 141
149 - return db.query(ClasObjetos).filter( 142 + return db.execute(
150 - ClasObjetos.acteco == acteco_id, 143 + select(*model.model_columns(ClasObjetos)).where(
151 - ClasObjetos.gestion == gestion 144 + ClasObjetos.acteco == acteco_id,
152 - ).all() 145 + ClasObjetos.gestion == gestion
146 + )
147 + ).mappings().all()
153 148
154 149
155 -@router_acteco.get('/{acteco_id}/entidades/map', response_model=List[schemas.treemap.TreemapActeco]) 150 +@router_acteco.get('/{acteco_id}/entidades/map', response_model=List[schemas.treemap.TreemapActecoSingle])
156 def fetch_acteco_treemap( 151 def fetch_acteco_treemap(
157 acteco_id: str, 152 acteco_id: str,
158 db: Session = Depends(model.get_db), 153 db: Session = Depends(model.get_db),
...@@ -209,13 +204,15 @@ def fetch_finfun_entidad( ...@@ -209,13 +204,15 @@ def fetch_finfun_entidad(
209 gestion = query.gestion or 0 204 gestion = query.gestion or 0
210 ClasObjetos = models.finfun.FinfunEntidad 205 ClasObjetos = models.finfun.FinfunEntidad
211 206
212 - return db.query(ClasObjetos).filter( 207 + return db.execute(
213 - ClasObjetos.finfun == finfun_id, 208 + select(*model.model_columns(ClasObjetos)).where(
214 - ClasObjetos.gestion == gestion 209 + ClasObjetos.finfun == finfun_id,
215 - ).all() 210 + ClasObjetos.gestion == gestion
211 + )
212 + ).mappings().all()
216 213
217 214
218 -@router_finfun.get('/{finfun_id}/entidades/map', response_model=List[schemas.treemap.TreemapFinFun]) 215 +@router_finfun.get('/{finfun_id}/entidades/map', response_model=List[schemas.treemap.TreemapFinFunSingle])
219 def fetch_finfun_treemap( 216 def fetch_finfun_treemap(
220 finfun_id: str, 217 finfun_id: str,
221 db: Session = Depends(model.get_db), 218 db: Session = Depends(model.get_db),
...@@ -228,6 +225,7 @@ def fetch_finfun_treemap( ...@@ -228,6 +225,7 @@ def fetch_finfun_treemap(
228 ], db, query, Treemap, 'entidad' 225 ], db, query, Treemap, 'entidad'
229 ) 226 )
230 227
228 +
231 @router_finfun.get('/{finfun_id}/entidades/{entidad_id}', response_model=List[schemas.finfun.FinfunEntidad]) 229 @router_finfun.get('/{finfun_id}/entidades/{entidad_id}', response_model=List[schemas.finfun.FinfunEntidad])
232 def fetch_finfun_entidad_single( 230 def fetch_finfun_entidad_single(
233 finfun_id: str, 231 finfun_id: str,
...@@ -242,15 +240,16 @@ def fetch_finfun_entidad_single( ...@@ -242,15 +240,16 @@ def fetch_finfun_entidad_single(
242 ClasObjetos.entidad == entidad_id 240 ClasObjetos.entidad == entidad_id
243 ).all() 241 ).all()
244 242
243 +
245 ############################################################################### 244 ###############################################################################
246 # priv 245 # priv
247 ############################################################################### 246 ###############################################################################
248 247
249 def _fetch_classifier(clas, db): 248 def _fetch_classifier(clas, db):
250 - ClassObject = { 249 + ClasObject = {
251 'objeto': models.classifier.ClasObjetos, 250 'objeto': models.classifier.ClasObjetos,
252 'acteco': models.classifier.ClasActeco, 251 'acteco': models.classifier.ClasActeco,
253 'finfun': models.classifier.ClasFinfun, 252 'finfun': models.classifier.ClasFinfun,
254 'ubigeo': models.classifier.ClasGeografico, 253 'ubigeo': models.classifier.ClasGeografico,
255 }[clas] 254 }[clas]
256 - return db.query(ClassObject).all() 255 + return db.query(ClasObject).all()
......
...@@ -40,7 +40,7 @@ def fetch_clasificadores( ...@@ -40,7 +40,7 @@ def fetch_clasificadores(
40 if query.dias is not None: 40 if query.dias is not None:
41 filters.append(Daily.dias == query.dias) 41 filters.append(Daily.dias == query.dias)
42 42
43 - return db.query(Daily).filter(*filters).all() 43 + return db.query(Daily).filter(*filters).order_by(Daily.devengado.desc()).all()
44 44
45 45
46 @router.get('/entidades', response_model=List[schemas.daily.EjecucionEntidades]) 46 @router.get('/entidades', response_model=List[schemas.daily.EjecucionEntidades])
...@@ -61,7 +61,7 @@ def fetch_entidades( ...@@ -61,7 +61,7 @@ def fetch_entidades(
61 if query.entidad is not None: 61 if query.entidad is not None:
62 filters.append(Daily.entidad == query.entidad) 62 filters.append(Daily.entidad == query.entidad)
63 63
64 - return db.query(Daily).filter(*filters).offset( 64 + return db.query(Daily).filter(*filters).order_by(Daily.devengado.desc()).offset(
65 (page - 1) * page_size 65 (page - 1) * page_size
66 ).limit(page_size).all() 66 ).limit(page_size).all()
67 67
......
...@@ -2,9 +2,9 @@ import time ...@@ -2,9 +2,9 @@ import time
2 2
3 from typing import List, Any, Optional, Union 3 from typing import List, Any, Optional, Union
4 4
5 -from fastapi import APIRouter, Depends, Request, HTTPException, Body 5 +from fastapi import APIRouter, Depends, Request, HTTPException, Body, Response
6 from sqlalchemy.orm import Session 6 from sqlalchemy.orm import Session
7 -from sqlalchemy import and_, or_ 7 +from sqlalchemy import and_, or_, select
8 8
9 from presupuestov1 import model, schema, constant, schemas, models, search 9 from presupuestov1 import model, schema, constant, schemas, models, search
10 10
...@@ -43,11 +43,12 @@ def fetch_classifier( ...@@ -43,11 +43,12 @@ def fetch_classifier(
43 return db.query(models.classifier.ClasGeografico).all() 43 return db.query(models.classifier.ClasGeografico).all()
44 44
45 45
46 +
46 # base 47 # base
47 48
48 @router_entidad.get('/{entity_id:str}', response_model=schemas.entity.ClasInstitucionalIngresosGastos) 49 @router_entidad.get('/{entity_id:str}', response_model=schemas.entity.ClasInstitucionalIngresosGastos)
49 def fetch_entity( 50 def fetch_entity(
50 - entity_id: int, 51 + entity_id: str,
51 db: Session = Depends(model.get_db), 52 db: Session = Depends(model.get_db),
52 ): 53 ):
53 ClasInstitucional = models.classifier.ClasInstitucional 54 ClasInstitucional = models.classifier.ClasInstitucional
...@@ -55,7 +56,7 @@ def fetch_entity( ...@@ -55,7 +56,7 @@ def fetch_entity(
55 ClasInstitucional.entidad == entity_id 56 ClasInstitucional.entidad == entity_id
56 ).one() 57 ).one()
57 58
58 - gastos_ingresos = get_resumen('entidad', entity_id) 59 + gastos_ingresos = get_resumen(db, 'entidad', entity_id)
59 setattr(entidad, 'gastos_ingresos', gastos_ingresos) 60 setattr(entidad, 'gastos_ingresos', gastos_ingresos)
60 61
61 return entidad 62 return entidad
...@@ -63,7 +64,7 @@ def fetch_entity( ...@@ -63,7 +64,7 @@ def fetch_entity(
63 64
64 @router_ubigeo.get('/{ubigeo_id:str}', response_model=schemas.entity.ClasGeograficoIngresosGastos) 65 @router_ubigeo.get('/{ubigeo_id:str}', response_model=schemas.entity.ClasGeograficoIngresosGastos)
65 def fetch_entity( 66 def fetch_entity(
66 - ubigeo_id: int, 67 + ubigeo_id: str,
67 db: Session = Depends(model.get_db), 68 db: Session = Depends(model.get_db),
68 ): 69 ):
69 ClasGeografico = models.classifier.ClasGeografico 70 ClasGeografico = models.classifier.ClasGeografico
...@@ -71,7 +72,7 @@ def fetch_entity( ...@@ -71,7 +72,7 @@ def fetch_entity(
71 ClasGeografico.ubigeo == ubigeo_id 72 ClasGeografico.ubigeo == ubigeo_id
72 ).one() 73 ).one()
73 74
74 - gastos_ingresos = get_resumen('municipio_ubigeo', ubigeo_id) 75 + gastos_ingresos = get_resumen(db, 'municipio_ubigeo', ubigeo_id)
75 setattr(ubigeo, 'gastos_ingresos', gastos_ingresos) 76 setattr(ubigeo, 'gastos_ingresos', gastos_ingresos)
76 77
77 return ubigeo 78 return ubigeo
...@@ -81,81 +82,94 @@ def fetch_entity( ...@@ -81,81 +82,94 @@ def fetch_entity(
81 82
82 @router_entidad.get('/{entity_id:str}/objetos', response_model=List[schemas.entity.EntidadDistribucion]) 83 @router_entidad.get('/{entity_id:str}/objetos', response_model=List[schemas.entity.EntidadDistribucion])
83 def fetch_entity_objetos( 84 def fetch_entity_objetos(
84 - entity_id: int, 85 + entity_id: str,
85 db: Session = Depends(model.get_db), 86 db: Session = Depends(model.get_db),
86 query: schema.QueryParams = Depends(), 87 query: schema.QueryParams = Depends(),
87 ): 88 ):
88 - return get_distribuciones('entidad', entidad_id, 'objeto', query) 89 + return get_distribuciones(db, 'entidad', entity_id, 'objeto', query)
89 90
90 91
91 @router_ubigeo.get('/{ubigeo_id:str}/objetos', response_model=List[schemas.entity.EntidadDistribucion]) 92 @router_ubigeo.get('/{ubigeo_id:str}/objetos', response_model=List[schemas.entity.EntidadDistribucion])
92 def fetch_entity_objetos( 93 def fetch_entity_objetos(
93 - ubigeo_id: int, 94 + ubigeo_id: str,
94 db: Session = Depends(model.get_db), 95 db: Session = Depends(model.get_db),
95 query: schema.QueryParams = Depends(), 96 query: schema.QueryParams = Depends(),
96 ): 97 ):
97 - return get_distribuciones('municipio_ubigeo', ubigeo_id, 'objeto', query) 98 + return get_distribuciones(db, 'municipio_ubigeo', ubigeo_id, 'objeto', query)
98 99
99 100
100 @router_entidad.get('/{entity_id:str}/finfuns', response_model=List[schemas.entity.EntidadDistribucion]) 101 @router_entidad.get('/{entity_id:str}/finfuns', response_model=List[schemas.entity.EntidadDistribucion])
101 def fetch_entity_finfuns( 102 def fetch_entity_finfuns(
102 - entity_id: int, 103 + entity_id: str,
103 db: Session = Depends(model.get_db), 104 db: Session = Depends(model.get_db),
104 query: schema.QueryParams = Depends(), 105 query: schema.QueryParams = Depends(),
105 ): 106 ):
106 - return get_distribuciones('entidad', entidad_id, 'finfun', query) 107 + return get_distribuciones(db, 'entidad', entity_id, 'finfun', query)
107 108
108 109
109 @router_ubigeo.get('/{ubigeo_id:str}/finfuns', response_model=List[schemas.entity.EntidadDistribucion]) 110 @router_ubigeo.get('/{ubigeo_id:str}/finfuns', response_model=List[schemas.entity.EntidadDistribucion])
110 def fetch_entity_finfuns( 111 def fetch_entity_finfuns(
111 - ubigeo_id: int, 112 + ubigeo_id: str,
112 db: Session = Depends(model.get_db), 113 db: Session = Depends(model.get_db),
113 query: schema.QueryParams = Depends(), 114 query: schema.QueryParams = Depends(),
114 ): 115 ):
115 - return get_distribuciones('municipio_ubigeo', ubigeo_id, 'finfun', query) 116 + return get_distribuciones(db, 'municipio_ubigeo', ubigeo_id, 'finfun', query)
116 117
117 118
118 @router_entidad.get('/{entity_id:str}/actecos', response_model=List[schemas.entity.EntidadDistribucion]) 119 @router_entidad.get('/{entity_id:str}/actecos', response_model=List[schemas.entity.EntidadDistribucion])
119 def fetch_entity_actecos( 120 def fetch_entity_actecos(
120 - entity_id: int, 121 + entity_id: str,
121 db: Session = Depends(model.get_db), 122 db: Session = Depends(model.get_db),
122 query: schema.QueryParams = Depends(), 123 query: schema.QueryParams = Depends(),
123 ): 124 ):
124 - return get_distribuciones('entidad', entidad_id, 'acteco', query) 125 + return get_distribuciones(db, 'entidad', entity_id, 'acteco', query)
125 126
126 127
127 @router_ubigeo.get('/{ubigeo_id:str}/actecos', response_model=List[schemas.entity.EntidadDistribucion]) 128 @router_ubigeo.get('/{ubigeo_id:str}/actecos', response_model=List[schemas.entity.EntidadDistribucion])
128 def fetch_entity_actecos( 129 def fetch_entity_actecos(
129 - ubigeo_id: int, 130 + ubigeo_id: str,
130 db: Session = Depends(model.get_db), 131 db: Session = Depends(model.get_db),
131 query: schema.QueryParams = Depends(), 132 query: schema.QueryParams = Depends(),
132 ): 133 ):
133 - return get_distribuciones('municipio_ubigeo', ubigeo_id, 'acteco', query) 134 + return get_distribuciones(db, 'municipio_ubigeo', ubigeo_id, 'acteco', query)
134 135
135 136
136 ############################################################################### 137 ###############################################################################
137 # private 138 # private
138 ############################################################################### 139 ###############################################################################
139 140
140 -def get_distribuciones(tipo_codigo, entidad_id, dimension, query): 141 +def get_distribuciones(db, tipo_codigo, entity_id, dimension, query):
142 + EntidadDistribucionesSchema = schemas.entity.EntidadDistribucion
141 EntidadDistribuciones = models.entity.EntidadDistribuciones 143 EntidadDistribuciones = models.entity.EntidadDistribuciones
142 144
145 + schema_fields = EntidadDistribucionesSchema.model_fields.keys()
146 + cols = [getattr(EntidadDistribuciones, name) for name in schema_fields]
147 +
143 filters = [] 148 filters = []
144 if query.gestion is not None: 149 if query.gestion is not None:
145 filters.append(EntidadDistribuciones.gestion == query.gestion) 150 filters.append(EntidadDistribuciones.gestion == query.gestion)
146 151
147 - filters.extend( 152 + filters.extend([
148 EntidadDistribuciones.tipo_codigo == tipo_codigo, 153 EntidadDistribuciones.tipo_codigo == tipo_codigo,
149 EntidadDistribuciones.codigo == entity_id, 154 EntidadDistribuciones.codigo == entity_id,
150 EntidadDistribuciones.dimension == dimension, 155 EntidadDistribuciones.dimension == dimension,
151 - ) 156 + ])
152 157
153 - return db.query(EntidadDistribuciones).filter(*filters).all() 158 + return db.execute(
159 + select(*cols).where(*filters)
160 + ).mappings().all()
154 161
155 162
156 -def get_resumen(tipo_codigo, codigo): 163 +def get_resumen(db, tipo_codigo, codigo):
157 EntidadResumenes = models.entity.EntidadResumenes 164 EntidadResumenes = models.entity.EntidadResumenes
158 - return db.query(EntidadResumenes).filter( 165 + EntidadResumenSchema = schemas.entity.EntidadResumen
159 - EntidadResumenes.tipo_codigo == tipo_codigo, 166 +
160 - EntidadResumenes.codigo == codigo, 167 + schema_fields = EntidadResumenSchema.model_fields.keys()
168 + cols = [getattr(EntidadResumenes, name) for name in schema_fields]
169 +
170 + return db.execute(
171 + select(*cols).where(
172 + EntidadResumenes.tipo_codigo == tipo_codigo,
173 + EntidadResumenes.codigo == codigo,
174 + )
161 ).all() 175 ).all()
......
...@@ -17,7 +17,8 @@ class SearchQueryParams(BaseModel): ...@@ -17,7 +17,8 @@ class SearchQueryParams(BaseModel):
17 17
18 class QueryParams(BaseModel): 18 class QueryParams(BaseModel):
19 id: Optional[str] = Query(default=None) 19 id: Optional[str] = Query(default=None)
20 - gestion: Optional[int] = Query(default=0) 20 + gestion: Optional[int] = Query(default=None)
21 + nivel: Optional[str] = Query(default=None)
21 22
22 class DailyParams(BaseModel): 23 class DailyParams(BaseModel):
23 transferencias: Optional[bool] = Query(default=False) 24 transferencias: Optional[bool] = Query(default=False)
......
...@@ -34,7 +34,6 @@ class ActecoEntidad(OrmBaseModel): ...@@ -34,7 +34,6 @@ class ActecoEntidad(OrmBaseModel):
34 acteco: str 34 acteco: str
35 entidad: int 35 entidad: int
36 nivel: str | None 36 nivel: str | None
37 - entidad_desc: str | None
38 monto: float | None 37 monto: float | None
39 per_capita: float | None 38 per_capita: float | None
40 ranking: int | None 39 ranking: int | None
......
...@@ -29,11 +29,16 @@ class ClasInstitucional(OrmBaseModel): ...@@ -29,11 +29,16 @@ class ClasInstitucional(OrmBaseModel):
29 n_gestiones: int | None 29 n_gestiones: int | None
30 30
31 31
32 -def get_clasdesc(name): 32 +# def get_clasdesc(name):
33 - return create_model( 33 +# return create_model(
34 - '_ClasDesc{}'.format(name), 34 +# '_ClasDesc{}'.format(name),
35 - **{'gestion': str, 'desc_{}'.format(name): str}, 35 +# **{'gestion': str, 'desc_{}'.format(name): str},
36 - ) 36 +# )
37 +
38 +
39 +class _ClasDesc(OrmBaseModel):
40 + gestion: str
41 + descripcion: str | None
37 42
38 class ClasBase(OrmBaseModel): 43 class ClasBase(OrmBaseModel):
39 nivel: str | None 44 nivel: str | None
...@@ -45,19 +50,19 @@ class ClasBase(OrmBaseModel): ...@@ -45,19 +50,19 @@ class ClasBase(OrmBaseModel):
45 class ClasObjetos(ClasBase): 50 class ClasObjetos(ClasBase):
46 objeto: str 51 objeto: str
47 desc_objeto: str | None 52 desc_objeto: str | None
48 - descripciones: list[get_clasdesc('objeto')] | None 53 + descripciones: list[_ClasDesc] | None
49 54
50 55
51 class ClasFinfun(ClasBase): 56 class ClasFinfun(ClasBase):
52 finfun: str 57 finfun: str
53 desc_finfun: str | None 58 desc_finfun: str | None
54 - descripciones: list[get_clasdesc('finfun')] | None 59 + descripciones: list[_ClasDesc] | None
55 60
56 61
57 class ClasActeco(ClasBase): 62 class ClasActeco(ClasBase):
58 acteco: str 63 acteco: str
59 desc_acteco: str | None 64 desc_acteco: str | None
60 - descripciones: list[get_clasdesc('acteco')] | None 65 + descripciones: list[_ClasDesc] | None
61 66
62 67
63 class ClasGeografico(ClasBase): 68 class ClasGeografico(ClasBase):
...@@ -65,7 +70,7 @@ class ClasGeografico(ClasBase): ...@@ -65,7 +70,7 @@ class ClasGeografico(ClasBase):
65 desc_ubigeo: str | None 70 desc_ubigeo: str | None
66 desc_departamento: str | None 71 desc_departamento: str | None
67 municipio_ubigeo: int | None 72 municipio_ubigeo: int | None
68 - descripciones: list[get_clasdesc('ubigeo')] | None 73 + descripciones: list[_ClasDesc] | None
69 74
70 75
71 # Ingresos 76 # Ingresos
...@@ -90,7 +95,7 @@ class ClasOrganismos(OrmBaseModel): ...@@ -90,7 +95,7 @@ class ClasOrganismos(OrmBaseModel):
90 class ClasRubros(ClasBase): 95 class ClasRubros(ClasBase):
91 rubro: str 96 rubro: str
92 desc_rubro: str | None 97 desc_rubro: str | None
93 - descripciones: list[get_clasdesc('rubro')] | None 98 + descripciones: list[_ClasDesc] | None
94 99
95 100
96 class ClasFuentes(ClasBase): 101 class ClasFuentes(ClasBase):
...@@ -98,4 +103,4 @@ class ClasFuentes(ClasBase): ...@@ -98,4 +103,4 @@ class ClasFuentes(ClasBase):
98 desc_fuente: str | None 103 desc_fuente: str | None
99 grupo_fuente: str 104 grupo_fuente: str
100 desc_grupo_fuente: str | None 105 desc_grupo_fuente: str | None
101 - descripciones: list[get_clasdesc('fuente')] | None 106 + descripciones: list[_ClasDesc] | None
......
...@@ -6,9 +6,6 @@ from presupuestov1 import schemas ...@@ -6,9 +6,6 @@ from presupuestov1 import schemas
6 6
7 class EntidadDistribucion(OrmBaseModel): 7 class EntidadDistribucion(OrmBaseModel):
8 tipo: str 8 tipo: str
9 - tipo_codigo: str
10 - codigo: str
11 - dimension: str
12 gestion: int 9 gestion: int
13 padre: str 10 padre: str
14 hijo: str 11 hijo: str
...@@ -19,13 +16,9 @@ class EntidadDistribucion(OrmBaseModel): ...@@ -19,13 +16,9 @@ class EntidadDistribucion(OrmBaseModel):
19 16
20 class EntidadResumen(OrmBaseModel): 17 class EntidadResumen(OrmBaseModel):
21 tipo: str 18 tipo: str
22 - tipo_codigo: str
23 - codigo: str
24 gestion: int 19 gestion: int
25 devengado: float 20 devengado: float
26 ranking: int | None 21 ranking: int | None
27 - desc: str | None
28 - desc_padre: str | None
29 22
30 23
31 class ClasInstitucionalIngresosGastos(schemas.classifier.ClasInstitucional): 24 class ClasInstitucionalIngresosGastos(schemas.classifier.ClasInstitucional):
......
...@@ -41,7 +41,6 @@ class FinfunEntidad(OrmBaseModel): ...@@ -41,7 +41,6 @@ class FinfunEntidad(OrmBaseModel):
41 finfun: str 41 finfun: str
42 entidad: int 42 entidad: int
43 nivel: str | None 43 nivel: str | None
44 - entidad_desc: str | None
45 monto: float | None 44 monto: float | None
46 per_capita: float | None 45 per_capita: float | None
47 ranking: int | None 46 ranking: int | None
......
...@@ -41,7 +41,6 @@ class ObjetoEntidad(OrmBaseModel): ...@@ -41,7 +41,6 @@ class ObjetoEntidad(OrmBaseModel):
41 objeto: str 41 objeto: str
42 entidad: int 42 entidad: int
43 nivel: str | None 43 nivel: str | None
44 - entidad_desc: str | None
45 monto: float | None 44 monto: float | None
46 per_capita: float | None 45 per_capita: float | None
47 ranking: int | None 46 ranking: int | None
......
...@@ -23,6 +23,11 @@ class TreemapObjeto(Treemap): ...@@ -23,6 +23,11 @@ class TreemapObjeto(Treemap):
23 desc_objeto: str | None 23 desc_objeto: str | None
24 desc_entidad: str | None 24 desc_entidad: str | None
25 25
26 +class TreemapObjetoSingle(Treemap):
27 + objeto: int
28 + parent: int | None
29 + desc_entidad: str | None
30 +
26 31
27 class TreemapFinFun(Treemap): 32 class TreemapFinFun(Treemap):
28 finfun: str 33 finfun: str
...@@ -31,8 +36,20 @@ class TreemapFinFun(Treemap): ...@@ -31,8 +36,20 @@ class TreemapFinFun(Treemap):
31 desc_entidad: str | None 36 desc_entidad: str | None
32 37
33 38
39 +class TreemapFinFunSingle(Treemap):
40 + finfun: str
41 + parent: str | None
42 + desc_entidad: str | None
43 +
44 +
34 class TreemapActeco(Treemap): 45 class TreemapActeco(Treemap):
35 acteco: str 46 acteco: str
36 parent: str | None 47 parent: str | None
37 desc_acteco: str | None 48 desc_acteco: str | None
38 desc_entidad: str | None 49 desc_entidad: str | None
50 +
51 +
52 +class TreemapActecoSingle(Treemap):
53 + acteco: str
54 + parent: str | None
55 + desc_entidad: str | None
......