init
This commit is contained in:
70
backend-django/backend/views/alimentation_zones_geo.py
Normal file
70
backend-django/backend/views/alimentation_zones_geo.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import pandas as pd
|
||||
from django.db.transaction import atomic
|
||||
from django.http import Http404
|
||||
from rest_framework.exceptions import APIException
|
||||
from rest_framework.permissions import IsAdminUser, IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from ..serializers.alimentation import AlimentationZoneGeographiqueSerializer
|
||||
from ..utils.alimentation_decorators import (data_perf_logger_factory,
|
||||
get_data_logger)
|
||||
from ..utils.decorators import execution_time, query_count
|
||||
from ..utils_extraction import (DataFrameTypes, FileTypes, read_files_by_type,
|
||||
to_table_zone_geographique)
|
||||
from ..utils_insertion import insert_ZoneGeographique
|
||||
|
||||
|
||||
class AlimentationZoneGeographiqueView(APIView):
|
||||
""" Vue pour alimenter la base à partir de référentiels """
|
||||
|
||||
permission_classes = [IsAuthenticated, IsAdminUser]
|
||||
serializer_class = AlimentationZoneGeographiqueSerializer
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.logger = get_data_logger(self)
|
||||
|
||||
|
||||
def get(self, request):
|
||||
return Response("Formulaire d'alimentation d'OGURE NG pour les zones geographiques")
|
||||
|
||||
|
||||
@atomic
|
||||
@execution_time(logger_factory=data_perf_logger_factory)
|
||||
@query_count(logger_factory=data_perf_logger_factory)
|
||||
def post(self, request):
|
||||
"""
|
||||
Charge le(s) fichier(s) et met à jour la base.
|
||||
|
||||
:param request: requête, contient les fichiers
|
||||
:type request: class:`rest_framework.request.Request`
|
||||
|
||||
:raises: class:`rest_framework.exceptions.APIException`
|
||||
|
||||
:return: réponse
|
||||
:rtype: class:`rest_framework.response.Response`
|
||||
"""
|
||||
try:
|
||||
validator = self.serializer_class(data=request.data)
|
||||
validator.is_valid(raise_exception=True)
|
||||
|
||||
ref_zones_geo_df = read_files_by_type({
|
||||
FileTypes.REF_GEO: validator.validated_data.get('ref_zones_geo')
|
||||
}).get(DataFrameTypes.REF_GEO)
|
||||
|
||||
if ref_zones_geo_df is not None:
|
||||
df = to_table_zone_geographique(ref_zones_geo_df)
|
||||
self.logger.info('Extraction des données du référentiel ------> Succès')
|
||||
|
||||
insert_ZoneGeographique(df)
|
||||
self.logger.info('Mise à jour du référentiel ------> Succès')
|
||||
else:
|
||||
self.logger.info('Mise à jour ignorée : zones géographiques (nécessite %s)', DataFrameTypes.REF_GEO.value[1])
|
||||
return Response({'Insertion réussie'})
|
||||
except (Http404, APIException):
|
||||
raise
|
||||
except BaseException:
|
||||
message = "Impossible d'alimenter le(s) référentiel(s)"
|
||||
self.logger.exception(message)
|
||||
raise APIException(message)
|
||||
Reference in New Issue
Block a user