Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Gabriel Weisse
/
presupuestov1
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
pr0nstar
2026-04-01 16:25:22 -0400
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0693cd058c3132f7f6214c0fdcb5b02a8c2063e4
0693cd05
1 parent
f01041fe
IV
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
59 additions
and
30 deletions
main.py
models/acteco.py
models/classifier.py
models/finfun.py
models/objeto.py
models/treemap.py
routers/entity.py
routers/project.py
schema.py
schemas/classifier.py
schemas/project.py
schemas/treemap.py
search.py
main.py
View file @
0693cd0
...
...
@@ -13,7 +13,8 @@ from starlette_context.middleware import RawContextMiddleware
from
aiocache
import
caches
from
presupuestov1.routers
import
(
project
project
,
entity
)
...
...
@@ -38,6 +39,7 @@ app = FastAPI(
root_path
=
'/api'
)
app
.
include_router
(
project
.
router
)
app
.
include_router
(
entity
.
router
)
@app.on_event
(
'startup'
)
...
...
models/acteco.py
View file @
0693cd0
...
...
@@ -18,6 +18,7 @@ class ActecoEstado(Base):
Index
(
"idx_acteco_estado_gestion"
,
"gestion"
),
Index
(
"idx_acteco_estado_acteco"
,
"acteco"
),
Index
(
"idx_acteco_estado_acteco_gestion"
,
"acteco"
,
"gestion"
),
{
"schema"
:
"web"
},
)
id
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
...
...
@@ -56,6 +57,7 @@ class ActecoEntidad(Base):
Index
(
"idx_acteco_entidad_gestion"
,
"gestion"
),
Index
(
"idx_acteco_entidad_acteco"
,
"acteco"
),
Index
(
"idx_acteco_entidad_acteco_entidad"
,
"acteco"
,
"entidad"
),
{
"schema"
:
"web"
},
)
id
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
...
...
models/classifier.py
View file @
0693cd0
...
...
@@ -18,6 +18,7 @@ class ClasInstitucional(Base):
__tablename__
=
"clas_institucional"
__table_args__
=
(
Index
(
"idx_clas_institucional_entidad"
,
"entidad"
),
{
"schema"
:
"web"
},
)
entidad
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
)
...
...
@@ -48,6 +49,7 @@ class ClasObjetos(Base):
__tablename__
=
"clas_objetos"
__table_args__
=
(
Index
(
"idx_clas_objetos_entidad"
,
"objeto"
),
{
"schema"
:
"web"
},
)
nivel
:
Mapped
[
str
|
None
]
=
mapped_column
(
Text
)
...
...
@@ -65,6 +67,7 @@ class ClasRubros(Base):
__tablename__
=
"clas_rubros"
__table_args__
=
(
Index
(
"idx_clas_rubros_entidad"
,
"rubro"
),
{
"schema"
:
"web"
},
)
nivel
:
Mapped
[
str
|
None
]
=
mapped_column
(
Text
)
...
...
@@ -82,6 +85,7 @@ class ClasFinfun(Base):
__tablename__
=
"clas_finfun"
__table_args__
=
(
Index
(
"idx_clas_finfun_entidad"
,
"finfun"
),
{
"schema"
:
"web"
},
)
nivel
:
Mapped
[
str
|
None
]
=
mapped_column
(
Text
)
...
...
@@ -99,6 +103,7 @@ class ClasActeco(Base):
__tablename__
=
"clas_acteco"
__table_args__
=
(
Index
(
"idx_clas_acteco_entidad"
,
"acteco"
),
{
"schema"
:
"web"
},
)
nivel
:
Mapped
[
str
|
None
]
=
mapped_column
(
Text
)
...
...
models/finfun.py
View file @
0693cd0
...
...
@@ -16,6 +16,7 @@ class EntidadesPorFinfun(Base):
__table_args__
=
(
Index
(
"idx_entidades_por_finfun_finfun"
,
"finfun"
),
Index
(
"idx_entidades_por_finfun_finfun_nivel"
,
"finfun"
,
"nivel"
),
{
"schema"
:
"web"
},
)
finfun
:
Mapped
[
str
]
=
mapped_column
(
Text
,
primary_key
=
True
)
...
...
@@ -31,6 +32,7 @@ class FinfunEstado(Base):
Index
(
"idx_finfun_estado_gestion"
,
"gestion"
),
Index
(
"idx_finfun_estado_finfun"
,
"finfun"
),
Index
(
"idx_finfun_estado_finfun_gestion"
,
"finfun"
,
"gestion"
),
{
"schema"
:
"web"
},
)
id
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
...
...
@@ -69,6 +71,7 @@ class FinfunEntidad(Base):
Index
(
"idx_finfun_entidad_gestion"
,
"gestion"
),
Index
(
"idx_finfun_entidad_finfun"
,
"finfun"
),
Index
(
"idx_finfun_entidad_finfun_entidad"
,
"finfun"
,
"entidad"
),
{
"schema"
:
"web"
},
)
id
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
...
...
models/objeto.py
View file @
0693cd0
...
...
@@ -16,6 +16,7 @@ class EntidadesPorObjeto(Base):
__table_args__
=
(
Index
(
"idx_entidades_por_objeto_objeto"
,
"objeto"
),
Index
(
"idx_entidades_por_objeto_objeto_nivel"
,
"objeto"
,
"nivel"
),
{
"schema"
:
"web"
},
)
entidad
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
)
...
...
@@ -31,6 +32,7 @@ class ObjetoEstado(Base):
Index
(
"idx_objeto_estado_gestion"
,
"gestion"
),
Index
(
"idx_objeto_estado_objeto"
,
"objeto"
),
Index
(
"idx_objeto_estado_objeto_gestion"
,
"objeto"
,
"gestion"
),
{
"schema"
:
"web"
},
)
id
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
...
...
@@ -70,6 +72,7 @@ class ObjetoEntidad(Base):
Index
(
"idx_objeto_entidad_gestion"
,
"gestion"
),
Index
(
"idx_objeto_entidad_objeto"
,
"objeto"
),
Index
(
"idx_objeto_entidad_objeto_entidad"
,
"objeto"
,
"entidad"
),
{
"schema"
:
"web"
},
)
id
:
Mapped
[
int
]
=
mapped_column
(
Integer
,
primary_key
=
True
,
autoincrement
=
True
)
...
...
models/treemap.py
View file @
0693cd0
...
...
@@ -16,6 +16,7 @@ class TreemapObjeto(Base):
__table_args__
=
(
Index
(
"idx_treemap_objeto_gestion_entidad"
,
"gestion"
,
"entidad"
),
Index
(
"idx_treemap_objeto_nivel"
,
"nivel"
),
{
"schema"
:
"web"
},
)
# PK compuesta inferida para uso ORM
...
...
@@ -36,6 +37,7 @@ class TreemapFinFun(Base):
__table_args__
=
(
Index
(
"idx_treemap_finfun_gestion_entidad"
,
"gestion"
,
"entidad"
),
Index
(
"idx_treemap_finfun_nivel"
,
"nivel"
),
{
"schema"
:
"web"
},
)
# PK compuesta inferida para uso ORM
...
...
@@ -56,6 +58,7 @@ class TreemapActeco(Base):
__table_args__
=
(
Index
(
"idx_treemap_acteco_gestion_entidad"
,
"gestion"
,
"entidad"
),
Index
(
"idx_treemap_acteco_nivel"
,
"nivel"
),
{
"schema"
:
"web"
},
)
# PK compuesta inferida para uso ORM
...
...
routers/entity.py
View file @
0693cd0
...
...
@@ -21,7 +21,7 @@ router = APIRouter(
# GET
###############################################################################
@router.get
(
'/{entity_id}'
,
response_model
=
schemas
.
classifier
.
ClasInstitucional
)
@router.get
(
'/{entity_id
:int
}'
,
response_model
=
schemas
.
classifier
.
ClasInstitucional
)
def
fetch_entity
(
entity_id
:
int
,
db
:
Session
=
Depends
(
model
.
get_db
),
...
...
@@ -39,8 +39,8 @@ def fetch_classifier(
return
db
.
query
(
models
.
classifier
.
ClasInstitucional
)
.
all
()
@router.get
(
'/{entity_id}/objetos'
,
response_model
=
List
[
schemas
.
treemap
.
TreemapObjeto
])
def
fetch_entity
(
@router.get
(
'/{entity_id
:int
}/objetos'
,
response_model
=
List
[
schemas
.
treemap
.
TreemapObjeto
])
def
fetch_entity
_objetos
(
entity_id
:
int
,
db
:
Session
=
Depends
(
model
.
get_db
),
query
:
schema
.
QueryParams
=
Depends
(),
...
...
@@ -49,8 +49,8 @@ def fetch_entity(
return
get_entity_connections
(
entity_id
,
db
,
query
,
TreemapObjeto
,
'objeto'
)
router
.
get
(
'/{entity_id
}/finfuns'
,
response_model
=
List
[
schemas
.
treemap
.
TreemapFinf
un
])
def
fetch_entity
(
router
.
get
(
'/{entity_id
:int}/finfuns'
,
response_model
=
List
[
schemas
.
treemap
.
TreemapFinF
un
])
def
fetch_entity
_finfuns
(
entity_id
:
int
,
db
:
Session
=
Depends
(
model
.
get_db
),
query
:
schema
.
QueryParams
=
Depends
(),
...
...
@@ -59,8 +59,8 @@ def fetch_entity(
return
get_entity_connections
(
entity_id
,
db
,
query
,
TreemapFinFun
,
'finfun'
)
@router.get
(
'/{entity_id}/actecos'
,
response_model
=
List
[
schemas
.
treemap
.
TreemapActeco
])
def
fetch_entity
(
@router.get
(
'/{entity_id
:int
}/actecos'
,
response_model
=
List
[
schemas
.
treemap
.
TreemapActeco
])
def
fetch_entity
_actecos
(
entity_id
:
int
,
db
:
Session
=
Depends
(
model
.
get_db
),
query
:
schema
.
QueryParams
=
Depends
(),
...
...
@@ -82,6 +82,8 @@ def get_entity_connections(entity_id, db, query, ClassObject, object_id):
ClassObject
.
gestion
==
query
.
gestion
,
]
print
(
query
.
id
is
not
None
)
if
query
.
id
is
not
None
:
ids
=
query
.
id
.
split
(
','
)
ids
=
[
int
(
_
.
strip
())
for
_
in
ids
]
...
...
routers/project.py
View file @
0693cd0
...
...
@@ -33,10 +33,10 @@ router = APIRouter(
def
fetch_search
(
query
:
schema
.
SearchQueryParams
=
Depends
(),
):
if
query
.
q
is
None
or
len
(
query
.
q
)
<
3
:
if
query
.
q
is
None
or
len
(
query
.
q
.
strip
()
)
<
3
:
return
[]
return
do_search
(
query
.
q
,
query
.
page
)
return
do_search
(
query
.
q
,
query
.
page
,
query
.
is_class
)
###############################################################################
...
...
@@ -44,5 +44,5 @@ def fetch_search(
###############################################################################
# @cached(ttl=10)
def
do_search
(
query
,
page
):
return
search
.
do_search
(
query
,
page
)
\ No newline at end of file
def
do_search
(
query
,
page
,
is_class
):
return
search
.
do_search
(
query
,
page
,
is_class
)
\ No newline at end of file
...
...
schema.py
View file @
0693cd0
...
...
@@ -12,6 +12,7 @@ class OrmBaseModel(BaseModel):
class
SearchQueryParams
(
BaseModel
):
page
:
Optional
[
int
]
=
Query
(
default
=
1
)
q
:
Optional
[
str
]
=
Query
(
default
=
None
)
is_class
:
Optional
[
bool
]
=
Query
(
default
=
None
)
class
QueryParams
(
BaseModel
):
id
:
Optional
[
str
]
=
Query
(
default
=
None
)
...
...
schemas/classifier.py
View file @
0693cd0
...
...
@@ -7,18 +7,23 @@ class ClasInstitucional(OrmBaseModel):
entidad
:
int
desc_entidad
:
str
|
None
sigla_entidad
:
str
|
None
sector
:
str
|
None
desc_sector
:
str
|
None
sigla_sector
:
str
|
None
subsector
:
str
|
None
desc_subsector
:
str
|
None
sigla_subsector
:
str
|
None
area
:
str
|
None
desc_area
:
str
|
None
sigla_area
:
str
|
None
subarea
:
str
|
None
desc_subarea
:
str
|
None
sigla_subarea
:
str
|
None
gestiones
:
str
|
None
n_gestiones
:
int
|
None
...
...
schemas/project.py
View file @
0693cd0
...
...
@@ -5,13 +5,10 @@ from presupuestov1.schema import BaseModel
class
ProjectSearch
(
BaseModel
):
gestion
:
int
entidad
:
int
programa
:
int
proyecto
:
str
actividad
:
int
desc_programa
:
str
desc_actividad_proyecto
:
str
devengado
:
float
is_class
:
bool
texto
:
str
metadatos
:
str
class
SearchHitHighlight
(
BaseModel
):
...
...
schemas/treemap.py
View file @
0693cd0
...
...
@@ -4,8 +4,8 @@ from presupuestov1.schema import OrmBaseModel
class
TreemapObjeto
(
OrmBaseModel
):
gestion
:
int
entidad
:
int
nivel
:
str
objeto
:
int
nivel
:
str
|
None
desc_objeto
:
str
|
None
parent
:
int
|
None
devengado
:
float
|
None
...
...
@@ -14,8 +14,8 @@ class TreemapObjeto(OrmBaseModel):
class
TreemapFinFun
(
OrmBaseModel
):
gestion
:
int
entidad
:
int
nivel
:
str
finfun
:
int
nivel
:
str
|
None
desc_finfun
:
str
|
None
parent
:
int
|
None
devengado
:
float
|
None
...
...
@@ -24,8 +24,8 @@ class TreemapFinFun(OrmBaseModel):
class
TreemapActeco
(
OrmBaseModel
):
gestion
:
int
entidad
:
int
nivel
:
str
acteco
:
int
nivel
:
str
|
None
desc_actividad
:
str
|
None
parent
:
int
|
None
devengado
:
float
|
None
...
...
search.py
View file @
0693cd0
...
...
@@ -15,32 +15,38 @@ COLLECTION = 'presup_actpro_fts'
schema
=
{
'name'
:
COLLECTION
,
'fields'
:
[
{
'name'
:
'index'
,
'type'
:
'int32'
},
{
'name'
:
'gestion'
,
'type'
:
'int32'
,
'facet'
:
True
},
{
'name'
:
'entidad'
,
'type'
:
'int32'
,},
{
'name'
:
'programa'
,
'type'
:
'int32'
,},
{
'name'
:
'proyecto'
,
'type'
:
'string'
,},
{
'name'
:
'actividad'
,
'type'
:
'int32'
,},
{
'name'
:
'desc_actividad_proyecto'
,
'type'
:
'string'
},
{
'name'
:
'devengado'
,
'type'
:
'float'
},
{
'name'
:
'is_class'
,
'type'
:
'bool'
},
{
'name'
:
'texto'
,
'type'
:
'string'
},
{
'name'
:
'metadatos'
,
'type'
:
'string'
},
],
'default_sorting_field'
:
'devengado'
,
}
search_parameters
=
{
"q"
:
"cuba"
,
"query_by"
:
"desc_actividad_proyecto,desc_programa
"
,
"facet_by"
:
"gestion"
,
"query_by"
:
"texto
"
,
#
"facet_by": "gestion",
"sort_by"
:
"devengado:desc"
,
"per_page"
:
20
,
}
def
do_search
(
query
,
page
):
def
do_search
(
query
,
page
,
is_class
):
search_parameters_
=
search_parameters
.
copy
()
search_parameters_
[
'q'
]
=
query
if
is_class
is
not
None
:
filter_c
=
''
if
is_class
:
filter_c
=
'is_class:true'
else
:
filter_c
=
'is_class:false'
search_parameters_
[
'filter_by'
]
=
filter_c
if
(
page
is
not
None
)
and
(
page
>
0
):
search_parameters_
[
'page'
]
=
page
...
...
Please
register
or
login
to post a comment