Source code for smarter.apps.account.api.v1.views.account_contact
# pylint: disable=W0707,W0718
"""AccountContact views for smarter api."""
from http import HTTPStatus
from typing import Optional
from django.db import transaction
from django.http import (
HttpResponseBadRequest,
HttpResponseRedirect,
JsonResponse,
)
from django.shortcuts import get_object_or_404
from rest_framework.request import Request
from smarter.apps.account.models import AccountContact
from smarter.apps.account.serializers import AccountContactSerializer
from smarter.lib import logging
from smarter.lib.django.waffle import SmarterWaffleSwitches
from .base import AccountListViewBase, AccountViewBase
logger = logging.getSmarterLogger(__name__, any_switches=[SmarterWaffleSwitches.ACCOUNT_LOGGING])
# pylint: disable=W0613
[docs]
class AccountContactView(AccountViewBase):
"""AccountContact view for smarter api."""
serializer_class = AccountContactSerializer
account_contact: AccountContact
[docs]
def get(self, request: Request, account_contact_id: int):
self.account_contact = get_object_or_404(AccountContact, pk=account_contact_id)
return JsonResponse(self.serializer_class(self.account_contact).data)
[docs]
def patch(self, request: Request, account_contact_id: Optional[int] = None):
return HttpResponseBadRequest()
[docs]
def delete(self, request, account_contact_id: int):
self.account_contact = get_object_or_404(AccountContact, pk=account_contact_id)
try:
with transaction.atomic():
if not isinstance(self.account_contact, AccountContact):
return JsonResponse({"error": "AccountContact not found"}, status=HTTPStatus.NOT_FOUND)
self.account_contact.delete()
AccountContact.objects.get(user=request.user).delete()
except Exception as e:
return JsonResponse(
{"error": "Internal error", "exception": str(e)}, status=HTTPStatus.INTERNAL_SERVER_ERROR
)
plugins_path = request.path_info.rsplit("/", 2)[0]
return HttpResponseRedirect(plugins_path)
[docs]
class AccountContactListView(AccountListViewBase):
"""AccountContact list view for smarter api."""
serializer_class = AccountContactSerializer
[docs]
def get_queryset(self):
if not self.request:
return AccountContact.objects.none()
if not self.request.user.is_authenticated: # type: ignore
return AccountContact.objects.none()
if self.request.user.is_superuser: # type: ignore
return AccountContact.objects.all()
return AccountContact.objects.filter(account=self.user_profile.account) # type: ignore