entity.py 2.69 KB
import time

from typing import List, Any, Optional, Union

from fastapi import APIRouter, Depends, Request, HTTPException, Body
from sqlalchemy.orm import Session
from sqlalchemy import and_, or_

from presupuestov1 import model, schema, constant, schemas, models, search

from aiocache import cached


router = APIRouter(
	prefix='/entidad',
	tags=['entidad'],
)


###############################################################################
# GET
###############################################################################

@router.get('/{entity_id:int}', response_model=schemas.classifier.ClasInstitucional)
def fetch_entity(
	entity_id: int,
	db: Session = Depends(model.get_db),
):
	ClasInstitucional = models.classifier.ClasInstitucional
	return db.query(ClasInstitucional).filter(
		ClasInstitucional.entidad == entity_id
	).one()


@router.get('/clasificador', response_model=List[schemas.classifier.ClasInstitucional])
def fetch_classifier(
	db: Session = Depends(model.get_db),
):
	return db.query(models.classifier.ClasInstitucional).all()


@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(),
):
	TreemapObjeto = models.treemap.TreemapObjeto
	return get_entity_connections(entity_id, db, query, TreemapObjeto, 'objeto')


router.get('/{entity_id:int}/finfuns', response_model=List[schemas.treemap.TreemapFinFun])
def fetch_entity_finfuns(
	entity_id: int,
	db: Session = Depends(model.get_db),
	query: schema.QueryParams = Depends(),
):
	TreemapFinFun = models.treemap.TreemapFinFun
	return get_entity_connections(entity_id, db, query, TreemapFinFun, 'finfun')


@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(),
):
	TreemapActeco = models.treemap.TreemapActeco
	return get_entity_connections(entity_id, db, query, TreemapActeco, 'acteco')


###############################################################################
# Private
###############################################################################

def get_entity_connections(entity_id, db, query, ClassObject, object_id):
	if query.gestion is None:
		query.gestion = 0

	query_filters = [
		ClassObject.entidad == entity_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]

		ids = or_([getattr(ClassObject, object_id) == _ for _ in ids])
		query_filters.append(ids)

	return db.query(ClassObject).filter(and_(*query_filters)).all()