From 9f663a3ca0498e8fdec1140774988e5f21056b47 Mon Sep 17 00:00:00 2001 From: v_anne <69829523+v-anne@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:34:41 -0500 Subject: [PATCH 1/4] allowing users to see how many prayers remaining --- cl/favorites/api_serializers.py | 2 +- cl/favorites/templates/user_prayers.html | 9 +-------- cl/favorites/tests.py | 8 ++++---- cl/favorites/utils.py | 6 +++--- cl/favorites/views.py | 5 +++-- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/cl/favorites/api_serializers.py b/cl/favorites/api_serializers.py index a12bb4c101..60b9efedbd 100644 --- a/cl/favorites/api_serializers.py +++ b/cl/favorites/api_serializers.py @@ -67,7 +67,7 @@ def validate(self, data): ) # Check if the user is eligible to create a new prayer - if not async_to_sync(prayer_eligible)(user): + if not async_to_sync(prayer_eligible)(user)[0]: raise ValidationError( f"You have reached the maximum number of prayers ({settings.ALLOWED_PRAYER_COUNT}) allowed in the last 24 hours." ) diff --git a/cl/favorites/templates/user_prayers.html b/cl/favorites/templates/user_prayers.html index 4ada025de6..f010632d16 100644 --- a/cl/favorites/templates/user_prayers.html +++ b/cl/favorites/templates/user_prayers.html @@ -14,7 +14,7 @@ {% block content %}

{% if is_page_owner %}Your PACER Document Prayers{% else %}PACER Document Requests for: {{ requested_user }}{% endif %}

- {% if is_page_owner %}

{{ count|intcomma }} prayers granted totaling ${{total_cost|floatformat:2 }}.

{% endif %} + {% if is_page_owner %}

{{ count|intcomma }} prayers granted totaling ${{total_cost|floatformat:2 }} ({{ num_remaining }} remaining today).

{% endif %}
{% if is_page_owner %}Your PACER Docume hx-trigger="prayersListChanged from:body" hx-swap="none" {%endif %} > -
- {% if is_page_owner %} -

- {% if is_eligible %}You are eligible to make document requests.{% else %}You have reached your daily limit; wait 24 hours to make new requests.{% endif %} -

- {% endif %} -
diff --git a/cl/favorites/tests.py b/cl/favorites/tests.py index 35c32652a2..e5ad413153 100644 --- a/cl/favorites/tests.py +++ b/cl/favorites/tests.py @@ -699,7 +699,7 @@ async def test_prayer_eligible(self) -> None: current_time = now() with time_machine.travel(current_time, tick=False): # No user prayers in the last 24 hours yet for this user. - user_is_eligible = await prayer_eligible(self.user) + user_is_eligible, _ = await prayer_eligible(self.user) self.assertTrue(user_is_eligible) # Add prays for this user. @@ -709,7 +709,7 @@ async def test_prayer_eligible(self) -> None: user_prays = Prayer.objects.filter(user=self.user) self.assertEqual(await user_prays.acount(), 1) - user_is_eligible = await prayer_eligible(self.user) + user_is_eligible, _ = await prayer_eligible(self.user) self.assertTrue(user_is_eligible) await sync_to_async(PrayerFactory)( @@ -719,7 +719,7 @@ async def test_prayer_eligible(self) -> None: # After two prays (ALLOWED_PRAYER_COUNT) in the last 24 hours. # The user is no longer eligible to create more prays - user_is_eligible = await prayer_eligible(self.user) + user_is_eligible, _ = await prayer_eligible(self.user) self.assertFalse(user_is_eligible) with time_machine.travel( @@ -730,7 +730,7 @@ async def test_prayer_eligible(self) -> None: user=self.user, recap_document=self.rd_3 ) self.assertEqual(await user_prays.acount(), 3) - user_is_eligible = await prayer_eligible(self.user) + user_is_eligible, _ = await prayer_eligible(self.user) self.assertTrue(user_is_eligible) async def test_create_prayer(self) -> None: diff --git a/cl/favorites/utils.py b/cl/favorites/utils.py index 9e87389890..85b09c7ad6 100644 --- a/cl/favorites/utils.py +++ b/cl/favorites/utils.py @@ -28,7 +28,7 @@ from cl.search.models import RECAPDocument -async def prayer_eligible(user: User) -> bool: +async def prayer_eligible(user: User) -> Tuple[bool, int]: allowed_prayer_count = settings.ALLOWED_PRAYER_COUNT now = timezone.now() @@ -39,13 +39,13 @@ async def prayer_eligible(user: User) -> bool: user=user, date_created__gte=last_24_hours ).acount() - return prayer_count < allowed_prayer_count + return prayer_count < allowed_prayer_count, (allowed_prayer_count - prayer_count) async def create_prayer( user: User, recap_document: RECAPDocument ) -> Prayer | None: - if await prayer_eligible(user) and not recap_document.is_available: + if await prayer_eligible(user)[0] and not recap_document.is_available: new_prayer, created = await Prayer.objects.aget_or_create( user=user, recap_document=recap_document ) diff --git a/cl/favorites/views.py b/cl/favorites/views.py index bd2c8ea5b5..6f72e652b4 100644 --- a/cl/favorites/views.py +++ b/cl/favorites/views.py @@ -212,7 +212,7 @@ async def create_prayer_view( user = request.user is_htmx_request = request.META.get("HTTP_HX_REQUEST", False) regular_size = bool(request.POST.get("regular_size")) - if not await prayer_eligible(request.user): + if not await prayer_eligible(request.user)[0]: if is_htmx_request: return TemplateResponse( request, @@ -291,7 +291,7 @@ async def user_prayers_view( count, total_cost = await get_user_prayer_history(requested_user) - is_eligible = await prayer_eligible(requested_user) + is_eligible, num_remaining = await prayer_eligible(requested_user) context = { "rd_with_prayers": rd_with_prayers, @@ -300,6 +300,7 @@ async def user_prayers_view( "count": count, "total_cost": total_cost, "is_eligible": is_eligible, + "num_remaining": num_remaining, "private": False, } From 923a21c7a196366bad94f28d92ca498e06ba3992 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 22:37:36 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- cl/favorites/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cl/favorites/utils.py b/cl/favorites/utils.py index 85b09c7ad6..798ac21c7e 100644 --- a/cl/favorites/utils.py +++ b/cl/favorites/utils.py @@ -39,7 +39,9 @@ async def prayer_eligible(user: User) -> Tuple[bool, int]: user=user, date_created__gte=last_24_hours ).acount() - return prayer_count < allowed_prayer_count, (allowed_prayer_count - prayer_count) + return prayer_count < allowed_prayer_count, ( + allowed_prayer_count - prayer_count + ) async def create_prayer( From 8349d764baea06083f7427adf59294443b198198 Mon Sep 17 00:00:00 2001 From: v_anne <69829523+v-anne@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:39:53 -0500 Subject: [PATCH 3/4] fixing type hint --- cl/favorites/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cl/favorites/utils.py b/cl/favorites/utils.py index 798ac21c7e..88ecaf9834 100644 --- a/cl/favorites/utils.py +++ b/cl/favorites/utils.py @@ -28,7 +28,7 @@ from cl.search.models import RECAPDocument -async def prayer_eligible(user: User) -> Tuple[bool, int]: +async def prayer_eligible(user: User) -> tuple[bool, int]: allowed_prayer_count = settings.ALLOWED_PRAYER_COUNT now = timezone.now() From a0bccda4d8caa5bd45f52585535254a9320b5011 Mon Sep 17 00:00:00 2001 From: v_anne <69829523+v-anne@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:57:18 -0500 Subject: [PATCH 4/4] fixing coroutines --- cl/favorites/utils.py | 2 +- cl/favorites/views.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cl/favorites/utils.py b/cl/favorites/utils.py index 88ecaf9834..7de09fbb7e 100644 --- a/cl/favorites/utils.py +++ b/cl/favorites/utils.py @@ -47,7 +47,7 @@ async def prayer_eligible(user: User) -> tuple[bool, int]: async def create_prayer( user: User, recap_document: RECAPDocument ) -> Prayer | None: - if await prayer_eligible(user)[0] and not recap_document.is_available: + if (await prayer_eligible(user))[0] and not recap_document.is_available: new_prayer, created = await Prayer.objects.aget_or_create( user=user, recap_document=recap_document ) diff --git a/cl/favorites/views.py b/cl/favorites/views.py index 6f72e652b4..7cd880e1af 100644 --- a/cl/favorites/views.py +++ b/cl/favorites/views.py @@ -212,7 +212,7 @@ async def create_prayer_view( user = request.user is_htmx_request = request.META.get("HTTP_HX_REQUEST", False) regular_size = bool(request.POST.get("regular_size")) - if not await prayer_eligible(request.user)[0]: + if not (await prayer_eligible(request.user))[0]: if is_htmx_request: return TemplateResponse( request,