Loading Procfile +1 −1 Changes for Procfile: 1 added line, 1 removed line. Original line number Diff line number Diff line web: uv run manage.py runserver worker: uv run manage.py rqworker default email_batch --job-class django_tasks_rq.Job No newline at end of file worker: uv run manage.py rqworker default email email_batch --job-class django_tasks_rq.Job No newline at end of file mails/admin.py +6 −3 Changes for mails/admin.py: 6 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -3,15 +3,18 @@ from django.contrib import admin from .models import Mail class MailAdmin(admin.ModelAdmin): list_display = ['voter', 'status', 'error_message', 'created_at'] list_display = ['voter', 'status', 'error_message', 'created_at', 'last_try_date'] ordering = ['-created_at'] list_filter = ['status'] # def has_add_permission(self, request): # return False def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): return False def has_add_permission(self, request): return False admin.site.register(Mail, MailAdmin) No newline at end of file mails/migrations/0006_mail_number_of_trials.py 0 → 100644 +18 −0 Changes for mails/migrations/0006_mail_number_of_trials.py: 18 added lines, 0 removed lines. Original line number Diff line number Diff line # Generated by Django 6.0.3 on 2026-03-21 16:18 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('mails', '0005_remove_mail_errot_message_mail_error_message'), ] operations = [ migrations.AddField( model_name='mail', name='number_of_trials', field=models.IntegerField(default=0), ), ] mails/migrations/0007_remove_mail_number_of_trials.py 0 → 100644 +17 −0 Changes for mails/migrations/0007_remove_mail_number_of_trials.py: 17 added lines, 0 removed lines. Original line number Diff line number Diff line # Generated by Django 6.0.3 on 2026-03-21 16:19 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ('mails', '0006_mail_number_of_trials'), ] operations = [ migrations.RemoveField( model_name='mail', name='number_of_trials', ), ] mails/tasks.py +8 −7 Changes for mails/tasks.py: 8 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ from django.core import mail from django.core.mail import EmailMultiAlternatives from django.template.loader import render_to_string from django.utils.html import strip_tags from django.utils import timezone from voters.models import Voter from mails.models import Mail Loading @@ -14,7 +15,7 @@ from functools import partial import time @task(queue_name='email_batch') def send_mail_batch(): def send_mail_batch_task(): with transaction.atomic(): ids_to_update = list( Mail.objects.filter(status='PENDING') Loading @@ -26,7 +27,7 @@ def send_mail_batch(): if not ids_to_update: return None Mail.objects.filter(pk__in=ids_to_update).update(status='PROCESSING') Mail.objects.filter(pk__in=ids_to_update).update(status='PROCESSING', last_try_date=timezone.now()) batch = Mail.objects.filter(pk__in=ids_to_update)[:settings.EMAIL_BATCH_SIZE] Loading @@ -37,7 +38,7 @@ def send_mail_batch(): except: Mail.objects.filter(pk__in=ids_to_update).update(status='ERROR', error_message='Nie udało się nawiązać połączenia z serwerem SMTP') if Mail.objects.filter(status='PENDING').exists(): send_mail_batch.enqueue() send_mail_batch_task.enqueue() return emails_to_send = [] Loading Loading @@ -73,6 +74,8 @@ def send_mail_batch(): if sending_status: queued_email.status = 'SENT' queued_email.error_message = None queued_email.voter.last_email_date = timezone.now() queued_email.voter.save() else: queued_email.status = 'ERROR' except Exception as e: Loading @@ -85,7 +88,7 @@ def send_mail_batch(): if Mail.objects.filter(status='PENDING').exists(): send_mail_batch.enqueue() send_mail_batch_task.enqueue() @task Loading @@ -96,6 +99,4 @@ def queue_mails_task(voter_ids): with transaction.atomic(): Mail.objects.bulk_create(mail_objects) transaction.on_commit(partial(send_mail_batch.enqueue)) transaction.on_commit(partial(send_mail_batch_task.enqueue)) No newline at end of file Loading
Procfile +1 −1 Changes for Procfile: 1 added line, 1 removed line. Original line number Diff line number Diff line web: uv run manage.py runserver worker: uv run manage.py rqworker default email_batch --job-class django_tasks_rq.Job No newline at end of file worker: uv run manage.py rqworker default email email_batch --job-class django_tasks_rq.Job No newline at end of file
mails/admin.py +6 −3 Changes for mails/admin.py: 6 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -3,15 +3,18 @@ from django.contrib import admin from .models import Mail class MailAdmin(admin.ModelAdmin): list_display = ['voter', 'status', 'error_message', 'created_at'] list_display = ['voter', 'status', 'error_message', 'created_at', 'last_try_date'] ordering = ['-created_at'] list_filter = ['status'] # def has_add_permission(self, request): # return False def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): return False def has_add_permission(self, request): return False admin.site.register(Mail, MailAdmin) No newline at end of file
mails/migrations/0006_mail_number_of_trials.py 0 → 100644 +18 −0 Changes for mails/migrations/0006_mail_number_of_trials.py: 18 added lines, 0 removed lines. Original line number Diff line number Diff line # Generated by Django 6.0.3 on 2026-03-21 16:18 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('mails', '0005_remove_mail_errot_message_mail_error_message'), ] operations = [ migrations.AddField( model_name='mail', name='number_of_trials', field=models.IntegerField(default=0), ), ]
mails/migrations/0007_remove_mail_number_of_trials.py 0 → 100644 +17 −0 Changes for mails/migrations/0007_remove_mail_number_of_trials.py: 17 added lines, 0 removed lines. Original line number Diff line number Diff line # Generated by Django 6.0.3 on 2026-03-21 16:19 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ('mails', '0006_mail_number_of_trials'), ] operations = [ migrations.RemoveField( model_name='mail', name='number_of_trials', ), ]
mails/tasks.py +8 −7 Changes for mails/tasks.py: 8 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ from django.core import mail from django.core.mail import EmailMultiAlternatives from django.template.loader import render_to_string from django.utils.html import strip_tags from django.utils import timezone from voters.models import Voter from mails.models import Mail Loading @@ -14,7 +15,7 @@ from functools import partial import time @task(queue_name='email_batch') def send_mail_batch(): def send_mail_batch_task(): with transaction.atomic(): ids_to_update = list( Mail.objects.filter(status='PENDING') Loading @@ -26,7 +27,7 @@ def send_mail_batch(): if not ids_to_update: return None Mail.objects.filter(pk__in=ids_to_update).update(status='PROCESSING') Mail.objects.filter(pk__in=ids_to_update).update(status='PROCESSING', last_try_date=timezone.now()) batch = Mail.objects.filter(pk__in=ids_to_update)[:settings.EMAIL_BATCH_SIZE] Loading @@ -37,7 +38,7 @@ def send_mail_batch(): except: Mail.objects.filter(pk__in=ids_to_update).update(status='ERROR', error_message='Nie udało się nawiązać połączenia z serwerem SMTP') if Mail.objects.filter(status='PENDING').exists(): send_mail_batch.enqueue() send_mail_batch_task.enqueue() return emails_to_send = [] Loading Loading @@ -73,6 +74,8 @@ def send_mail_batch(): if sending_status: queued_email.status = 'SENT' queued_email.error_message = None queued_email.voter.last_email_date = timezone.now() queued_email.voter.save() else: queued_email.status = 'ERROR' except Exception as e: Loading @@ -85,7 +88,7 @@ def send_mail_batch(): if Mail.objects.filter(status='PENDING').exists(): send_mail_batch.enqueue() send_mail_batch_task.enqueue() @task Loading @@ -96,6 +99,4 @@ def queue_mails_task(voter_ids): with transaction.atomic(): Mail.objects.bulk_create(mail_objects) transaction.on_commit(partial(send_mail_batch.enqueue)) transaction.on_commit(partial(send_mail_batch_task.enqueue)) No newline at end of file