a little bit of linting

This commit is contained in:
David Kennedy 2024-12-19 19:13:29 -05:00
parent 4e4e2c0d8e
commit 1fe97eb54e
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
8 changed files with 52 additions and 38 deletions

View file

@ -1483,7 +1483,7 @@ class PortfolioInvitationAdmin(ListHeaderAdmin):
extra_context["tabtitle"] = "Portfolio invitations" extra_context["tabtitle"] = "Portfolio invitations"
# Get the filtered values # Get the filtered values
return super().changelist_view(request, extra_context=extra_context) return super().changelist_view(request, extra_context=extra_context)
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):
""" """
Override the save_model method to send an email only on creation of the PortfolioInvitation object. Override the save_model method to send an email only on creation of the PortfolioInvitation object.
@ -1494,7 +1494,9 @@ class PortfolioInvitationAdmin(ListHeaderAdmin):
requestor = request.user requestor = request.user
requested_user = User.objects.filter(email=requested_email).first() requested_user = User.objects.filter(email=requested_email).first()
permission_exists = UserPortfolioPermission.objects.filter(user=requested_user, portfolio=portfolio).exists() permission_exists = UserPortfolioPermission.objects.filter(
user=requested_user, portfolio=portfolio
).exists()
try: try:
if not requested_user or not permission_exists: if not requested_user or not permission_exists:
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=portfolio) send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=portfolio)
@ -1511,14 +1513,21 @@ class PortfolioInvitationAdmin(ListHeaderAdmin):
def _handle_exceptions(self, exception, request, obj): def _handle_exceptions(self, exception, request, obj):
"""Handle exceptions raised during the process.""" """Handle exceptions raised during the process."""
if isinstance(exception, EmailSendingError): if isinstance(exception, EmailSendingError):
logger.warning("Could not sent email invitation to %s for portfolio %s (EmailSendingError)", obj.email, obj.portfolio, exc_info=True) logger.warning(
"Could not sent email invitation to %s for portfolio %s (EmailSendingError)",
obj.email,
obj.portfolio,
exc_info=True,
)
messages.error(request, "Could not send email invitation. Portfolio invitation not saved.") messages.error(request, "Could not send email invitation. Portfolio invitation not saved.")
elif isinstance(exception, MissingEmailError): elif isinstance(exception, MissingEmailError):
messages.error(request, str(exception)) messages.error(request, str(exception))
logger.error( logger.error(
f"Can't send email to '{obj.email}' for portfolio '{obj.portfolio}'. No email exists for the requestor.", f"Can't send email to '{obj.email}' for portfolio '{obj.portfolio}'. "
f"No email exists for the requestor.",
exc_info=True, exc_info=True,
) )
else: else:
logger.warning("Could not send email invitation (Other Exception)", obj.portfolio, exc_info=True) logger.warning("Could not send email invitation (Other Exception)", obj.portfolio, exc_info=True)
messages.error(request, "Could not send email invitation. Portfolio invitation not saved.") messages.error(request, "Could not send email invitation. Portfolio invitation not saved.")

View file

@ -12,7 +12,6 @@ from registrar.models import (
DomainInformation, DomainInformation,
Portfolio, Portfolio,
SeniorOfficial, SeniorOfficial,
User,
) )
from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices
@ -111,9 +110,9 @@ class PortfolioSeniorOfficialForm(forms.ModelForm):
return cleaned_data return cleaned_data
class BasePortfolioMemberForm(forms.ModelForm): class BasePortfolioMemberForm(forms.ModelForm):
"""Base form for the PortfolioMemberForm and PortfolioInvitedMemberForm""" """Base form for the PortfolioMemberForm and PortfolioInvitedMemberForm"""
required_star = '<abbr class="usa-hint usa-hint--required" title="required">*</abbr>' required_star = '<abbr class="usa-hint usa-hint--required" title="required">*</abbr>'
role = forms.ChoiceField( role = forms.ChoiceField(
choices=[ choices=[
@ -180,7 +179,7 @@ class BasePortfolioMemberForm(forms.ModelForm):
class Meta: class Meta:
model = None model = None
fields = ["roles", "additional_permissions" ] fields = ["roles", "additional_permissions"]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -242,7 +241,7 @@ class BasePortfolioMemberForm(forms.ModelForm):
logger.info(cleaned_data) logger.info(cleaned_data)
return cleaned_data return cleaned_data
def map_instance_to_initial(self): def map_instance_to_initial(self):
""" """
Maps self.instance to self.initial, handling roles and permissions. Maps self.instance to self.initial, handling roles and permissions.
@ -301,7 +300,7 @@ class PortfolioMemberForm(BasePortfolioMemberForm):
class Meta: class Meta:
model = UserPortfolioPermission model = UserPortfolioPermission
fields = ["roles", "additional_permissions" ] fields = ["roles", "additional_permissions"]
class PortfolioInvitedMemberForm(BasePortfolioMemberForm): class PortfolioInvitedMemberForm(BasePortfolioMemberForm):
@ -311,8 +310,7 @@ class PortfolioInvitedMemberForm(BasePortfolioMemberForm):
class Meta: class Meta:
model = PortfolioInvitation model = PortfolioInvitation
fields = ["roles", "additional_permissions" ] fields = ["roles", "additional_permissions"]
class PortfolioNewMemberForm(BasePortfolioMemberForm): class PortfolioNewMemberForm(BasePortfolioMemberForm):
@ -336,4 +334,3 @@ class PortfolioNewMemberForm(BasePortfolioMemberForm):
class Meta: class Meta:
model = PortfolioInvitation model = PortfolioInvitation
fields = ["portfolio", "email", "roles", "additional_permissions"] fields = ["portfolio", "email", "roles", "additional_permissions"]

View file

@ -7,7 +7,6 @@ from typing import Optional
from django_fsm import FSMField, transition, TransitionNotAllowed # type: ignore from django_fsm import FSMField, transition, TransitionNotAllowed # type: ignore
from django.db import models from django.db import models
from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from typing import Any from typing import Any
from registrar.models.host import Host from registrar.models.host import Host

View file

@ -10,6 +10,7 @@ import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class Portfolio(TimeStampedModel): class Portfolio(TimeStampedModel):
""" """
Portfolio is used for organizing domains/domain-requests into Portfolio is used for organizing domains/domain-requests into
@ -165,7 +166,7 @@ class Portfolio(TimeStampedModel):
def get_suborganizations(self): def get_suborganizations(self):
"""Returns all suborganizations associated with this portfolio""" """Returns all suborganizations associated with this portfolio"""
return self.portfolio_suborganizations.all() return self.portfolio_suborganizations.all()
def full_clean(self, exclude=None, validate_unique=True): def full_clean(self, exclude=None, validate_unique=True):
logger.info("portfolio full clean") logger.info("portfolio full clean")
super().full_clean(exclude, validate_unique) super().full_clean(exclude, validate_unique)

View file

@ -8,6 +8,7 @@ import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class UserPortfolioRoleChoices(models.TextChoices): class UserPortfolioRoleChoices(models.TextChoices):
""" """
Roles make it easier for admins to look at Roles make it easier for admins to look at

View file

@ -1,7 +1,5 @@
from django.conf import settings from django.conf import settings
from registrar.models import DomainInvitation from registrar.models import DomainInvitation
from registrar.models.portfolio_invitation import PortfolioInvitation
from registrar.models.user_portfolio_permission import UserPortfolioPermission
from registrar.utility.errors import ( from registrar.utility.errors import (
AlreadyDomainInvitedError, AlreadyDomainInvitedError,
AlreadyDomainManagerError, AlreadyDomainManagerError,
@ -9,7 +7,7 @@ from registrar.utility.errors import (
OutsideOrgMemberError, OutsideOrgMemberError,
) )
from registrar.utility.waffle import flag_is_active_for_user from registrar.utility.waffle import flag_is_active_for_user
from registrar.utility.email import send_templated_email, EmailSendingError from registrar.utility.email import send_templated_email
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -1128,7 +1128,10 @@ class DomainUsersView(DomainBaseView):
for portfolio_invitation in portfolio_invitations: for portfolio_invitation in portfolio_invitations:
logger.info(portfolio_invitation) logger.info(portfolio_invitation)
logger.info(portfolio_invitation.roles) logger.info(portfolio_invitation.roles)
if portfolio_invitation.roles and UserPortfolioRoleChoices.ORGANIZATION_ADMIN in portfolio_invitation.roles: if (
portfolio_invitation.roles
and UserPortfolioRoleChoices.ORGANIZATION_ADMIN in portfolio_invitation.roles
):
has_admin_flag = True has_admin_flag = True
break # Once we find one match, no need to check further break # Once we find one match, no need to check further
@ -1210,18 +1213,16 @@ class DomainAddUserView(DomainFormBaseView):
# Determine membership in a different organization # Determine membership in a different organization
member_of_a_different_org = ( member_of_a_different_org = (
(existing_org_permission and existing_org_permission.portfolio != requestor_org) or existing_org_permission and existing_org_permission.portfolio != requestor_org
(existing_org_invitation and existing_org_invitation.portfolio != requestor_org) ) or (existing_org_invitation and existing_org_invitation.portfolio != requestor_org)
)
# Determine membership in the same organization # Determine membership in the same organization
member_of_this_org = ( member_of_this_org = (existing_org_permission and existing_org_permission.portfolio == requestor_org) or (
(existing_org_permission and existing_org_permission.portfolio == requestor_org) or existing_org_invitation and existing_org_invitation.portfolio == requestor_org
(existing_org_invitation and existing_org_invitation.portfolio == requestor_org)
) )
return member_of_a_different_org, member_of_this_org return member_of_a_different_org, member_of_this_org
def form_valid(self, form): def form_valid(self, form):
"""Add the specified user to this domain.""" """Add the specified user to this domain."""
requested_email = form.cleaned_data["email"] requested_email = form.cleaned_data["email"]
@ -1232,7 +1233,9 @@ class DomainAddUserView(DomainFormBaseView):
# Get the requestor's organization # Get the requestor's organization
requestor_org = UserPortfolioPermission.objects.filter(user=requestor).first().portfolio requestor_org = UserPortfolioPermission.objects.filter(user=requestor).first().portfolio
member_of_a_different_org, member_of_this_org = self._get_org_membership(requestor_org, requested_email, requested_user) member_of_a_different_org, member_of_this_org = self._get_org_membership(
requestor_org, requested_email, requested_user
)
# determine portfolio of the domain (code currently is looking at requestor's portfolio) # determine portfolio of the domain (code currently is looking at requestor's portfolio)
# if requested_email/user is not member or invited member of this portfolio # if requested_email/user is not member or invited member of this portfolio
@ -1299,7 +1302,12 @@ class DomainAddUserView(DomainFormBaseView):
def _handle_exceptions(self, exception, email): def _handle_exceptions(self, exception, email):
"""Handle exceptions raised during the process.""" """Handle exceptions raised during the process."""
if isinstance(exception, EmailSendingError): if isinstance(exception, EmailSendingError):
logger.warning("Could not send email invitation to %s for domain %s (EmailSendingError)", email, self.object, exc_info=True) logger.warning(
"Could not send email invitation to %s for domain %s (EmailSendingError)",
email,
self.object,
exc_info=True,
)
messages.warning(self.request, "Could not send email invitation.") messages.warning(self.request, "Could not send email invitation.")
elif isinstance(exception, OutsideOrgMemberError): elif isinstance(exception, OutsideOrgMemberError):
logger.warning( logger.warning(
@ -1342,6 +1350,7 @@ class DomainAddUserView(DomainFormBaseView):
logger.warning("Could not send email invitation (Other Exception)", portfolio, exc_info=True) logger.warning("Could not send email invitation (Other Exception)", portfolio, exc_info=True)
messages.warning(self.request, "Could not send email invitation.") messages.warning(self.request, "Could not send email invitation.")
class DomainInvitationCancelView(SuccessMessageMixin, DomainInvitationPermissionCancelView): class DomainInvitationCancelView(SuccessMessageMixin, DomainInvitationPermissionCancelView):
object: DomainInvitation object: DomainInvitation
fields = [] fields = []

View file

@ -1,5 +1,4 @@
import logging import logging
from django.conf import settings
from django.http import Http404, JsonResponse from django.http import Http404, JsonResponse
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
@ -299,7 +298,7 @@ class PortfolioInvitedMemberEditView(PortfolioMemberEditPermissionView, View):
"invitation": portfolio_invitation, "invitation": portfolio_invitation,
}, },
) )
def post(self, request, pk): def post(self, request, pk):
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk)
form = self.form_class(request.POST, instance=portfolio_invitation) form = self.form_class(request.POST, instance=portfolio_invitation)
@ -520,7 +519,7 @@ class PortfolioAddMemberView(PortfolioMembersPermissionView, FormMixin):
self.object = None # No existing PortfolioInvitation instance self.object = None # No existing PortfolioInvitation instance
form = self.get_form() form = self.get_form()
return self.render_to_response(self.get_context_data(form=form)) return self.render_to_response(self.get_context_data(form=form))
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
"""Handle POST requests to process form submission.""" """Handle POST requests to process form submission."""
self.object = None # For a new invitation, there's no existing model instance self.object = None # For a new invitation, there's no existing model instance
@ -536,16 +535,16 @@ class PortfolioAddMemberView(PortfolioMembersPermissionView, FormMixin):
return self.form_valid(form) return self.form_valid(form)
else: else:
return self.form_invalid(form) return self.form_invalid(form)
def is_ajax(self): def is_ajax(self):
return self.request.headers.get("X-Requested-With") == "XMLHttpRequest" return self.request.headers.get("X-Requested-With") == "XMLHttpRequest"
def form_invalid(self, form): def form_invalid(self, form):
if self.is_ajax(): if self.is_ajax():
return JsonResponse({"is_valid": False}) # Return a JSON response return JsonResponse({"is_valid": False}) # Return a JSON response
else: else:
return super().form_invalid(form) # Handle non-AJAX requests normally return super().form_invalid(form) # Handle non-AJAX requests normally
def form_valid(self, form): def form_valid(self, form):
super().form_valid(form) super().form_valid(form)
if self.is_ajax(): if self.is_ajax():
@ -577,14 +576,15 @@ class PortfolioAddMemberView(PortfolioMembersPermissionView, FormMixin):
self._handle_exceptions(e, portfolio, requested_email) self._handle_exceptions(e, portfolio, requested_email)
return redirect(self.get_success_url()) return redirect(self.get_success_url())
def get_success_url(self):
"""Redirect to the members page."""
return reverse("members")
def _handle_exceptions(self, exception, portfolio, email): def _handle_exceptions(self, exception, portfolio, email):
"""Handle exceptions raised during the process.""" """Handle exceptions raised during the process."""
if isinstance(exception, EmailSendingError): if isinstance(exception, EmailSendingError):
logger.warning("Could not sent email invitation to %s for portfolio %s (EmailSendingError)", email, portfolio, exc_info=True) logger.warning(
"Could not sent email invitation to %s for portfolio %s (EmailSendingError)",
email,
portfolio,
exc_info=True,
)
messages.warning(self.request, "Could not send email invitation.") messages.warning(self.request, "Could not send email invitation.")
elif isinstance(exception, MissingEmailError): elif isinstance(exception, MissingEmailError):
messages.error(self.request, str(exception)) messages.error(self.request, str(exception))