110 lines
3.3 KiB
Python
110 lines
3.3 KiB
Python
import csv
|
|
import logging
|
|
|
|
from django.shortcuts import render
|
|
from django.http import HttpResponse
|
|
from django.contrib.auth import get_user_model
|
|
|
|
from rest_framework import status
|
|
from rest_framework import viewsets
|
|
from rest_framework.response import Response
|
|
from rest_framework.permissions import IsAdminUser
|
|
from rest_framework.generics import UpdateAPIView
|
|
from rest_framework.decorators import api_view, permission_classes
|
|
|
|
from . import models
|
|
from . import serializers
|
|
|
|
from back_latienda.permissions import CustomUserPermissions, YourOwnUserPermissions
|
|
|
|
|
|
User = get_user_model()
|
|
|
|
# Create your views here.
|
|
|
|
logging.basicConfig(
|
|
filename='logs/csv-load.log',
|
|
filemode='w',
|
|
format='%(levelname)s:%(message)s',
|
|
level=logging.INFO,
|
|
)
|
|
|
|
|
|
class CustomUserViewSet(viewsets.ModelViewSet):
|
|
|
|
model = models.CustomUser
|
|
# serializer_class = serializers.CustomUserSerializer
|
|
serializer_class = serializers.CustomUserReadSerializer
|
|
write_serializer_class =serializers.CustomUserWriteSerializer
|
|
model_name = 'custom_user'
|
|
queryset = models.CustomUser.objects.all()
|
|
permission_classes = [CustomUserPermissions,]
|
|
|
|
def create(self, request):
|
|
"""
|
|
Create Instance
|
|
"""
|
|
try:
|
|
serializer = self.write_serializer_class(
|
|
data=request.data,
|
|
)
|
|
if serializer.is_valid():
|
|
# save model instance data
|
|
password = serializer.validated_data.pop('password')
|
|
instance = self.model(**serializer.validated_data)
|
|
instance.set_password(password)
|
|
instance.save()
|
|
|
|
return Response(self.serializer_class(
|
|
instance, many=False, context={'request': request}).data,
|
|
status=status.HTTP_201_CREATED)
|
|
else:
|
|
return Response(
|
|
serializer.errors, status=status.HTTP_406_NOT_ACCEPTABLE)
|
|
except Exception as e:
|
|
return Response(str(e), status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
|
|
|
|
class ChangeUserPasswordView(UpdateAPIView):
|
|
|
|
model = models.CustomUser
|
|
queryset = model.objects.all()
|
|
permission_classes = (YourOwnUserPermissions,)
|
|
serializer_class = serializers.ChangePasswordSerializer
|
|
|
|
|
|
class UpdateUserView(UpdateAPIView):
|
|
|
|
model = models.CustomUser
|
|
queryset = model.objects.all()
|
|
permission_classes = (YourOwnUserPermissions,)
|
|
serializer_class = serializers.UpdateUserSerializer
|
|
|
|
|
|
@api_view(['POST',])
|
|
@permission_classes([IsAdminUser,])
|
|
def load_coop_managers(request):
|
|
"""Read CSV file being received
|
|
Parse it to create users and related companies
|
|
"""
|
|
csv_file = request.FILES["csv_file"]
|
|
if csv_file.name.endswith('.csv') is not True:
|
|
logging.error(f"File {csv_file.name} is not a CSV file")
|
|
return Response({"errors":{"details": "File is not CSV type"}})
|
|
|
|
logging.info(f"Reading contents of {csv_file.name}")
|
|
csv_reader = csv.DictReader(csv_file, delimiter=',')
|
|
for row in csv_reader:
|
|
email = row['email']
|
|
cif = row['cif']
|
|
company_name = row['nombre-coop']
|
|
short_name = row['nombre-corto']
|
|
url = row['url']
|
|
shop = row['es-tienda']
|
|
|
|
coop = None
|
|
coop_user = User.objects.create_user(email=email, company=coop, role='COOP_MANAGER')
|
|
|
|
|
|
return Response
|