def post(self, request, ns_instance, new_status, format=None): """ --- response_serializer: AccountSerializer """ queryset = Account.objects.filter(productType=settings.NETWORK_SERVICE, instanceId=ns_instance) if queryset.exists(): jsonStatus='{"status":"' + new_status + '"}' service = queryset[0] serializer = AccountSerializer(service, data=json.loads(jsonStatus)) try: if serializer.is_valid(): #saves the new status serializer.save() print "status changed " #start/stop the SLA enforcement accordingly if (new_status == settings.STATUS_RUNNING): self.startEnforcement(service.agreementId) if (new_status == settings.STATUS_STOPPED): self.stopEnforcement(service.agreementId) #prepares and sends the message to the queue message = {} message['instanceId'] = ns_instance message['event'] = new_status #print (json.dumps(serializer.data)) send_msg(json.dumps(serializer.data)) #update the status of the participant VNFs vnf_list = service.relatives.replace(" ", "").split(",") print "VNF list: ", vnf_list for vnfInstance in vnf_list: time.sleep(1) print "VNF: ", vnfInstance vnfquery = Account.objects.filter(productType=settings.VNF, instanceId=vnfInstance) vnf = vnfquery[0] vnfserializer = AccountSerializer(vnf, many=False, data=json.loads(jsonStatus)) if vnfserializer.is_valid(): #print "VNF2: ", json.dumps(vnfserializer.data) vnfserializer.save() #start/stop the SLA enforcement accordingly if (new_status == settings.STATUS_RUNNING): self.startEnforcement(vnf.agreementId) if (new_status == settings.STATUS_STOPPED): self.stopEnforcement(vnf.agreementId) return Response(serializer.data, status=status.HTTP_201_CREATED) except ReferenceError: print " [ERROR] Could not update the messages queue" return Response(status=status.HTTP_408_REQUEST_TIMEOUT) except Exception as e: print " [ERROR] ", e return Response(status=status.HTTP_400_BAD_REQUEST) return Response(queryset, status=status.HTTP_404_NOT_FOUND)
def get(self, request, vnf_instance, new_status, format=None): queryset = Account.objects.filter(productType=settings.VNF, instanceId=vnf_instance) if queryset.exists(): jsonStatus = '{"status":"' + new_status + '"}' for account in queryset: serializer = AccountSerializer(account, data=json.loads(jsonStatus)) try: if serializer.is_valid(): #saves the new status serializer.save() print "status changed " #prepares and sends the message to the queue message = {} message['instanceId'] = vnf_instance message['event'] = new_status #send_msg(json.dumps(serializer.data)) return Response(serializer.data, status=status.HTTP_201_CREATED) except ReferenceError: print " [ERROR] Could not update the messages queue" return Response(status=status.HTTP_408_REQUEST_TIMEOUT) except Exception: return Response(status=status.HTTP_400_BAD_REQUEST) return Response(queryset, status=status.HTTP_404_NOT_FOUND)
def post(self, request, format=None): serializer = AccountSerializer(data=request.data) if serializer.is_valid(): try: if Account.objects.filter(productType=request.data['productType'], instanceId=request.data['instanceId']): print (" [ERROR] There is an entry already with that InstanceId (%s) for the same ProductType (%s)" % (request.data['instanceId'], request.data['productType'])) return Response(status=status.HTTP_400_BAD_REQUEST) serializer.save() #prepares and sends the message to the queue message = {} message['instanceId'] = request.data['instanceId'] message['event'] = request.data['status'] #send_msg(str(message)) send_msg(json.dumps(serializer.data)) #create the SLA agreements in the SLA module based on the already created templates templateId = request.data['productType']+request.data['productId']+request.data['flavour'] createAgreement(templateId, request.data['clientId'], request.data['agreementId']) #start the Agreement enforcement f = restclient.Factory(settings.SLA_URL) a_enforcement = f.enforcements() a_enforcement.start(request.data['agreementId']) except ReferenceError: print " [ERROR] Could not update the messages queue" return Response(status=status.HTTP_408_REQUEST_TIMEOUT) except Exception as e: print "DEBUG: ", e return Response(status=status.HTTP_400_BAD_REQUEST) return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def user_list(request, pk=None): """ List all required messages, or create a new message. """ if request.method == 'GET': if pk: # If PrimaryKey (id) of the user is specified in the url users = Account.objects.filter( id=pk) # Select only that particular user else: users = Account.objects.all() # Else get all user list serializer = AccountSerializer(users, many=True, context={'request': request}) return JsonResponse(serializer.data, safe=False) # Return serialized data elif request.method == 'POST': data = JSONParser().parse( request ) # On POST, parse the request object to obtain the data in json serializer = AccountSerializer(data=data) # Seraialize the data if serializer.is_valid(): serializer.save() # Save it if valid return JsonResponse(serializer.data, status=201) # Return back the data on success return JsonResponse(serializer.errors, status=400) # Return back the errors if not valid
def accounts_delete(request): """ Function to manage the deletion of the accounts """ # Creating the default value account = None # If not declared in settings, configuring a default value # http://www.django-rest-framework.org/api-guide/exceptions/#exception-handling-in-rest-framework-views try: nfe = settings.NON_FIELD_ERRORS_KEY except AttributeError: nfe = 'non_field_errors' # Parsing data from the request and changing the creator field for the user who did the request data = JSONParser().parse(request) data['creator'] = request.user.pk # Check if all the data is valid to be used serializer = AccountSerializer(data=data) if serializer.is_valid(): # If valid, try to get the model instance to check if already exists try: account = Account.objects.get(id=serializer.validated_data['id']) # Check if the creator is who did the request if request.user.pk == account.creator.pk: account.delete() return Response({ 'status': 'ok', 'message': 'deleted' }) else: return Response( { 'errors': { nfe: 'No permissions', } }, status=status.HTTP_400_BAD_REQUEST, ) except Account.DoesNotExist: return Response( { 'errors': { nfe: 'Not exists', } }, status=status.HTTP_400_BAD_REQUEST, ) else: return Response( { 'errors': { 'data_validation_error': 'Error validating data', } }, status=status.HTTP_400_BAD_REQUEST, )
def put(self, request, pk, format=None): account = self.get_object(pk) serializer = AccountSerializer(account, data=request.data) print "request: ", request.data if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): if request.user.is_authenticated: serializer = AccountSerializer(data=request.data) if serializer.is_valid(): serializer.save(owner=request.user) return JsonResponse(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_401_UNAUTHORIZED)
def post(request): account = Account.get_by_pk(request.user.username) if account is None: return Response({'detail': 'account is not found'}, status=status.HTTP_404_NOT_FOUND) serializer = AccountSerializer(instance=account, data=request.data) if serializer.is_valid(): serializer.save() return Response({'detail': 'account has been edited'}, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): data = request.data.copy() data['password'] = gen_password(len_to=10) serializer = AccountSerializer(data=data) if serializer.is_valid(): serializer.save() threading.Thread(target=self._send_credentials, kwargs=data).start() return Response({'detail': 'account has been created'}, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def add(request): data = AccountSerializer(data=request.data) if not data.is_valid(): return Response({ 'status': 400, 'result': False }, status=resp_status.HTTP_404_NOT_FOUND) uuid = data.validated_data['uuid'] value = data.validated_data['value'] try: model = Account.objects.get(pk=uuid) except ObjectDoesNotExist: return Response({ 'status': 400, 'result': False }, status=resp_status.HTTP_404_NOT_FOUND) if not model.status: return Response( { 'status': 405, 'result': False, 'addition': { 'uuid': model.uuid, 'name': model.name, 'balance': model.balance, 'status': model.status }, 'description': { 'status': 'Счет закрыт' } }, status=resp_status.HTTP_405_METHOD_NOT_ALLOWED) model.balance += value model.save() return Response( { 'status': 200, 'result': True, 'addition': { 'uuid': model.uuid, 'name': model.name, 'balance': model.balance, 'status': model.status }, 'description': { 'status': 'Счет пополнен' } }, status=resp_status.HTTP_200_OK)
def post(request): email = request.data.get('email') if email is None: return Response({'detail': 'email was not provided'}, status=status.HTTP_400_BAD_REQUEST) account = Account.objects.filter(email=email).first() if account is None: return Response({'detail': 'account is not found'}, status=status.HTTP_404_NOT_FOUND) if 'confirmation_code' not in request.data: return Response({'detail': 'missing verification code'}, status=status.HTTP_400_BAD_REQUEST) session = SessionStore(session_key=account.session_key) if request.data.get('confirmation_code', '-1') == session['v_code']: new_password = request.data.get('new_password', None) new_password_confirm = request.data.get('new_password_confirm', None) if new_password is None or new_password_confirm is None: return Response( {'detail': 'missing new password or its confirmation'}, status=status.HTTP_400_BAD_REQUEST) if new_password != new_password_confirm: return Response({'detail': 'password confirmation failed'}, status=status.HTTP_400_BAD_REQUEST) data = request.data.copy() data['username'] = account.username data['password'] = new_password serializer = AccountSerializer(instance=account, data=data) if serializer.is_valid(): serializer.save() session.delete() account.session_key = None account.save() try: request.user.auth_token.delete() except (AttributeError, ObjectDoesNotExist): pass logout(request) return Response({'detail': 'password has been changed'}, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: return Response({'detail': 'verification code is incorrect'}, status=status.HTTP_400_BAD_REQUEST)
def stopVNF(self, vnfInstance, jsonStatus, new_status): vnfquery = Account.objects.filter(productType=settings.VNF, instanceId=vnfInstance) vnf = vnfquery[0] vnfSerializer = AccountSerializer(vnf, many=False, data=json.loads(jsonStatus)) if vnfSerializer.is_valid(): #print "VNF2: ", json.dumps(vnfserializer.data) vnfSerializer.save() #Send the message to the billing module send_msg(json.dumps(vnfSerializer.data)) #start/stop the SLA enforcement accordingly if (new_status == settings.STATUS_RUNNING): self.startEnforcement(vnf.agreementId) if (new_status == settings.STATUS_STOPPED): self.stopEnforcement(vnf.agreementId)
def account_list(request): if request.method == 'GET': account = Account.objects.all() account_serializer = AccountSerializer(account, many=True) return JSONResponse(account_serializer.data) elif request.method == 'POST': account_data = JSONParser().parse(request) account_serializer = AccountSerializer(data=account_data) if account_serializer.is_valid(): account_serializer.save() return JSONResponse(account_serializer.data, status=status.HTTP_201_CREATED) return JSONResponse(account_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def accounts_add(request): """ Function to manage the addition of new accounts """ # Creating the default value response = {} # If not declared in settings, configuring a default value # http://www.django-rest-framework.org/api-guide/exceptions/#exception-handling-in-rest-framework-views try: nfe = settings.NON_FIELD_ERRORS_KEY except AttributeError: nfe = 'non_field_errors' # Parsing data from the request and changing the creator field for the user who did the request data = JSONParser().parse(request) data['creator'] = request.user.pk # Check if all the data is valid to be used serializer = AccountSerializer(data=data) if serializer.is_valid(): # If valid, create it and notify try: Account.objects.get(iban=serializer.validated_data['iban']) response = { 'errors': { nfe: 'iban already exists', } } return Response(response, status=status.HTTP_400_BAD_REQUEST) except Account.DoesNotExist: serializer.create(serializer.validated_data) response = { 'status': 'ok', 'message': 'created' } return Response(response, status=status.HTTP_201_CREATED) else: # If not valid, raise an error for data_validation response = { {'errors': {'data_validation_error': 'Error validating data'}} } return Response(response, status=status.HTTP_400_BAD_REQUEST)
def registration_admin_view(request): if request.method == 'POST': data = {} email = request.data.get('email', '0').lower() if validate_email(email) != None: data['error_message'] = 'That email is already in use.' data['response'] = 'Error' return Response(data) serializer = AccountSerializer(data=request.data) if serializer.is_valid(): account = serializer.save() data['response'] = 'successfully registered new user.' data['email'] = account.email data['pk'] = account.pk token = Token.objects.get(user=account).key data['token'] = token else: data = serializer.errors return Response(data)
def post(self, request, format=None): serializer = AccountSerializer(data=request.data) if serializer.is_valid(): try: if Account.objects.filter( productType=request.data['productType'], instanceId=request.data['instanceId']): print( " [ERROR] There is an entry already with that InstanceId (%s) for the same ProductType (%s)" % (request.data['instanceId'], request.data['productType'])) return Response(status=status.HTTP_400_BAD_REQUEST) serializer.save() #create the SLA agreements in the SLA module based on the already created templates #templateId = request.data['productType']+request.data['productId']+request.data['flavour'] templateId = request.data[ 'productType'] + "@" + settings.DOMAIN_ID + "*" + request.data[ 'productId'] + request.data['flavour'] createAgreement(templateId, request.data['clientId'], request.data['agreementId']) #start the Agreement enforcement f = restclient.Factory(settings.SLA_URL) a_enforcement = f.enforcements() a_enforcement.start(request.data['agreementId']) #triggers IMoS monitoring sending the NS instance ID if (request.data['agreementId'].startswith('ns')): print(" [INFO] Contacting IMoS with url: %s" % (settings.IMOS_URL + request.data['instanceId'])) requests.put(str(settings.IMOS_URL) + str(request.data['instanceId']), data=None) #Virtual Links agreements: except Exception as e: print "DEBUG: ", e return Response(status=status.HTTP_400_BAD_REQUEST) return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def account_detail(request, pk): try: account = Account.objects.get(pk=pk) except Account.DoesNotExist: return HttpResponse(status=status.HTTP_400_BAD_REQUEST) if request.method == 'GET': account_serializer = AccountSerializer(account) return JSONResponse(account_serializer.data) elif request.method == 'PUT': account_data = JSONParser().parse(request) account_serializer = AccountSerializer(account, data=account_data) if account_serializer.is_valid(): account_serializer.save() return JSONResponse(account_serializer.data) return JSONResponse(account_serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': account.delete() return HttpResponse(status=status.HTTP_204_NO_CONTENT)
def get(self, request, vnf_instance, new_status, format=None): queryset = Account.objects.filter(productType=settings.VNF, instanceId=vnf_instance) if queryset.exists(): jsonStatus='{"status":"' + new_status + '"}' for account in queryset: serializer = AccountSerializer(account, data=json.loads(jsonStatus)) try: if serializer.is_valid(): #saves the new status serializer.save() print "status changed " #prepares and sends the message to the queue message = {} message['instanceId'] = vnf_instance message['event'] = new_status #send_msg(str(message)) send_msg(json.dumps(serializer.data)) return Response(serializer.data, status=status.HTTP_201_CREATED) except ReferenceError: print " [ERROR] Could not update the messages queue" return Response(status=status.HTTP_408_REQUEST_TIMEOUT) except Exception: return Response(status=status.HTTP_400_BAD_REQUEST) return Response(queryset, status=status.HTTP_404_NOT_FOUND)
def substract(request): data = AccountSerializer(data=request.data) if not data.is_valid(): return Response({ 'status': 400, 'result': False }, status=resp_status.HTTP_404_NOT_FOUND) uuid = data.validated_data['uuid'] value = data.validated_data['value'] try: model = Account.objects.get(pk=uuid) except ObjectDoesNotExist: return Response({ 'status': 400, 'result': False }, status=resp_status.HTTP_404_NOT_FOUND) if not model.status: return Response( { 'status': 405, 'result': False, 'addition': { 'uuid': model.uuid, 'name': model.name, 'balance': model.balance, 'status': model.status }, 'description': { 'status': 'Счет закрыт' } }, status=resp_status.HTTP_405_METHOD_NOT_ALLOWED) result = model.balance - model.hold - value is_possible = True if result >= 0 else False if not is_possible: return Response( { 'status': 405, 'result': False, 'addition': { 'uuid': model.uuid, 'name': model.name, 'balance': model.balance, 'status': model.status }, 'description': { 'status': 'Недостаточно средств' } }, status=resp_status.HTTP_405_METHOD_NOT_ALLOWED) model.balance = result model.save() return Response( { 'status': 200, 'result': True, 'addition': { 'uuid': model.uuid, 'name': model.name, 'balance': model.balance, 'status': model.status }, 'description': { 'status': 'Списание произведено' } }, status=resp_status.HTTP_200_OK)