classifier.py 3.43 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_objeto = APIRouter(
	prefix='/objeto',
	tags=['objeto'],
)

router_acteco = APIRouter(
	prefix='/acteco',
	tags=['acteco'],
)

router_finfun = APIRouter(
	prefix='/finfun',
	tags=['finfun'],
)


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

@router_objeto.get('/clasificador', response_model=List[schemas.classifier.ClasObjetos])
def fetch_object_classifier(db: Session = Depends(model.get_db)):
	return _fetch_classifier('objeto', db)


@router_acteco.get('/clasificador', response_model=List[schemas.classifier.ClasActeco])
def fetch_object_classifier(db: Session = Depends(model.get_db)):
	return _fetch_classifier('acteco', db)


@router_finfun.get('/clasificador', response_model=List[schemas.classifier.ClasFinfun])
def fetch_object_classifier(db: Session = Depends(model.get_db)):
	return _fetch_classifier('finfun', db)


@router_objeto.get('/{object_id}', response_model=schemas.classifier.ClasObjetos)
def fetch_clas(
	object_id: str,
	db: Session = Depends(model.get_db),
):
	ClasObjetos = models.classifier.ClasObjetos
	return db.query(ClasObjetos).filter(
		ClasObjetos.objeto == '{}.0'.format(object_id)
	).one()


@router_objeto.get('/{object_id}/entidades', response_model=List[schemas.treemap.TreemapObjeto])
def fetch_clas(
	object_id: str,
	db: Session = Depends(model.get_db),
):
	Treemap = models.treemap.TreemapObjeto
	return models.treemap.get_clas_entities(
		[
	        Treemap.objeto == object_id
		], db, query, Treemap, 'entidad'
	)

@router_acteco.get('/{acteco_id}', response_model=schemas.classifier.ClasActeco)
def fetch_clas(
	acteco_id: str,
	db: Session = Depends(model.get_db),
):
	ClasActeco = models.classifier.ClasActeco
	return db.query(ClasActeco).filter(
		ClasActeco.acteco == acteco_id
	).one()


@router_acteco.get('/{acteco_id}/entidades', response_model=List[schemas.treemap.TreemapActeco])
def fetch_clas(
	acteco_id: str,
	db: Session = Depends(model.get_db),
):
	Treemap = models.treemap.TreemapActeco
	return models.treemap.get_clas_entities(
		[
	        Treemap.acteco == acteco_id
		], db, query, Treemap, 'entidad'
	)


@router_finfun.get('/{finfun_id}', response_model=schemas.classifier.ClasFinfun)
def fetch_clas(
	finfun_id: str,
	db: Session = Depends(model.get_db),
):
	ClasFinfun = models.classifier.ClasFinfun
	return db.query(ClasFinfun).filter(
		ClasFinfun.finfun == finfun_id
	).one()


@router_finfun.get('/{finfun_id}/entidades', response_model=List[schemas.treemap.TreemapFinFun])
def fetch_clas(
	finfun_id: str,
	db: Session = Depends(model.get_db),
):
	Treemap = models.treemap.TreemapFinFun
	return models.treemap.get_clas_entities(
		[
	        Treemap.finfun == finfun_id
		], db, query, Treemap, 'entidad'
	)


###############################################################################
# priv
###############################################################################

def _fetch_classifier(clas, db):
	ClassObject = {
		'objeto': models.classifier.ClasObjetos,
		'acteco': models.classifier.ClasActeco,
		'finfun': models.classifier.ClasFinfun,
	}[clas]
	return db.query(ClassObject).all()