mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.8 KiB
124 lines
4.8 KiB
import logging
|
|
|
|
from django.conf import settings
|
|
from rest_framework.authtoken.models import Token
|
|
from rest_framework.decorators import api_view, permission_classes
|
|
from rest_framework.permissions import IsAuthenticated, IsAdminUser
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from drfautoapi.drfautoapi import ApiViewSetConstrutor
|
|
from sapl.api.views_audiencia import AudienciaApiViewSetConstrutor
|
|
from sapl.api.views_base import BaseApiViewSetConstrutor
|
|
from sapl.api.views_comissoes import ComissoesApiViewSetConstrutor
|
|
from sapl.api.views_compilacao import CompilacaoApiViewSetConstrutor
|
|
from sapl.api.views_materia import MateriaApiViewSetConstrutor
|
|
from sapl.api.views_norma import NormaApiViewSetConstrutor
|
|
from sapl.api.views_painel import PainelApiViewSetConstrutor
|
|
from sapl.api.views_parlamentares import ParlamentaresApiViewSetConstrutor
|
|
from sapl.api.views_protocoloadm import ProtocoloAdmApiViewSetConstrutor
|
|
from sapl.api.views_sessao import SessaoApiViewSetConstrutor
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([IsAdminUser])
|
|
def recria_token(request, pk):
|
|
Token.objects.filter(user_id=pk).delete()
|
|
token = Token.objects.create(user_id=pk)
|
|
|
|
return Response({"message": "Token recriado com sucesso!", "token": token.key})
|
|
|
|
|
|
class AppVersionView(APIView):
|
|
permission_classes = (IsAuthenticated,)
|
|
|
|
def get(self, request):
|
|
content = {
|
|
'name': 'SAPL',
|
|
'description': 'Sistema de Apoio ao Processo Legislativo',
|
|
'version': settings.SAPL_VERSION,
|
|
'user': request.user.username,
|
|
'is_authenticated': request.user.is_authenticated,
|
|
}
|
|
return Response(content)
|
|
|
|
|
|
SaplApiViewSetConstrutor = ApiViewSetConstrutor
|
|
SaplApiViewSetConstrutor.update(AudienciaApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(BaseApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(ComissoesApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(CompilacaoApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(MateriaApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(NormaApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(PainelApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(ParlamentaresApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(ProtocoloAdmApiViewSetConstrutor)
|
|
SaplApiViewSetConstrutor.update(SessaoApiViewSetConstrutor)
|
|
|
|
|
|
"""
|
|
1. ApiViewSetConstrutor constroi uma rest_framework.viewsets.ModelViewSet
|
|
para todos os models de todas as app_configs passadas no list
|
|
2. Define DjangoFilterBackend como ferramenta de filtro dos campos
|
|
3. Define Serializer como a seguir:
|
|
3.1 - Define um Serializer genérico para cada módel
|
|
3.1.1 - se existir um DEFAULT_SERIALIZER_MODULE em settings,
|
|
recupera Serializer customizados no módulo DEFAULT_SERIALIZER_MODULE
|
|
3.2 - Para todo model é opcional a existência de {model}Serializer.
|
|
Caso não seja definido um Serializer customizado, utiliza-se o genérico
|
|
3.3 - Caso exista GLOBAL_SERIALIZER_MIXIN definido,
|
|
utiliza este Serializer para construir o genérico de 3.1
|
|
4. Define um FilterSet como a seguir:
|
|
4.1 - Define um FilterSet genérico para cada módel
|
|
4.1.1 - se existir um DEFAULT_FILTER_MODULE em settings,
|
|
recupera o FilterSet customizado no módulo DEFAULT_FILTER_MODULE
|
|
4.2 - Para todo model é opcional a existência de {model}FilterSet.
|
|
Caso não seja definido um FilterSet customizado, utiliza-se o genérico
|
|
4.3 - Caso exista GLOBAL_FILTERSET_MIXIN definido,
|
|
utiliza este FilterSet para construir o genérico de 4.1
|
|
4.4 - Caso não exista GLOBAL_FILTERSET_MIXIN, será aplicado
|
|
drfautoapi.drjautoapi.ApiFilterSetMixin que inclui parametro para:
|
|
- order_by: através do parâmetro "o"
|
|
- amplia os lookups aceitos pelo FilterSet default
|
|
para os aceitos pelo django sem a necessidade de criar
|
|
fields específicos em um FilterSet customizado.
|
|
|
|
5. ApiViewSetConstrutor não cria padrões e/ou exige conhecimento alem dos
|
|
exigidos pela DRF.
|
|
|
|
6. As rotas são criadas seguindo nome da app e nome do model
|
|
http://localhost:9000/api/{applabel}/{model_name}/
|
|
e seguem as variações definidas em:
|
|
https://www.django-rest-framework.org/api-guide/routers/#defaultrouter
|
|
|
|
|
|
**ApiViewSetConstrutor._built_sets** é um dict de dicts de models conforme:
|
|
{
|
|
...
|
|
|
|
'audiencia': {
|
|
'tipoaudienciapublica': TipoAudienciaPublicaViewSet,
|
|
'audienciapublica': AudienciaPublicaViewSet,
|
|
'anexoaudienciapublica': AnexoAudienciaPublicaViewSet
|
|
|
|
...
|
|
|
|
},
|
|
|
|
...
|
|
|
|
'base': {
|
|
'casalegislativa': CasaLegislativaViewSet,
|
|
'appconfig': AppConfigViewSet,
|
|
|
|
...
|
|
|
|
}
|
|
|
|
...
|
|
|
|
}
|
|
"""
|
|
|