remove vm creation to util function

This commit is contained in:
Arvind Tiwari 2018-04-20 20:25:24 +05:30
parent fae1c7fbeb
commit 3debf34118
3 changed files with 82 additions and 118 deletions

View file

@ -1,5 +1,10 @@
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from datacenterlight.tasks import create_vm_task
from hosting.models import HostingOrder, HostingBill
from membership.models import StripeCustomer
from utils.forms import UserBillingAddressForm
from utils.models import BillingAddress
from .cms_models import CMSIntegration from .cms_models import CMSIntegration
@ -12,3 +17,57 @@ def get_cms_integration(name):
except CMSIntegration.DoesNotExist: except CMSIntegration.DoesNotExist:
cms_integration = CMSIntegration.objects.get(name=name, domain=None) cms_integration = CMSIntegration.objects.get(name=name, domain=None)
return cms_integration return cms_integration
def create_vm(billing_address_data, stripe_customer_id, specs,
stripe_subscription_obj, card_details_dict, request,
vm_template_id, template, user):
billing_address = BillingAddress(
cardholder_name=billing_address_data['cardholder_name'],
street_address=billing_address_data['street_address'],
city=billing_address_data['city'],
postal_code=billing_address_data['postal_code'],
country=billing_address_data['country']
)
billing_address.save()
customer = StripeCustomer.objects.filter(id=stripe_customer_id).first()
# Create a Hosting Order with vm_id = 0, we shall set it later in
# celery task once the VM instance is up and running
order = HostingOrder.create(
price=specs['price'],
vm_id=0,
customer=customer,
billing_address=billing_address
)
# Create a Hosting Bill
HostingBill.create(customer=customer, billing_address=billing_address)
# Create Billing Address for User if he does not have one
if not customer.user.billing_addresses.count():
billing_address_data.update({
'user': customer.user.id
})
billing_address_user_form = UserBillingAddressForm(
billing_address_data
)
billing_address_user_form.is_valid()
billing_address_user_form.save()
# Associate an order with a stripe subscription
order.set_subscription_id(
stripe_subscription_obj.id, card_details_dict
)
# If the Stripe payment succeeds, set order status approved
order.set_approved()
create_vm_task.delay(vm_template_id, user, specs, template, order.id)
for session_var in ['specs', 'template', 'billing_address',
'billing_address_data',
'token', 'customer']:
if session_var in request.session:
del request.session[session_var]

View file

@ -7,7 +7,7 @@ from django.contrib import messages
from django.contrib.auth import login, authenticate from django.contrib.auth import login, authenticate
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import get_language, ugettext_lazy as _ from django.utils.translation import get_language, ugettext_lazy as _
from django.views.decorators.cache import cache_control from django.views.decorators.cache import cache_control
@ -27,7 +27,7 @@ from utils.stripe_utils import StripeUtils
from utils.tasks import send_plain_email_task from utils.tasks import send_plain_email_task
from .forms import ContactForm from .forms import ContactForm
from .models import VMTemplate from .models import VMTemplate
from .utils import get_cms_integration from .utils import get_cms_integration, create_vm
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -390,8 +390,8 @@ class OrderConfirmationView(DetailView):
' On close of this popup, you will be redirected back to' ' On close of this popup, you will be redirected back to'
' the payment page.')) ' the payment page.'))
} }
return HttpResponse(json.dumps(response), return JsonResponse(response)
content_type="application/json")
card_details_dict = card_details.get('response_object') card_details_dict = card_details.get('response_object')
cpu = specs.get('cpu') cpu = specs.get('cpu')
memory = specs.get('memory') memory = specs.get('memory')
@ -431,8 +431,7 @@ class OrderConfirmationView(DetailView):
' On close of this popup, you will be redirected back to' ' On close of this popup, you will be redirected back to'
' the payment page.')) ' the payment page.'))
} }
return HttpResponse(json.dumps(response), return JsonResponse(response)
content_type="application/json")
# Create user if the user is not logged in and if he is not already # Create user if the user is not logged in and if he is not already
# registered # registered
@ -487,53 +486,11 @@ class OrderConfirmationView(DetailView):
'language': get_language(), 'language': get_language(),
} }
billing_address = BillingAddress( create_vm(
cardholder_name=billing_address_data['cardholder_name'], billing_address_data, stripe_customer_id, specs,
street_address=billing_address_data['street_address'], stripe_subscription_obj, card_details_dict, request,
city=billing_address_data['city'], vm_template_id, template, user
postal_code=billing_address_data['postal_code'],
country=billing_address_data['country']
) )
billing_address.save()
customer = StripeCustomer.objects.filter(id=stripe_customer_id).first()
# Create a Hosting Order with vm_id = 0, we shall set it later in
# celery task once the VM instance is up and running
order = HostingOrder.create(
price=specs['price'],
vm_id=0,
customer=customer,
billing_address=billing_address
)
# Create a Hosting Bill
HostingBill.create(customer=customer, billing_address=billing_address)
# Create Billing Address for User if he does not have one
if not customer.user.billing_addresses.count():
billing_address_data.update({
'user': customer.user.id
})
billing_address_user_form = UserBillingAddressForm(
billing_address_data)
billing_address_user_form.is_valid()
billing_address_user_form.save()
# Associate an order with a stripe subscription
order.set_subscription_id(
stripe_subscription_obj.id, card_details_dict
)
# If the Stripe payment succeeds, set order status approved
order.set_approved()
create_vm_task.delay(vm_template_id, user, specs, template, order.id)
for session_var in ['specs', 'template', 'billing_address',
'billing_address_data',
'token', 'customer']:
if session_var in request.session:
del request.session[session_var]
response = { response = {
'status': True, 'status': True,
@ -549,5 +506,4 @@ class OrderConfirmationView(DetailView):
' it is ready.')) ' it is ready.'))
} }
return HttpResponse(json.dumps(response), return JsonResponse(response)
content_type="application/json")

View file

@ -1,4 +1,3 @@
import json
import logging import logging
import uuid import uuid
from datetime import datetime from datetime import datetime
@ -12,7 +11,9 @@ from django.contrib.auth.tokens import default_token_generator
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.core.urlresolvers import reverse_lazy, reverse from django.core.urlresolvers import reverse_lazy, reverse
from django.http import Http404, HttpResponseRedirect, HttpResponse from django.http import (
Http404, HttpResponseRedirect, HttpResponse, JsonResponse
)
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from django.utils.http import urlsafe_base64_decode from django.utils.http import urlsafe_base64_decode
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
@ -31,7 +32,7 @@ from stored_messages.models import Message
from stored_messages.settings import stored_messages_settings from stored_messages.settings import stored_messages_settings
from datacenterlight.models import VMTemplate from datacenterlight.models import VMTemplate
from datacenterlight.tasks import create_vm_task from datacenterlight.utils import create_vm
from membership.models import CustomUser, StripeCustomer from membership.models import CustomUser, StripeCustomer
from opennebula_api.models import OpenNebulaManager from opennebula_api.models import OpenNebulaManager
from opennebula_api.serializers import ( from opennebula_api.serializers import (
@ -44,7 +45,6 @@ from utils.forms import (
) )
from utils.hosting_utils import get_vm_price from utils.hosting_utils import get_vm_price
from utils.mailer import BaseEmail from utils.mailer import BaseEmail
from utils.models import BillingAddress
from utils.stripe_utils import StripeUtils from utils.stripe_utils import StripeUtils
from utils.tasks import send_plain_email_task from utils.tasks import send_plain_email_task
from utils.views import ( from utils.views import (
@ -873,8 +873,8 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
' On close of this popup, you will be redirected back to' ' On close of this popup, you will be redirected back to'
' the payment page.')) ' the payment page.'))
} }
return HttpResponse(json.dumps(response), return JsonResponse(response)
content_type="application/json")
user = { user = {
'name': self.request.user.name, 'name': self.request.user.name,
'email': self.request.user.email, 'email': self.request.user.email,
@ -884,55 +884,11 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
'language': get_language(), 'language': get_language(),
} }
billing_address = BillingAddress( create_vm(
cardholder_name=billing_address_data['cardholder_name'], billing_address_data, stripe_customer_id, specs,
street_address=billing_address_data['street_address'], stripe_subscription_obj, card_details_dict, request,
city=billing_address_data['city'], vm_template_id, template, user
postal_code=billing_address_data['postal_code'],
country=billing_address_data['country']
) )
billing_address.save()
customer = StripeCustomer.objects.filter(id=stripe_customer_id).first()
# Create a Hosting Order with vm_id = 0, we shall set it later in
# celery task once the VM instance is up and running
order = HostingOrder.create(
price=specs['price'],
vm_id=0,
customer=customer,
billing_address=billing_address
)
# Create a Hosting Bill
HostingBill.create(customer=customer, billing_address=billing_address)
# Create Billing Address for User if he does not have one
if not customer.user.billing_addresses.count():
billing_address_data.update({
'user': customer.user.id
})
billing_address_user_form = UserBillingAddressForm(
billing_address_data
)
billing_address_user_form.is_valid()
billing_address_user_form.save()
# Associate an order with a stripe subscription
order.set_subscription_id(
stripe_subscription_obj.id, card_details_dict
)
# If the Stripe payment succeeds, set order status approved
order.set_approved()
create_vm_task.delay(vm_template_id, user, specs, template, order.id)
for session_var in ['specs', 'template', 'billing_address',
'billing_address_data',
'token', 'customer']:
if session_var in request.session:
del request.session[session_var]
response = { response = {
'status': True, 'status': True,
@ -944,8 +900,7 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
' it is ready.')) ' it is ready.'))
} }
return HttpResponse(json.dumps(response), return JsonResponse(response)
content_type="application/json")
class OrdersHostingListView(LoginRequiredMixin, ListView): class OrdersHostingListView(LoginRequiredMixin, ListView):
@ -1128,10 +1083,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
for m in storage: for m in storage:
pass pass
storage.used = True storage.used = True
return HttpResponse( return JsonResponse({'text': ugettext('Terminated')})
json.dumps({'text': ugettext('Terminated')}),
content_type="application/json"
)
else: else:
return redirect(reverse('hosting:virtual_machines')) return redirect(reverse('hosting:virtual_machines'))
elif self.request.is_ajax(): elif self.request.is_ajax():
@ -1262,10 +1214,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
["%s=%s" % (k, v) for (k, v) in admin_email_body.items()]), ["%s=%s" % (k, v) for (k, v) in admin_email_body.items()]),
} }
send_plain_email_task.delay(email_to_admin_data) send_plain_email_task.delay(email_to_admin_data)
return HttpResponse( return JsonResponse(response)
json.dumps(response),
content_type="application/json"
)
class HostingBillListView(PermissionRequiredMixin, LoginRequiredMixin, class HostingBillListView(PermissionRequiredMixin, LoginRequiredMixin,