from django.shortcuts import render from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from django.db import IntegrityError from django.forms.models import model_to_dict from django.core import serializers from rest_framework.response import Response from rest_framework import status from rest_framework.decorators import api_view import json import requests from .models import Well from .serializers import WellSerializer # Create your views here. @api_view(['POST']) def create_well(request): try: # return JsonResponse({ # "message": "Duplicate Record", # "status": 409, # }, # status = 409 # ) #if another formatting in request, try this: ''' data = request.POST new_well = data.dict() # change querydict to dict ''' data = request.body.decode('utf-8') serializer = WellSerializer(data=json.loads(data)) #serializer = WellSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) except Exception as e: print(e) return Response({"error": "Internal Server Error"}, status=500) # data = request.body.decode('utf-8') # serializer = WellSerializer(data=json.loads(data)) # if serializer.is_valid(): # serializer.save() # return JsonResponse( # { # "status": 200, # "message": "OK", # "created": serializer.data, # }, # status = 200 # ) # #Response(serializer.data, status=status.HTTP_201_CREATED) # else: # return JsonResponse( # { # "status": 400, # "message": "Bad Request", # }, # status = 400 # ) # new_well = json.loads(request.body.decode('utf-8')) # created_well = Well.objects.create(**new_well) # return JsonResponse({"data":[ # { # "error": "OK", # "created": new_well, # "well_id": created_well.id # }, # ]}, # status = 200 # ) @api_view(['GET']) def send_well_by_well_id(request, obj_id): try: #well = Well.objects.filter(id=obj_id).values()[0] #serialized_data = serializers.serialize('json', [well]) well = Well.objects.filter(id=obj_id).last() if well is None: return Response({"error": "Not Found"}, status=404) serializer = WellSerializer(well) return Response(serializer.data) # return JsonResponse( # {"well": serializer.data}, # status = 200 # ) except Exception as ex: print(ex) return Response({"error": "Internal Server Error"}, status=500) @api_view(['GET']) def send_wells(request): try: print("sending wells") # to do: add owner ''' raw_body = request.body users = json.loads(raw_body.decode('utf-8'))["data"] result = [] for well in wells: for user in users: if well["owner_id"] == user["id"]: well_info = well.copy() well_info.pop("owner_id", None) well_info["user_info"] = user result.append(well_info) break ''' wells = Well.objects.all() serializer = WellSerializer(wells, many=True) return Response(serializer.data) return JsonResponse({"data": list(wells)},status=200) except Exception as e: print(e) return Response({"error": "Bad Request"}, status=400) @csrf_exempt @api_view(['DELETE']) def delete_well_by_well_id(request, obj_id): try: instance = Well.objects.get(id=obj_id, log_type=0) instance.log_type = 1 instance.save() return Response({"detail": f"Successfully updated log type for well {instance.license_code}"}, status=status.HTTP_200_OK) except Well.DoesNotExist: return Response({"error": "Not Found"}, status=status.HTTP_404_NOT_FOUND) except Exception as e: print(e) return Response({"error": "Internal Server Error"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) # try: # instance = Well.objects.get(id=obj_id, log_type=0) # instance.log_type = 1 # instance.save() # return JsonResponse({"data":[ # { # "well": instance.license_code, # "error": "OK", # }, # ]}, # status = 200 # ) # except Exception as e: # print(e) # return JsonResponse({"data":[ # {"error": "Bad Request"} # ]}, # status = 400 # ) @api_view(['PUT']) def update_well_by_well_id(request, obj_id): try: instance = Well.objects.get(id=obj_id, log_type=0) instance.log_type = 2 instance.save() data = json.loads(request.body.decode('utf-8')) data["log_type"] = 0 serializer = WellSerializer(data=data) if serializer.is_valid(): return Response(serializer.data, status=status.HTTP_200_OK) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) except Well.DoesNotExist: return Response({"error": "Not Found"}, status=status.HTTP_404_NOT_FOUND) except Exception as e: print(e) return Response({"error": "Internal Server Error"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) # try: # instance = Well.objects.order_by('-pk').get(pk=obj_id) # instance.log_type = 2 # instance.save() # new_well = json.loads(request.body.decode('utf-8')) # created_well = Well.objects.create(**new_well) # return JsonResponse({"data":[ # { # "error": "OK", # "created": new_well, # "well_id": created_well.id # }, # ]}, # status = 200 # ) # except Exception as e: # if isinstance(e, IntegrityError): # return JsonResponse({"data":[ # { # "error": "Conflict", # "message": "Duplicate Record", # "status": 409, # } # ]}, # status = 409 # ) # print(e) # return JsonResponse({"data":[ # {"error": "Bad Request", # "status": 400 # }, # ]}, # status = 400 # ) @csrf_exempt def edit_well_by_well_id(request, obj_id): try: instance = Well.objects.get(id=obj_id, log_type=0) instance.log_type = 3 instance.save() data = json.loads(request.body.decode('utf-8')) data["log_type"] = 0 serializer = WellSerializer(data=data) if serializer.is_valid(): return Response(serializer.data, status=status.HTTP_200_OK) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) except Well.DoesNotExist: return Response({"error": "Not Found"}, status=status.HTTP_404_NOT_FOUND) except Exception as e: print(e) return Response({"error": "Internal Server Error"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) # try: # instance = Well.objects.order_by('-pk').get(pk=obj_id) # instance.log_type = 3 # instance.save() # new_well = json.loads(request.body.decode('utf-8')) # created_well = Well.objects.create(**new_well) # return JsonResponse({"data":[ # { # "error": "OK", # "created": new_well, # "well_id": created_well.id # }, # ]}, # status = 200 # ) # except Exception as e: # if isinstance(e, IntegrityError): # return JsonResponse({"data":[ # { # "error": "Conflict", # "message": "Duplicate Record", # "status": 409, # } # ]}, # status = 409 # ) # print(e) # return JsonResponse({"data":[ # {"error": "Bad Request", # "status": 400 # }, # ]}, # status = 400 # )