Allow unsafe async and make more things async

This commit is contained in:
2022-10-12 07:22:22 +01:00
parent 5bf65e3c90
commit 22df27178b
8 changed files with 215 additions and 25 deletions

View File

@@ -1,7 +1,7 @@
import logging
from asyncio import sleep
import stripe
from asgiref.sync import sync_to_async
from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse
@@ -23,34 +23,37 @@ class Home(View):
template_name = "index.html"
async def get(self, request):
await sleep(1)
return render(request, self.template_name)
class Billing(LoginRequiredMixin, View):
template_name = "billing.html"
def get(self, request):
context = {"plans": Plan.objects.all(), "user_plans": request.user.plans.all()}
async def get(self, request):
plans = await sync_to_async(list)(Plan.objects.all())
user_plans = await sync_to_async(list)(request.user.plans.all())
context = {"plans": plans, "user_plans": user_plans}
return render(request, self.template_name, context)
class Order(LoginRequiredMixin, View):
def get(self, request, plan_name):
async def get(self, request, plan_name):
plan = Plan.objects.get(name=plan_name)
try:
cast = {
"payment_method_types": settings.ALLOWED_PAYMENT_METHODS,
"mode": "subscription",
"customer": request.user.stripe_id,
"line_items": assemble_plan_map(product_id_filter=plan.product_id),
"line_items": await assemble_plan_map(
product_id_filter=plan.product_id
),
"success_url": request.build_absolute_uri(reverse("success")),
"cancel_url": request.build_absolute_uri(reverse("cancel")),
}
if request.user.is_superuser:
cast["discounts"] = [{"coupon": settings.STRIPE_ADMIN_COUPON}]
session = stripe.checkout.Session.create(**cast)
Session.objects.create(user=request.user, session=session.id)
await Session.objects.acreate(user=request.user, session=session.id)
return redirect(session.url)
# return JsonResponse({'id': session.id})
except Exception as e:
@@ -59,7 +62,7 @@ class Order(LoginRequiredMixin, View):
class Cancel(LoginRequiredMixin, View):
def get(self, request, plan_name):
async def get(self, request, plan_name):
plan = Plan.objects.get(name=plan_name)
try:
subscriptions = stripe.Subscription.list(
@@ -84,7 +87,7 @@ class Signup(CreateView):
class Portal(LoginRequiredMixin, View):
def get(self, request):
async def get(self, request):
session = stripe.billing_portal.Session.create(
customer=request.user.stripe_id,
return_url=request.build_absolute_uri(reverse("billing")),

View File

@@ -16,6 +16,7 @@ logger = logging.getLogger(__name__)
class Callback(APIView):
parser_classes = [JSONParser]
# TODO: make async
@csrf_exempt
def post(self, request):
payload = request.body

View File

@@ -7,14 +7,14 @@ from django.views import View
class DemoModal(View):
template_name = "modals/modal.html"
def get(self, request):
async def get(self, request):
return render(request, self.template_name)
class DemoWidget(View):
template_name = "widgets/widget.html"
def get(self, request):
async def get(self, request):
unique = str(uuid.uuid4())[:8]
return render(request, self.template_name, {"unique": unique})
@@ -22,5 +22,5 @@ class DemoWidget(View):
class DemoWindow(View):
template_name = "windows/window.html"
def get(self, request):
async def get(self, request):
return render(request, self.template_name)