Skip to content

Commit

Permalink
Fix flake
Browse files Browse the repository at this point in the history
  • Loading branch information
meomancer committed Jul 25, 2023
1 parent dcb2f34 commit 6748279
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 3 deletions.
2 changes: 2 additions & 0 deletions django_project/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ class UserProfileAdmin(UserAdmin):


class UserAccessRequestAdmin(admin.ModelAdmin):
"""User access request admin."""

list_display = (
'requester_email', 'requester_first_name', 'type',
'status', 'submitted_on'
Expand Down
4 changes: 4 additions & 0 deletions django_project/core/api/access_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@

class AccessRequestList(APIView):
"""List access request."""

permission_classes = (AdminAuthenticationPermission,)

def get(self, request, request_type, *args, **kwargs):
"""Get access request list."""
if request_type not in ACCESS_REQUEST_TYPE_LIST:
raise ValidationError(f'Invalid request type: {request_type}')
status = request.GET.get('status', None)
Expand All @@ -54,9 +56,11 @@ def get(self, request, request_type, *args, **kwargs):

class AccessRequestDetail(APIView):
"""Approve/Reject access request."""

permission_classes = (AdminAuthenticationPermission,)

def get(self, request, pk, *args, **kwargs):
"""Get access request detail."""
request_obj = get_object_or_404(UserAccessRequest, pk=pk)
return Response(
status=200,
Expand Down
16 changes: 16 additions & 0 deletions django_project/core/models/access_request.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
# coding=utf-8
"""
GeoSight is UNICEF's geospatial web-based business intelligence platform.
Contact : [email protected]
.. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
"""
__author__ = '[email protected]'
__date__ = '25/07/2023'
__copyright__ = ('Copyright 2023, Unicef')

from uuid import uuid4

from django.conf import settings
Expand Down
26 changes: 24 additions & 2 deletions django_project/core/serializer/access_request.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,39 @@
# coding=utf-8
"""
GeoSight is UNICEF's geospatial web-based business intelligence platform.
Contact : [email protected]
.. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
"""
__author__ = '[email protected]'
__date__ = '25/07/2023'
__copyright__ = ('Copyright 2023, Unicef')

from rest_framework import serializers

from core.models.access_request import UserAccessRequest


class AccessRequestSerializer(serializers.ModelSerializer):
"""Access request serializer."""

name = serializers.SerializerMethodField()
submitted_date = serializers.DateTimeField(source='submitted_on')

def get_name(self, obj: UserAccessRequest):
"""Get name of access."""
if obj.requester_first_name and obj.requester_last_name:
return f'{obj.requester_first_name} {obj.requester_last_name}'
elif obj.requester_first_name:
return obj.requester_first_name
return '-'

class Meta:
class Meta: # noqa: D106
model = UserAccessRequest
fields = [
'id',
Expand All @@ -27,14 +46,17 @@ class Meta:


class AccessRequestDetailSerializer(serializers.ModelSerializer):
"""Access request serializer for detail."""

approval_by = serializers.SerializerMethodField()

def get_approval_by(self, obj: UserAccessRequest):
"""Get approval by username."""
if obj.approved_by:
return obj.approved_by.username
return None

class Meta:
class Meta: # noqa: D106
model = UserAccessRequest
fields = [
'id',
Expand Down
4 changes: 4 additions & 0 deletions django_project/frontend/views/admin/access_request/detail.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class AccessRequestDetailView(RoleSuperAdminRequiredMixin, AdminBaseView, ABC):
def approval_request(
self, obj: UserAccessRequest, is_approve: bool, remarks: str
):
"""Approval request."""
obj.approved_date = datetime.now()
obj.approved_by = self.request.user
obj.approver_notes = remarks
Expand All @@ -51,6 +52,7 @@ def approval_request(
obj.save()

def notify_requester_new_user(self, obj: UserAccessRequest):
"""Notify new user."""
request_from = '-'
if obj.requester_first_name:
request_from = obj.requester_first_name
Expand Down Expand Up @@ -96,6 +98,7 @@ def notify_requester_new_user(self, obj: UserAccessRequest):
)

def notify_requester_access_request(self, obj: UserAccessRequest):
"""Approval requester for access request."""
request_from = '-'
if obj.requester_first_name:
request_from = obj.requester_first_name
Expand Down Expand Up @@ -142,6 +145,7 @@ def notify_requester_access_request(self, obj: UserAccessRequest):
)

def approve_new_user_access(self, obj: UserAccessRequest):
"""Approve new user."""
# create new user + set as viewer
user, created = User.objects.get_or_create(
username=obj.requester_email,
Expand Down
4 changes: 3 additions & 1 deletion django_project/frontend/views/admin/access_request/list.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ def content_title(self):
return f'<a href="{list_url}">Request New User</a> '


class AccessRequestPermissionListView(RoleSuperAdminRequiredMixin, AdminBaseView):
class AccessRequestPermissionListView(
RoleSuperAdminRequiredMixin, AdminBaseView
):
"""Access Request Detail View."""

template_name = 'frontend/admin/access_request/list/permission.html'
Expand Down
7 changes: 7 additions & 0 deletions django_project/frontend/views/sign_up.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@


class SignUpForm(forms.Form):
"""Sign Up form."""

required_css_class = 'required'
first_name = forms.CharField(max_length=150, required=True)
last_name = forms.CharField(max_length=150, required=False)
Expand All @@ -41,6 +43,7 @@ class SignUpForm(forms.Form):
captcha = CaptchaField()

def send_email(self, obj: UserAccessRequest, request):
"""Send email."""
admin_emails = SitePreferences.preferences().default_admin_emails
if not admin_emails:
return
Expand Down Expand Up @@ -83,6 +86,7 @@ def send_email(self, obj: UserAccessRequest, request):
)

def save(self, request):
"""Save data."""
access_request = UserAccessRequest.objects.create(
type=UserAccessRequest.RequestType.NEW_USER,
status=UserAccessRequest.RequestStatus.PENDING,
Expand All @@ -97,11 +101,13 @@ def save(self, request):

class SignUpView(FormView):
"""Login Create View."""

template_name = 'frontend/sign_up.html'
form_class = SignUpForm
success_url = "/sign-up/?success=true"

def form_valid(self, form):
"""Form is valid."""
if form.is_valid():
# if user has pending request, then skip save
check_exist = UserAccessRequest.objects.filter(
Expand All @@ -114,6 +120,7 @@ def form_valid(self, form):
return super().form_valid(form)

def get(self, request, *args, **kwargs):
"""GET request."""
if request.user.is_authenticated:
return HttpResponseRedirect('/')
return super(SignUpView, self).get(request, *args, **kwargs)
Expand Down

0 comments on commit 6748279

Please sign in to comment.