import json
from flask_login import login_required
from flask_restplus import Resource, abort, fields
from legislei.app import current_user, rest_api_v1
from legislei.controllers.dto import assemblymen_dto, rating_dto
from legislei.exceptions import AppError, InvalidModelId
from legislei.house_selector import obter_parlamentar, obter_parlamentares
from legislei.services.avaliacoes import Avaliacao
[documentos]@rest_api_v1.route("/parlamentares/<casa>")
class AssemblymenList(Resource):
[documentos] @rest_api_v1.doc(
description="Retorna todos os parlamentaresd de uma dada casa legislativa",
params={'casa': 'Id de uma casa legislativa'},
responses={400: 'Id de casa legislativa inválido'}
)
@rest_api_v1.marshal_list_with(assemblymen_dto)
def get(self, casa):
try:
return obter_parlamentares(casa), 200
except InvalidModelId:
abort(400, message="Id de casa legislativa inválido")
except AppError as e:
abort(500, message=str(e))
[documentos]@rest_api_v1.route("/parlamentares/<casa>/<parlamentar>")
class Assemblymen(Resource):
[documentos] @rest_api_v1.doc(
description="Retorna informações sobre um dado parlamentar de uma dada casa legislativa",
params={'parlamentar': 'Id de parlamentar', 'casa': 'Id de casa legislativa'},
responses={400: 'Id de casa legislativa inválido', 422: 'Id de parlamentar inválido'}
)
@rest_api_v1.marshal_with(assemblymen_dto)
def get(self, casa, parlamentar):
try:
parlamentar = obter_parlamentar(casa, parlamentar)
if parlamentar == None:
abort(422, message='Id de parlamentar inválido')
return json.loads(parlamentar.to_json()), 200
except InvalidModelId:
abort(400, message="Id de casa legislativa inválido")
except AppError as e:
abort(500, message=str(e))
[documentos]@rest_api_v1.route("/parlamentares/<casa>/<parlamentar>/avaliacoes")
class AssemblymenRatings(Resource):
[documentos] @login_required
@rest_api_v1.doc(
security='apikey',
params={'parlamentar': 'Id de parlamentar', 'casa': 'Id de casa legislativa'},
description="Retorna todas as avaliações dadas a um dado parlamentar pelo usuário",
responses={
401: 'Sem autorização'
}
)
@rest_api_v1.marshal_list_with(rating_dto)
def get(self, casa, parlamentar):
return json.loads(Avaliacao().minhas_avaliacoes(casa, parlamentar, current_user.email).to_json()), 200