From e7906635dcc0dbd4ec9739e76c7469fd04599d92 Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:04:20 -0400 Subject: [PATCH 01/16] Migration file formatting with Ruff --- .../twisted_site/migrations/0001_initial.py | 39 ++++++-- .../migrations/0002_alter_profile_user.py | 13 +-- ...profile_hackatime_access_token_and_more.py | 71 ++++++++++----- ...lter_journal_project_alter_project_user.py | 23 +++-- .../migrations/0005_project_project_type.py | 13 +-- .../0006_alter_project_project_name.py | 7 +- .../0007_project_hackatime_project_name.py | 9 +- ...l_reduced_minutes_alter_journal_content.py | 11 ++- .../migrations/0009_uploadedimage.py | 31 +++++-- .../0010_rename_uploadedimage_uploadedfile.py | 7 +- .../migrations/0011_journal_type.py | 17 ++-- .../migrations/0012_project_repo_url.py | 9 +- .../migrations/0013_projectship.py | 50 ++++++++--- .../migrations/0014_profile_is_staff.py | 7 +- .../migrations/0015_profile_dark_theme.py | 7 +- .../migrations/0016_profile_ysws_eligible.py | 7 +- ..._dark_theme_profile_is_allowed_and_more.py | 27 ++++-- .../twisted_site/migrations/0018_pathway.py | 27 +++--- ...atus_projectship_final_message_and_more.py | 87 ++++++++++++------ .../migrations/0020_profile_twists.py | 10 ++- ...le_my_referral_code_profile_referred_by.py | 20 +++-- .../0022_alter_profile_referred_by.py | 15 ++-- .../twisted_site/migrations/0023_auditlog.py | 32 +++++-- .../migrations/0024_auditlog_timestamp.py | 11 +-- .../0025_alter_auditlog_additional_context.py | 7 +- .../migrations/0026_project_playable_url.py | 9 +- ...hca_access_token_project_screenshot_url.py | 15 ++-- ...move_projectship_final_message_and_more.py | 90 ++++++++++--------- ...9_projectship_final_audit_note_and_more.py | 30 ++++--- ...0_alter_journal_minutes_worked_and_more.py | 19 ++-- 30 files changed, 457 insertions(+), 263 deletions(-) diff --git a/twisted/twisted_site/migrations/0001_initial.py b/twisted/twisted_site/migrations/0001_initial.py index d927c66..5ba0a49 100644 --- a/twisted/twisted_site/migrations/0001_initial.py +++ b/twisted/twisted_site/migrations/0001_initial.py @@ -6,7 +6,6 @@ class Migration(migrations.Migration): - initial = True dependencies = [ @@ -15,14 +14,38 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='Profile', + name="Profile", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('verification_status', models.CharField(blank=True, default='', max_length=64)), - ('slack_id', models.CharField(blank=True, default='', max_length=64)), - ('slack_username', models.CharField(blank=True, default='', max_length=64)), - ('slack_pfp_url', models.CharField(blank=True, default='', max_length=200)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='hackclub_profile', to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "verification_status", + models.CharField(blank=True, default="", max_length=64), + ), + ("slack_id", models.CharField(blank=True, default="", max_length=64)), + ( + "slack_username", + models.CharField(blank=True, default="", max_length=64), + ), + ( + "slack_pfp_url", + models.CharField(blank=True, default="", max_length=200), + ), + ( + "user", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="hackclub_profile", + to=settings.AUTH_USER_MODEL, + ), + ), ], ), ] diff --git a/twisted/twisted_site/migrations/0002_alter_profile_user.py b/twisted/twisted_site/migrations/0002_alter_profile_user.py index ace1184..d6eda1a 100644 --- a/twisted/twisted_site/migrations/0002_alter_profile_user.py +++ b/twisted/twisted_site/migrations/0002_alter_profile_user.py @@ -6,16 +6,19 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0001_initial'), + ("twisted_site", "0001_initial"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.AlterField( - model_name='profile', - name='user', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL), + model_name="profile", + name="user", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="profile", + to=settings.AUTH_USER_MODEL, + ), ), ] diff --git a/twisted/twisted_site/migrations/0003_profile_hackatime_access_token_and_more.py b/twisted/twisted_site/migrations/0003_profile_hackatime_access_token_and_more.py index b933bfd..4a5bbd2 100644 --- a/twisted/twisted_site/migrations/0003_profile_hackatime_access_token_and_more.py +++ b/twisted/twisted_site/migrations/0003_profile_hackatime_access_token_and_more.py @@ -6,43 +6,70 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0002_alter_profile_user'), + ("twisted_site", "0002_alter_profile_user"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.AddField( - model_name='profile', - name='hackatime_access_token', - field=models.CharField(blank=True, default='', max_length=2000), + model_name="profile", + name="hackatime_access_token", + field=models.CharField(blank=True, default="", max_length=2000), ), migrations.AddField( - model_name='profile', - name='hackatime_state', - field=models.CharField(blank=True, default='', max_length=100), + model_name="profile", + name="hackatime_state", + field=models.CharField(blank=True, default="", max_length=100), ), migrations.CreateModel( - name='Project', + name="Project", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('project_name', models.CharField(max_length=100)), - ('project_description', models.TextField(max_length=2000)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("project_name", models.CharField(max_length=100)), + ("project_description", models.TextField(max_length=2000)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to=settings.AUTH_USER_MODEL, + ), + ), ], ), migrations.CreateModel( - name='Journal', + name="Journal", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('content', models.TextField(max_length=2000)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('minutes_worked', models.IntegerField()), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='twisted_site.project')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("content", models.TextField(max_length=2000)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("minutes_worked", models.IntegerField()), + ( + "project", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to="twisted_site.project", + ), + ), ], ), ] diff --git a/twisted/twisted_site/migrations/0004_alter_journal_project_alter_project_user.py b/twisted/twisted_site/migrations/0004_alter_journal_project_alter_project_user.py index c56d02c..8cef060 100644 --- a/twisted/twisted_site/migrations/0004_alter_journal_project_alter_project_user.py +++ b/twisted/twisted_site/migrations/0004_alter_journal_project_alter_project_user.py @@ -6,21 +6,28 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0003_profile_hackatime_access_token_and_more'), + ("twisted_site", "0003_profile_hackatime_access_token_and_more"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.AlterField( - model_name='journal', - name='project', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='journals', to='twisted_site.project'), + model_name="journal", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="journals", + to="twisted_site.project", + ), ), migrations.AlterField( - model_name='project', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='projects', to=settings.AUTH_USER_MODEL), + model_name="project", + name="user", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="projects", + to=settings.AUTH_USER_MODEL, + ), ), ] diff --git a/twisted/twisted_site/migrations/0005_project_project_type.py b/twisted/twisted_site/migrations/0005_project_project_type.py index ad35707..935c3d4 100644 --- a/twisted/twisted_site/migrations/0005_project_project_type.py +++ b/twisted/twisted_site/migrations/0005_project_project_type.py @@ -4,16 +4,19 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0004_alter_journal_project_alter_project_user'), + ("twisted_site", "0004_alter_journal_project_alter_project_user"), ] operations = [ migrations.AddField( - model_name='project', - name='project_type', - field=models.CharField(choices=[('software', 'Software'), ('hardware', 'Hardware')], default='', max_length=100), + model_name="project", + name="project_type", + field=models.CharField( + choices=[("software", "Software"), ("hardware", "Hardware")], + default="", + max_length=100, + ), preserve_default=False, ), ] diff --git a/twisted/twisted_site/migrations/0006_alter_project_project_name.py b/twisted/twisted_site/migrations/0006_alter_project_project_name.py index 0e32694..e6c60b6 100644 --- a/twisted/twisted_site/migrations/0006_alter_project_project_name.py +++ b/twisted/twisted_site/migrations/0006_alter_project_project_name.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0005_project_project_type'), + ("twisted_site", "0005_project_project_type"), ] operations = [ migrations.AlterField( - model_name='project', - name='project_name', + model_name="project", + name="project_name", field=models.CharField(max_length=50), ), ] diff --git a/twisted/twisted_site/migrations/0007_project_hackatime_project_name.py b/twisted/twisted_site/migrations/0007_project_hackatime_project_name.py index c0dbfa5..7ffe3a8 100644 --- a/twisted/twisted_site/migrations/0007_project_hackatime_project_name.py +++ b/twisted/twisted_site/migrations/0007_project_hackatime_project_name.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0006_alter_project_project_name'), + ("twisted_site", "0006_alter_project_project_name"), ] operations = [ migrations.AddField( - model_name='project', - name='hackatime_project_name', - field=models.CharField(blank=True, default='', max_length=200), + model_name="project", + name="hackatime_project_name", + field=models.CharField(blank=True, default="", max_length=200), ), ] diff --git a/twisted/twisted_site/migrations/0008_journal_reduced_minutes_alter_journal_content.py b/twisted/twisted_site/migrations/0008_journal_reduced_minutes_alter_journal_content.py index 1c31100..2a978f2 100644 --- a/twisted/twisted_site/migrations/0008_journal_reduced_minutes_alter_journal_content.py +++ b/twisted/twisted_site/migrations/0008_journal_reduced_minutes_alter_journal_content.py @@ -4,21 +4,20 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0007_project_hackatime_project_name'), + ("twisted_site", "0007_project_hackatime_project_name"), ] operations = [ migrations.AddField( - model_name='journal', - name='reduced_minutes', + model_name="journal", + name="reduced_minutes", field=models.IntegerField(default=0), preserve_default=False, ), migrations.AlterField( - model_name='journal', - name='content', + model_name="journal", + name="content", field=models.TextField(), ), ] diff --git a/twisted/twisted_site/migrations/0009_uploadedimage.py b/twisted/twisted_site/migrations/0009_uploadedimage.py index 7a1e1d1..99a60ab 100644 --- a/twisted/twisted_site/migrations/0009_uploadedimage.py +++ b/twisted/twisted_site/migrations/0009_uploadedimage.py @@ -6,22 +6,35 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0008_journal_reduced_minutes_alter_journal_content'), + ("twisted_site", "0008_journal_reduced_minutes_alter_journal_content"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( - name='UploadedImage', + name="UploadedImage", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('link', models.CharField(max_length=500)), - ('cdn_response', models.JSONField()), - ('uploaded_thru', models.CharField(max_length=500)), - ('filesize', models.IntegerField()), - ('uploaded_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("link", models.CharField(max_length=500)), + ("cdn_response", models.JSONField()), + ("uploaded_thru", models.CharField(max_length=500)), + ("filesize", models.IntegerField()), + ( + "uploaded_by", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to=settings.AUTH_USER_MODEL, + ), + ), ], ), ] diff --git a/twisted/twisted_site/migrations/0010_rename_uploadedimage_uploadedfile.py b/twisted/twisted_site/migrations/0010_rename_uploadedimage_uploadedfile.py index d5a2236..f399628 100644 --- a/twisted/twisted_site/migrations/0010_rename_uploadedimage_uploadedfile.py +++ b/twisted/twisted_site/migrations/0010_rename_uploadedimage_uploadedfile.py @@ -5,15 +5,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0009_uploadedimage'), + ("twisted_site", "0009_uploadedimage"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.RenameModel( - old_name='UploadedImage', - new_name='UploadedFile', + old_name="UploadedImage", + new_name="UploadedFile", ), ] diff --git a/twisted/twisted_site/migrations/0011_journal_type.py b/twisted/twisted_site/migrations/0011_journal_type.py index b99b43d..2aebb4f 100644 --- a/twisted/twisted_site/migrations/0011_journal_type.py +++ b/twisted/twisted_site/migrations/0011_journal_type.py @@ -4,16 +4,23 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0010_rename_uploadedimage_uploadedfile'), + ("twisted_site", "0010_rename_uploadedimage_uploadedfile"), ] operations = [ migrations.AddField( - model_name='journal', - name='type', - field=models.CharField(choices=[('hackatime', 'Hackatime'), ('lookout', 'Lookout'), ('untracked', 'Untracked')], default='hackatime', max_length=100), + model_name="journal", + name="type", + field=models.CharField( + choices=[ + ("hackatime", "Hackatime"), + ("lookout", "Lookout"), + ("untracked", "Untracked"), + ], + default="hackatime", + max_length=100, + ), preserve_default=False, ), ] diff --git a/twisted/twisted_site/migrations/0012_project_repo_url.py b/twisted/twisted_site/migrations/0012_project_repo_url.py index 511ccec..41d3044 100644 --- a/twisted/twisted_site/migrations/0012_project_repo_url.py +++ b/twisted/twisted_site/migrations/0012_project_repo_url.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0011_journal_type'), + ("twisted_site", "0011_journal_type"), ] operations = [ migrations.AddField( - model_name='project', - name='repo_url', - field=models.CharField(blank=True, default='', max_length=200), + model_name="project", + name="repo_url", + field=models.CharField(blank=True, default="", max_length=200), ), ] diff --git a/twisted/twisted_site/migrations/0013_projectship.py b/twisted/twisted_site/migrations/0013_projectship.py index b799efc..f88b200 100644 --- a/twisted/twisted_site/migrations/0013_projectship.py +++ b/twisted/twisted_site/migrations/0013_projectship.py @@ -5,24 +5,50 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0012_project_repo_url'), + ("twisted_site", "0012_project_repo_url"), ] operations = [ migrations.CreateModel( - name='ProjectShip', + name="ProjectShip", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('t1_updated_at', models.DateTimeField(default=None, null=True)), - ('t2_updated_at', models.DateTimeField(default=None, null=True)), - ('t1_message', models.TextField(blank=True, default='')), - ('t2_message', models.TextField(blank=True, default='')), - ('status', models.CharField(choices=[('created', 'Newly created'), ('rejected', 'Rejected ship'), ('reqchecked', 'Checked by T1'), ('approved', 'Approved by T2')], default='created', max_length=200)), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='ships', to='twisted_site.project')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("t1_updated_at", models.DateTimeField(default=None, null=True)), + ("t2_updated_at", models.DateTimeField(default=None, null=True)), + ("t1_message", models.TextField(blank=True, default="")), + ("t2_message", models.TextField(blank=True, default="")), + ( + "status", + models.CharField( + choices=[ + ("created", "Newly created"), + ("rejected", "Rejected ship"), + ("reqchecked", "Checked by T1"), + ("approved", "Approved by T2"), + ], + default="created", + max_length=200, + ), + ), + ( + "project", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="ships", + to="twisted_site.project", + ), + ), ], ), ] diff --git a/twisted/twisted_site/migrations/0014_profile_is_staff.py b/twisted/twisted_site/migrations/0014_profile_is_staff.py index cdf75cb..32041c5 100644 --- a/twisted/twisted_site/migrations/0014_profile_is_staff.py +++ b/twisted/twisted_site/migrations/0014_profile_is_staff.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0013_projectship'), + ("twisted_site", "0013_projectship"), ] operations = [ migrations.AddField( - model_name='profile', - name='is_staff', + model_name="profile", + name="is_staff", field=models.BooleanField(default=False), ), ] diff --git a/twisted/twisted_site/migrations/0015_profile_dark_theme.py b/twisted/twisted_site/migrations/0015_profile_dark_theme.py index dce9602..bff2cfa 100644 --- a/twisted/twisted_site/migrations/0015_profile_dark_theme.py +++ b/twisted/twisted_site/migrations/0015_profile_dark_theme.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0014_profile_is_staff'), + ("twisted_site", "0014_profile_is_staff"), ] operations = [ migrations.AddField( - model_name='profile', - name='dark_theme', + model_name="profile", + name="dark_theme", field=models.BooleanField(default=True), ), ] diff --git a/twisted/twisted_site/migrations/0016_profile_ysws_eligible.py b/twisted/twisted_site/migrations/0016_profile_ysws_eligible.py index 9342104..97cf527 100644 --- a/twisted/twisted_site/migrations/0016_profile_ysws_eligible.py +++ b/twisted/twisted_site/migrations/0016_profile_ysws_eligible.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0015_profile_dark_theme'), + ("twisted_site", "0015_profile_dark_theme"), ] operations = [ migrations.AddField( - model_name='profile', - name='ysws_eligible', + model_name="profile", + name="ysws_eligible", field=models.BooleanField(default=False), ), ] diff --git a/twisted/twisted_site/migrations/0017_remove_profile_dark_theme_profile_is_allowed_and_more.py b/twisted/twisted_site/migrations/0017_remove_profile_dark_theme_profile_is_allowed_and_more.py index 950fa21..46b24c8 100644 --- a/twisted/twisted_site/migrations/0017_remove_profile_dark_theme_profile_is_allowed_and_more.py +++ b/twisted/twisted_site/migrations/0017_remove_profile_dark_theme_profile_is_allowed_and_more.py @@ -4,24 +4,33 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0016_profile_ysws_eligible'), + ("twisted_site", "0016_profile_ysws_eligible"), ] operations = [ migrations.RemoveField( - model_name='profile', - name='dark_theme', + model_name="profile", + name="dark_theme", ), migrations.AddField( - model_name='profile', - name='is_allowed', + model_name="profile", + name="is_allowed", field=models.BooleanField(default=False), ), migrations.AlterField( - model_name='projectship', - name='status', - field=models.CharField(choices=[('created', 'Awaiting review'), ('rejected', 'Rejected ship'), ('requested_changes', 'Requested Changes'), ('reqchecked', 'Checked by T1'), ('approved', 'Approved by T2')], default='created', max_length=200), + model_name="projectship", + name="status", + field=models.CharField( + choices=[ + ("created", "Awaiting review"), + ("rejected", "Rejected ship"), + ("requested_changes", "Requested Changes"), + ("reqchecked", "Checked by T1"), + ("approved", "Approved by T2"), + ], + default="created", + max_length=200, + ), ), ] diff --git a/twisted/twisted_site/migrations/0018_pathway.py b/twisted/twisted_site/migrations/0018_pathway.py index 84d114a..cc3eee9 100644 --- a/twisted/twisted_site/migrations/0018_pathway.py +++ b/twisted/twisted_site/migrations/0018_pathway.py @@ -4,22 +4,29 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0017_remove_profile_dark_theme_profile_is_allowed_and_more'), + ("twisted_site", "0017_remove_profile_dark_theme_profile_is_allowed_and_more"), ] operations = [ migrations.CreateModel( - name='Pathway', + name="Pathway", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('start', models.DateTimeField()), - ('end', models.DateTimeField()), - ('name', models.CharField(max_length=200)), - ('min_mins', models.IntegerField(default=300)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("start", models.DateTimeField()), + ("end", models.DateTimeField()), + ("name", models.CharField(max_length=200)), + ("min_mins", models.IntegerField(default=300)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), ], ), ] diff --git a/twisted/twisted_site/migrations/0019_remove_projectship_status_projectship_final_message_and_more.py b/twisted/twisted_site/migrations/0019_remove_projectship_status_projectship_final_message_and_more.py index d8c0efb..2facb58 100644 --- a/twisted/twisted_site/migrations/0019_remove_projectship_status_projectship_final_message_and_more.py +++ b/twisted/twisted_site/migrations/0019_remove_projectship_status_projectship_final_message_and_more.py @@ -4,54 +4,89 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0018_pathway'), + ("twisted_site", "0018_pathway"), ] operations = [ migrations.RemoveField( - model_name='projectship', - name='status', + model_name="projectship", + name="status", ), migrations.AddField( - model_name='projectship', - name='final_message', - field=models.TextField(blank=True, default=''), + model_name="projectship", + name="final_message", + field=models.TextField(blank=True, default=""), ), migrations.AddField( - model_name='projectship', - name='final_status', - field=models.CharField(choices=[('pending', 'Awaiting review'), ('requested_changes', 'Changes Requested'), ('rejected', 'Rejected'), ('approved', 'Approved')], default='pending', max_length=200), + model_name="projectship", + name="final_status", + field=models.CharField( + choices=[ + ("pending", "Awaiting review"), + ("requested_changes", "Changes Requested"), + ("rejected", "Rejected"), + ("approved", "Approved"), + ], + default="pending", + max_length=200, + ), ), migrations.AddField( - model_name='projectship', - name='final_updated_at', + model_name="projectship", + name="final_updated_at", field=models.DateTimeField(default=None, null=True), ), migrations.AddField( - model_name='projectship', - name='fraud_message', - field=models.TextField(blank=True, default=''), + model_name="projectship", + name="fraud_message", + field=models.TextField(blank=True, default=""), ), migrations.AddField( - model_name='projectship', - name='fraud_status', - field=models.CharField(choices=[('pending', 'Awaiting review'), ('requested_changes', 'Changes Requested'), ('rejected', 'Rejected'), ('approved', 'Approved')], default='pending', max_length=200), + model_name="projectship", + name="fraud_status", + field=models.CharField( + choices=[ + ("pending", "Awaiting review"), + ("requested_changes", "Changes Requested"), + ("rejected", "Rejected"), + ("approved", "Approved"), + ], + default="pending", + max_length=200, + ), ), migrations.AddField( - model_name='projectship', - name='fraud_updated_at', + model_name="projectship", + name="fraud_updated_at", field=models.DateTimeField(default=None, null=True), ), migrations.AddField( - model_name='projectship', - name='t1_status', - field=models.CharField(choices=[('pending', 'Awaiting review'), ('requested_changes', 'Changes Requested'), ('rejected', 'Rejected'), ('approved', 'Approved')], default='pending', max_length=200), + model_name="projectship", + name="t1_status", + field=models.CharField( + choices=[ + ("pending", "Awaiting review"), + ("requested_changes", "Changes Requested"), + ("rejected", "Rejected"), + ("approved", "Approved"), + ], + default="pending", + max_length=200, + ), ), migrations.AddField( - model_name='projectship', - name='t2_status', - field=models.CharField(choices=[('pending', 'Awaiting review'), ('requested_changes', 'Changes Requested'), ('rejected', 'Rejected'), ('approved', 'Approved')], default='pending', max_length=200), + model_name="projectship", + name="t2_status", + field=models.CharField( + choices=[ + ("pending", "Awaiting review"), + ("requested_changes", "Changes Requested"), + ("rejected", "Rejected"), + ("approved", "Approved"), + ], + default="pending", + max_length=200, + ), ), ] diff --git a/twisted/twisted_site/migrations/0020_profile_twists.py b/twisted/twisted_site/migrations/0020_profile_twists.py index fd7fe54..28b6d9d 100644 --- a/twisted/twisted_site/migrations/0020_profile_twists.py +++ b/twisted/twisted_site/migrations/0020_profile_twists.py @@ -4,15 +4,17 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0019_remove_projectship_status_projectship_final_message_and_more'), + ( + "twisted_site", + "0019_remove_projectship_status_projectship_final_message_and_more", + ), ] operations = [ migrations.AddField( - model_name='profile', - name='twists', + model_name="profile", + name="twists", field=models.IntegerField(default=0), ), ] diff --git a/twisted/twisted_site/migrations/0021_profile_my_referral_code_profile_referred_by.py b/twisted/twisted_site/migrations/0021_profile_my_referral_code_profile_referred_by.py index 83e9e3b..9523794 100644 --- a/twisted/twisted_site/migrations/0021_profile_my_referral_code_profile_referred_by.py +++ b/twisted/twisted_site/migrations/0021_profile_my_referral_code_profile_referred_by.py @@ -5,20 +5,24 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0020_profile_twists'), + ("twisted_site", "0020_profile_twists"), ] operations = [ migrations.AddField( - model_name='profile', - name='my_referral_code', - field=models.CharField(blank=True, default='', max_length=200), + model_name="profile", + name="my_referral_code", + field=models.CharField(blank=True, default="", max_length=200), ), migrations.AddField( - model_name='profile', - name='referred_by', - field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='twisted_site.profile'), + model_name="profile", + name="referred_by", + field=models.ForeignKey( + default=None, + null=True, + on_delete=django.db.models.deletion.PROTECT, + to="twisted_site.profile", + ), ), ] diff --git a/twisted/twisted_site/migrations/0022_alter_profile_referred_by.py b/twisted/twisted_site/migrations/0022_alter_profile_referred_by.py index b378f21..549292a 100644 --- a/twisted/twisted_site/migrations/0022_alter_profile_referred_by.py +++ b/twisted/twisted_site/migrations/0022_alter_profile_referred_by.py @@ -5,15 +5,20 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0021_profile_my_referral_code_profile_referred_by'), + ("twisted_site", "0021_profile_my_referral_code_profile_referred_by"), ] operations = [ migrations.AlterField( - model_name='profile', - name='referred_by', - field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='referrals', to='twisted_site.profile'), + model_name="profile", + name="referred_by", + field=models.ForeignKey( + default=None, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="referrals", + to="twisted_site.profile", + ), ), ] diff --git a/twisted/twisted_site/migrations/0023_auditlog.py b/twisted/twisted_site/migrations/0023_auditlog.py index 5cf5e6c..1728c96 100644 --- a/twisted/twisted_site/migrations/0023_auditlog.py +++ b/twisted/twisted_site/migrations/0023_auditlog.py @@ -6,22 +6,36 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0022_alter_profile_referred_by'), + ("twisted_site", "0022_alter_profile_referred_by"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( - name='AuditLog', + name="AuditLog", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('path', models.CharField(max_length=400)), - ('post', models.BooleanField()), - ('pii', models.BooleanField(default=False)), - ('additional_context', models.JSONField(default={})), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='audit_logs', to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("path", models.CharField(max_length=400)), + ("post", models.BooleanField()), + ("pii", models.BooleanField(default=False)), + ("additional_context", models.JSONField(default={})), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="audit_logs", + to=settings.AUTH_USER_MODEL, + ), + ), ], ), ] diff --git a/twisted/twisted_site/migrations/0024_auditlog_timestamp.py b/twisted/twisted_site/migrations/0024_auditlog_timestamp.py index e21ce8c..a337043 100644 --- a/twisted/twisted_site/migrations/0024_auditlog_timestamp.py +++ b/twisted/twisted_site/migrations/0024_auditlog_timestamp.py @@ -5,16 +5,17 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0023_auditlog'), + ("twisted_site", "0023_auditlog"), ] operations = [ migrations.AddField( - model_name='auditlog', - name='timestamp', - field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + model_name="auditlog", + name="timestamp", + field=models.DateTimeField( + auto_now_add=True, default=django.utils.timezone.now + ), preserve_default=False, ), ] diff --git a/twisted/twisted_site/migrations/0025_alter_auditlog_additional_context.py b/twisted/twisted_site/migrations/0025_alter_auditlog_additional_context.py index 4df221c..871d202 100644 --- a/twisted/twisted_site/migrations/0025_alter_auditlog_additional_context.py +++ b/twisted/twisted_site/migrations/0025_alter_auditlog_additional_context.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0024_auditlog_timestamp'), + ("twisted_site", "0024_auditlog_timestamp"), ] operations = [ migrations.AlterField( - model_name='auditlog', - name='additional_context', + model_name="auditlog", + name="additional_context", field=models.JSONField(default=None, null=True), ), ] diff --git a/twisted/twisted_site/migrations/0026_project_playable_url.py b/twisted/twisted_site/migrations/0026_project_playable_url.py index 32151ad..d34b493 100644 --- a/twisted/twisted_site/migrations/0026_project_playable_url.py +++ b/twisted/twisted_site/migrations/0026_project_playable_url.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0025_alter_auditlog_additional_context'), + ("twisted_site", "0025_alter_auditlog_additional_context"), ] operations = [ migrations.AddField( - model_name='project', - name='playable_url', - field=models.CharField(blank=True, default='', max_length=200), + model_name="project", + name="playable_url", + field=models.CharField(blank=True, default="", max_length=200), ), ] diff --git a/twisted/twisted_site/migrations/0027_profile_hca_access_token_project_screenshot_url.py b/twisted/twisted_site/migrations/0027_profile_hca_access_token_project_screenshot_url.py index d88875c..2768c59 100644 --- a/twisted/twisted_site/migrations/0027_profile_hca_access_token_project_screenshot_url.py +++ b/twisted/twisted_site/migrations/0027_profile_hca_access_token_project_screenshot_url.py @@ -4,20 +4,19 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0026_project_playable_url'), + ("twisted_site", "0026_project_playable_url"), ] operations = [ migrations.AddField( - model_name='profile', - name='hca_access_token', - field=models.CharField(blank=True, default='', max_length=2000), + model_name="profile", + name="hca_access_token", + field=models.CharField(blank=True, default="", max_length=2000), ), migrations.AddField( - model_name='project', - name='screenshot_url', - field=models.CharField(blank=True, default='', max_length=500), + model_name="project", + name="screenshot_url", + field=models.CharField(blank=True, default="", max_length=500), ), ] diff --git a/twisted/twisted_site/migrations/0028_remove_projectship_final_message_and_more.py b/twisted/twisted_site/migrations/0028_remove_projectship_final_message_and_more.py index de3123b..28f5b74 100644 --- a/twisted/twisted_site/migrations/0028_remove_projectship_final_message_and_more.py +++ b/twisted/twisted_site/migrations/0028_remove_projectship_final_message_and_more.py @@ -4,83 +4,91 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0027_profile_hca_access_token_project_screenshot_url'), + ("twisted_site", "0027_profile_hca_access_token_project_screenshot_url"), ] operations = [ migrations.RemoveField( - model_name='projectship', - name='final_message', + model_name="projectship", + name="final_message", ), migrations.RemoveField( - model_name='projectship', - name='final_status', + model_name="projectship", + name="final_status", ), migrations.RemoveField( - model_name='projectship', - name='final_updated_at', + model_name="projectship", + name="final_updated_at", ), migrations.RemoveField( - model_name='projectship', - name='fraud_message', + model_name="projectship", + name="fraud_message", ), migrations.RemoveField( - model_name='projectship', - name='fraud_status', + model_name="projectship", + name="fraud_status", ), migrations.RemoveField( - model_name='projectship', - name='fraud_updated_at', + model_name="projectship", + name="fraud_updated_at", ), migrations.RemoveField( - model_name='projectship', - name='t1_message', + model_name="projectship", + name="t1_message", ), migrations.RemoveField( - model_name='projectship', - name='t1_status', + model_name="projectship", + name="t1_status", ), migrations.RemoveField( - model_name='projectship', - name='t1_updated_at', + model_name="projectship", + name="t1_updated_at", ), migrations.RemoveField( - model_name='projectship', - name='t2_message', + model_name="projectship", + name="t2_message", ), migrations.RemoveField( - model_name='projectship', - name='t2_status', + model_name="projectship", + name="t2_status", ), migrations.RemoveField( - model_name='projectship', - name='t2_updated_at', + model_name="projectship", + name="t2_updated_at", ), migrations.AddField( - model_name='projectship', - name='audit_note', - field=models.TextField(blank=True, default=''), + model_name="projectship", + name="audit_note", + field=models.TextField(blank=True, default=""), ), migrations.AddField( - model_name='projectship', - name='deflation_reason', - field=models.CharField(blank=True, default='', max_length=255), + model_name="projectship", + name="deflation_reason", + field=models.CharField(blank=True, default="", max_length=255), ), migrations.AddField( - model_name='projectship', - name='note_to_maker', - field=models.TextField(blank=True, default=''), + model_name="projectship", + name="note_to_maker", + field=models.TextField(blank=True, default=""), ), migrations.AddField( - model_name='projectship', - name='status', - field=models.CharField(choices=[('pending', 'Awaiting review'), ('requested_changes', 'Changes Requested'), ('rejected', 'Rejected'), ('approved', 'Approved')], default='pending', max_length=200), + model_name="projectship", + name="status", + field=models.CharField( + choices=[ + ("pending", "Awaiting review"), + ("requested_changes", "Changes Requested"), + ("rejected", "Rejected"), + ("approved", "Approved"), + ], + default="pending", + max_length=200, + ), ), migrations.AddField( - model_name='projectship', - name='technical_features', - field=models.CharField(blank=True, default='', max_length=255), + model_name="projectship", + name="technical_features", + field=models.CharField(blank=True, default="", max_length=255), ), ] diff --git a/twisted/twisted_site/migrations/0029_projectship_final_audit_note_and_more.py b/twisted/twisted_site/migrations/0029_projectship_final_audit_note_and_more.py index d16c85c..6041ee2 100644 --- a/twisted/twisted_site/migrations/0029_projectship_final_audit_note_and_more.py +++ b/twisted/twisted_site/migrations/0029_projectship_final_audit_note_and_more.py @@ -4,25 +4,33 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0028_remove_projectship_final_message_and_more'), + ("twisted_site", "0028_remove_projectship_final_message_and_more"), ] operations = [ migrations.AddField( - model_name='projectship', - name='final_audit_note', - field=models.TextField(blank=True, default=''), + model_name="projectship", + name="final_audit_note", + field=models.TextField(blank=True, default=""), ), migrations.AddField( - model_name='projectship', - name='final_note_to_maker', - field=models.TextField(blank=True, default=''), + model_name="projectship", + name="final_note_to_maker", + field=models.TextField(blank=True, default=""), ), migrations.AddField( - model_name='projectship', - name='final_status', - field=models.CharField(choices=[('pending', 'Awaiting review'), ('requested_changes', 'Changes Requested'), ('rejected', 'Rejected'), ('approved', 'Approved')], default='pending', max_length=200), + model_name="projectship", + name="final_status", + field=models.CharField( + choices=[ + ("pending", "Awaiting review"), + ("requested_changes", "Changes Requested"), + ("rejected", "Rejected"), + ("approved", "Approved"), + ], + default="pending", + max_length=200, + ), ), ] diff --git a/twisted/twisted_site/migrations/0030_alter_journal_minutes_worked_and_more.py b/twisted/twisted_site/migrations/0030_alter_journal_minutes_worked_and_more.py index 2405650..54e04b7 100644 --- a/twisted/twisted_site/migrations/0030_alter_journal_minutes_worked_and_more.py +++ b/twisted/twisted_site/migrations/0030_alter_journal_minutes_worked_and_more.py @@ -5,20 +5,23 @@ class Migration(migrations.Migration): - dependencies = [ - ('twisted_site', '0029_projectship_final_audit_note_and_more'), + ("twisted_site", "0029_projectship_final_audit_note_and_more"), ] operations = [ migrations.AlterField( - model_name='journal', - name='minutes_worked', - field=models.IntegerField(validators=[django.core.validators.MinValueValidator(0)]), + model_name="journal", + name="minutes_worked", + field=models.IntegerField( + validators=[django.core.validators.MinValueValidator(0)] + ), ), migrations.AlterField( - model_name='journal', - name='reduced_minutes', - field=models.IntegerField(validators=[django.core.validators.MinValueValidator(0)]), + model_name="journal", + name="reduced_minutes", + field=models.IntegerField( + validators=[django.core.validators.MinValueValidator(0)] + ), ), ] From 82d5c1c182480301f3f510cae1b42ad47f6a2748 Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:10:55 -0400 Subject: [PATCH 02/16] Format twisted_site files --- twisted/twisted_site/apps.py | 2 +- twisted/twisted_site/ari.py | 22 ++- twisted/twisted_site/models.py | 101 ++++++---- twisted/twisted_site/slack.py | 12 +- twisted/twisted_site/templatetags/maths.py | 4 +- .../twisted_site/templatetags/time_filters.py | 11 +- twisted/twisted_site/urls.py | 110 ++++++++--- twisted/twisted_site/views/admin/admin.py | 72 +++++-- .../twisted_site/views/admin/announcements.py | 5 +- .../twisted_site/views/admin/audit_logs.py | 26 +-- twisted/twisted_site/views/admin/dashboard.py | 47 +++-- .../twisted_site/views/admin/fulfillment.py | 3 +- twisted/twisted_site/views/admin/pathways.py | 75 +++---- twisted/twisted_site/views/admin/review.py | 39 ++-- twisted/twisted_site/views/admin/shop.py | 3 +- twisted/twisted_site/views/admin/users.py | 69 ++++--- twisted/twisted_site/views/ari.py | 183 +++++++++--------- twisted/twisted_site/views/client/__init__.py | 8 +- twisted/twisted_site/views/client/auth.py | 8 +- .../twisted_site/views/client/dashboard.py | 32 +-- twisted/twisted_site/views/client/homepage.py | 12 +- twisted/twisted_site/views/client/journal.py | 81 ++++---- twisted/twisted_site/views/client/project.py | 5 +- twisted/twisted_site/views/client/projects.py | 14 +- .../twisted_site/views/client/referrals.py | 22 +-- twisted/twisted_site/views/image_upload.py | 33 ++-- 26 files changed, 583 insertions(+), 416 deletions(-) diff --git a/twisted/twisted_site/apps.py b/twisted/twisted_site/apps.py index 0f020b2..1551da6 100644 --- a/twisted/twisted_site/apps.py +++ b/twisted/twisted_site/apps.py @@ -2,4 +2,4 @@ class TwistedSiteConfig(AppConfig): - name = 'twisted_site' + name = "twisted_site" diff --git a/twisted/twisted_site/ari.py b/twisted/twisted_site/ari.py index 682182e..1a163e6 100644 --- a/twisted/twisted_site/ari.py +++ b/twisted/twisted_site/ari.py @@ -19,7 +19,9 @@ WEBHOOK_MAX_AGE_SECONDS = 5 * 60 -def verify_webhook_signature(body: bytes, timestamp: str, delivery_id: str, signature: str) -> bool: +def verify_webhook_signature( + body: bytes, timestamp: str, delivery_id: str, signature: str +) -> bool: """Verifies an outbound delivery from Ari (the X-Ari-Signature/-Timestamp/-Delivery-Id headers on review.* and ship.updated webhooks). Signed with ARI_WEBHOOK_SECRET, which is separate from ARI_SIGNING_SECRET (that one signs requests we send to Ari).""" @@ -51,11 +53,12 @@ def get_hex_signature(content): return hex_signature + def send_request(method: Literal["GET", "POST"], data=None, endpoint="", jsonify=True): if jsonify or data is None: data = json.dumps(data) - if method == 'POST': + if method == "POST": headers = { "X-Ari-Signature": get_hex_signature(data), "Content-Type": "application/json", @@ -63,9 +66,7 @@ def send_request(method: Literal["GET", "POST"], data=None, endpoint="", jsonify message_bytes = data.encode("utf-8") else: message_bytes = None - headers = { - "Authorization": f"Bearer {ARI_SIGNING_SECRET}" - } + headers = {"Authorization": f"Bearer {ARI_SIGNING_SECRET}"} req = requests.request( method, ARI_INGEST_ENDPOINT + endpoint, @@ -74,6 +75,7 @@ def send_request(method: Literal["GET", "POST"], data=None, endpoint="", jsonify ) return req + # external_id = "twisted-{project.id}" def send_ship(ship: ProjectShip): if settings.DEBUG_REVIEW: @@ -89,7 +91,7 @@ def send_ship(ship: ProjectShip): "email": ship.project.user.email, "name": ship.project.user.profile.slack_username, "slack_id": ship.project.user.profile.slack_id, - "program_hours": untracked_time/60 + "program_hours": untracked_time / 60, } title = ship.project.project_name @@ -136,20 +138,22 @@ def send_ship(ship: ProjectShip): "shipped_at": shipped_at, "thumbnail_url": thumbnail_url, "hackatime_projects": hackatime_projects, - "evidence": ['commits', 'elapsed', 'devlog'], + "evidence": ["commits", "elapsed", "devlog"], "journals": journals, - "meta": meta + "meta": meta, }, ) resp = r.content r.raise_for_status() + def get_project_status(project: Project): - r = send_request('GET', endpoint=f"/status?external_id=twisted-{project.id}") + r = send_request("GET", endpoint=f"/status?external_id=twisted-{project.id}") _resp = r.content r.raise_for_status() return r.json() + # ARI's phases go: (processing | fraud_review | review | under_review) -- reviewer # hasn't decided yet -- then second_pass -- reviewer decided, an organizer still has # to confirm it -- then reviewed, where `decision` is locked in. withdrawn/reverted diff --git a/twisted/twisted_site/models.py b/twisted/twisted_site/models.py index 1941cb7..df207bb 100644 --- a/twisted/twisted_site/models.py +++ b/twisted/twisted_site/models.py @@ -39,13 +39,19 @@ class Profile(models.Model): hackatime_state = models.CharField(max_length=100, blank=True, default="") hca_access_token = models.CharField(max_length=2000, blank=True, default="") - + is_staff = models.BooleanField(default=False) is_allowed = models.BooleanField(default=False) - + twists = models.IntegerField(default=0) - - referred_by = models.ForeignKey('twisted_site.Profile', on_delete=models.PROTECT, null=True, default=None, related_name="referrals") + + referred_by = models.ForeignKey( + "twisted_site.Profile", + on_delete=models.PROTECT, + null=True, + default=None, + related_name="referrals", + ) my_referral_code = models.CharField(max_length=200, blank=True, default="") def shipped_projects(self): @@ -134,20 +140,20 @@ def hackatime_time_unjournaled(self): return self.time_spent() - self.hackatime_logged(include_all_minutes=True) def latest_ship(self): - ship = self.ships.order_by('-created_at').first() + ship = self.ships.order_by("-created_at").first() return ship - + def is_shipped(self): latest_ship = self.latest_ship() if latest_ship is None: return False - return latest_ship.status != 'requested_changes' + return latest_ship.status != "requested_changes" def is_approved(self): latest_ship = self.latest_ship() if latest_ship is None: return False - return latest_ship.status == 'approved' + return latest_ship.status == "approved" class Journal(models.Model): @@ -182,14 +188,18 @@ class ProjectShip(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) - status = models.CharField(default="pending", choices=PROJECT_SHIP_STATUSES, max_length=200) + status = models.CharField( + default="pending", choices=PROJECT_SHIP_STATUSES, max_length=200 + ) note_to_maker = models.TextField(blank=True, default="") audit_note = models.TextField(blank=True, default="") technical_features = models.CharField(blank=True, default="", max_length=255) deflation_reason = models.CharField(blank=True, default="", max_length=255) - final_status = models.CharField(default="pending", choices=PROJECT_SHIP_STATUSES, max_length=200) + final_status = models.CharField( + default="pending", choices=PROJECT_SHIP_STATUSES, max_length=200 + ) final_note_to_maker = models.TextField(blank=True, default="") final_audit_note = models.TextField(blank=True, default="") @@ -218,36 +228,40 @@ def in_progress(self): def status(self): if self.ended(): - return 'ended' + return "ended" if self.didnt_start(): - return 'awaiting' + return "awaiting" if self.in_progress(): - return 'in progress' - + return "in progress" + def mins_spent(self, user: User): - pathways = Pathway.objects.order_by('start').values('id', 'start', 'end', 'min_mins') + pathways = Pathway.objects.order_by("start").values( + "id", "start", "end", "min_mins" + ) if not pathways: return 0 - - pathway_totals = {p['id']: 0 for p in pathways} - journals = Journal.objects.filter( - project__user=user - ).order_by('created_at').values_list('created_at', 'reduced_minutes') + pathway_totals = {p["id"]: 0 for p in pathways} + + journals = ( + Journal.objects.filter(project__user=user) + .order_by("created_at") + .values_list("created_at", "reduced_minutes") + ) for j_created, j_mins in journals: mins_remaining = j_mins for pathway in pathways: if mins_remaining <= 0: break - + # Check if journal falls within the pathway window - if pathway['start'] > j_created or pathway['end'] < j_created: + if pathway["start"] > j_created or pathway["end"] < j_created: continue - - p_id = pathway['id'] + + p_id = pathway["id"] mins_completed = pathway_totals.get(p_id, 0) - mins_required = pathway['min_mins'] + mins_required = pathway["min_mins"] if mins_completed >= mins_required: continue @@ -259,7 +273,7 @@ def mins_spent(self, user: User): pathway_totals[p_id] = mins_completed + mins_donated return pathway_totals[self.id] - + def mins_spent_per_participant(self) -> dict[int, int]: """ Calculates the minutes spent on this specific pathway for all participants. @@ -268,24 +282,28 @@ def mins_spent_per_participant(self) -> dict[int, int]: dict: {user_id: mins_spent} """ # Fetch all pathways to accurately model the sequential time donation - pathways = list(Pathway.objects.order_by('start').values('id', 'start', 'end', 'min_mins')) + pathways = list( + Pathway.objects.order_by("start").values("id", "start", "end", "min_mins") + ) if not pathways: return {} # Fetch journals from all users that fit within this pathway's active time frame - journals = Journal.objects.filter( - created_at__gte=self.start, - created_at__lte=self.end, - reduced_minutes__gt=0 - ).order_by('project__user_id', 'created_at').values_list( - 'project__user_id', 'created_at', 'reduced_minutes' + journals = ( + Journal.objects.filter( + created_at__gte=self.start, + created_at__lte=self.end, + reduced_minutes__gt=0, + ) + .order_by("project__user_id", "created_at") + .values_list("project__user_id", "created_at", "reduced_minutes") ) user_pathway_totals = {} for user_id, j_created, j_mins in journals: if user_id not in user_pathway_totals: - user_pathway_totals[user_id] = {p['id']: 0 for p in pathways} + user_pathway_totals[user_id] = {p["id"]: 0 for p in pathways} pathway_totals = user_pathway_totals[user_id] mins_remaining = j_mins @@ -294,12 +312,12 @@ def mins_spent_per_participant(self) -> dict[int, int]: if mins_remaining <= 0: break - if pathway['start'] > j_created or pathway['end'] < j_created: + if pathway["start"] > j_created or pathway["end"] < j_created: continue - p_id = pathway['id'] + p_id = pathway["id"] mins_completed = pathway_totals[p_id] - mins_required = pathway['min_mins'] + mins_required = pathway["min_mins"] if mins_completed >= mins_required: continue @@ -315,7 +333,7 @@ def mins_spent_per_participant(self) -> dict[int, int]: user_id: totals.get(self.id, 0) for user_id, totals in user_pathway_totals.items() } - + def qualified_participants(self): per_part = self.mins_spent_per_participant() qualified = [] @@ -323,18 +341,19 @@ def qualified_participants(self): if mins >= self.min_mins: qualified.append(User.objects.get(id=userid)) return qualified - + def __str__(self): return self.name + class AuditLog(models.Model): timestamp = models.DateTimeField(auto_now_add=True) - user = models.ForeignKey(User, on_delete=models.PROTECT, related_name='audit_logs') + user = models.ForeignKey(User, on_delete=models.PROTECT, related_name="audit_logs") path = models.CharField(max_length=400) post = models.BooleanField() pii = models.BooleanField(default=False) additional_context = models.JSONField(null=True, default=None) - + def __str__(self): return f"Audit log for {self.user.profile.slack_username}. PII: {self.pii}" diff --git a/twisted/twisted_site/slack.py b/twisted/twisted_site/slack.py index 4238e0d..e6baeea 100644 --- a/twisted/twisted_site/slack.py +++ b/twisted/twisted_site/slack.py @@ -113,14 +113,8 @@ def get_user_profile(self, user: str) -> dict[str, Any]: return { "id": user_data["id"], "name": user_data.get("name"), - "real_name": ( - user_data.get("real_name") - or profile.get("real_name") - ), - "display_name": ( - profile.get("display_name") - or user_data.get("name") - ), + "real_name": (user_data.get("real_name") or profile.get("real_name")), + "display_name": (profile.get("display_name") or user_data.get("name")), "image_24": profile.get("image_24"), "image_32": profile.get("image_32"), "image_48": profile.get("image_48"), @@ -187,4 +181,4 @@ def error_log( cc_group_id=cc_group_id, ) -slack_client = slack_bot.client \ No newline at end of file +slack_client = slack_bot.client diff --git a/twisted/twisted_site/templatetags/maths.py b/twisted/twisted_site/templatetags/maths.py index b0b6fba..38cd856 100644 --- a/twisted/twisted_site/templatetags/maths.py +++ b/twisted/twisted_site/templatetags/maths.py @@ -1,6 +1,8 @@ from django import template + register = template.Library() + @register.filter def divide(x, y): - return x/y + return x / y diff --git a/twisted/twisted_site/templatetags/time_filters.py b/twisted/twisted_site/templatetags/time_filters.py index c164d85..763e7dc 100644 --- a/twisted/twisted_site/templatetags/time_filters.py +++ b/twisted/twisted_site/templatetags/time_filters.py @@ -1,24 +1,27 @@ from django import template from datetime import timedelta + register = template.Library() + @register.filter def minutes_to_hours_minutes(minutes): try: total_minutes = int(minutes) except (ValueError, TypeError): return minutes # Return original value if it's not a valid integer - + hours = total_minutes // 60 remaining_minutes = total_minutes % 60 - + if hours > 0: if remaining_minutes == 0: return f"{hours}h" return f"{hours}h {remaining_minutes}m" return f"{int(minutes)}m" + @register.filter -def rounddelta(delta:timedelta, to=1): +def rounddelta(delta: timedelta, to=1): delta = timedelta(seconds=round(delta.total_seconds(), to)) - return delta \ No newline at end of file + return delta diff --git a/twisted/twisted_site/urls.py b/twisted/twisted_site/urls.py index 19ea57c..60fcd2e 100644 --- a/twisted/twisted_site/urls.py +++ b/twisted/twisted_site/urls.py @@ -1,4 +1,9 @@ -from .views.client.auth import LoginView, AuthCallbackView, HackatimeCallbackView, LogoutView +from .views.client.auth import ( + LoginView, + AuthCallbackView, + HackatimeCallbackView, + LogoutView, +) from django.urls import path from .views import client from .views import admin @@ -6,40 +11,95 @@ from .views.ari import AriView urlpatterns = [ - path('', view=client.HomepageView.as_view(), name="homepage"), - path('faqs/', view=client.FaqsView.as_view(), name="faqs"), - + path("", view=client.HomepageView.as_view(), name="homepage"), + path("faqs/", view=client.FaqsView.as_view(), name="faqs"), path("api/upload_image/", upload_file, name="misc.upload_file"), path("api/ari/", AriView.as_view(), name="ari"), - path("auth/login/", LoginView.as_view(), name="login"), path("oauth/callback/", AuthCallbackView.as_view(), name="auth_callback"), - path("oauth/hackatime_callback/", HackatimeCallbackView.as_view(), name="auth_callback"), + path( + "oauth/hackatime_callback/", + HackatimeCallbackView.as_view(), + name="auth_callback", + ), path("auth/logout/", LogoutView.as_view(), name="logout"), - path("dashboard/", client.DashboardView.as_view(), name="dashboard"), - path("dashboard/frame/projects/", client.ListProjects.as_view(), name="fr.projects"), - path("dashboard/frame/projects/create/", client.CreateProject.as_view(), name="fr.projects.create"), - - path("dashboard/frame/projects//", client.ProjectDetail.as_view(), name="fr.projects.detail"), - path("dashboard/frame/projects/ship//", client.SubmitProject.as_view(), name="fr.projects.ship"), - path("dashboard/frame/projects//settings/", client.ProjectSettings.as_view(), name="fr.projects.settings"), - path("dashboard/frame/projects//journals/new/hackatime/", client.NewProjectHackatimeJournal.as_view(), name="fr.projects.journals.new.hackatime"), - path("dashboard/frame/projects//journals/new/untracked/", client.NewProjectUntrackedJournal.as_view(), name="fr.projects.journals.new.untracked"), - path("dashboard/frame/journals/delete//", client.DeleteJournal.as_view(), name="fr.projects.journals.delete"), - path("dashboard/frame/pathways/", client.PathwaysView.as_view(), name="fr.pathways"), - path("dashboard/frame/referrals/", client.ReferralsView.as_view(), name="fr.referrals"), - path("dashboard/frame/discover/", client.DiscoverView.as_view(), name="fr.discover"), - + path( + "dashboard/frame/projects/", client.ListProjects.as_view(), name="fr.projects" + ), + path( + "dashboard/frame/projects/create/", + client.CreateProject.as_view(), + name="fr.projects.create", + ), + path( + "dashboard/frame/projects//", + client.ProjectDetail.as_view(), + name="fr.projects.detail", + ), + path( + "dashboard/frame/projects/ship//", + client.SubmitProject.as_view(), + name="fr.projects.ship", + ), + path( + "dashboard/frame/projects//settings/", + client.ProjectSettings.as_view(), + name="fr.projects.settings", + ), + path( + "dashboard/frame/projects//journals/new/hackatime/", + client.NewProjectHackatimeJournal.as_view(), + name="fr.projects.journals.new.hackatime", + ), + path( + "dashboard/frame/projects//journals/new/untracked/", + client.NewProjectUntrackedJournal.as_view(), + name="fr.projects.journals.new.untracked", + ), + path( + "dashboard/frame/journals/delete//", + client.DeleteJournal.as_view(), + name="fr.projects.journals.delete", + ), + path( + "dashboard/frame/pathways/", client.PathwaysView.as_view(), name="fr.pathways" + ), + path( + "dashboard/frame/referrals/", + client.ReferralsView.as_view(), + name="fr.referrals", + ), + path( + "dashboard/frame/discover/", client.DiscoverView.as_view(), name="fr.discover" + ), path("admin/", admin.DashboardView.as_view(), name="admin.dash"), path("admin/users/", admin.UsersView.as_view(), name="admin.users"), - path("admin/users//", admin.UserDetailView.as_view(), name="admin.users.detail"), + path( + "admin/users//", + admin.UserDetailView.as_view(), + name="admin.users.detail", + ), path("admin/pathways/", admin.PathwayListView.as_view(), name="admin.pathways"), - path("admin/pathways/", admin.PathwayDetailView.as_view(), name="admin.pathways.detail"), - path("admin/pathways/new/", admin.PathwayCreateView.as_view(), name="admin.pathways.create"), - path("admin/fulfillment/", admin.FulfillmentView.as_view(), name="admin.fulfillment"), + path( + "admin/pathways/", + admin.PathwayDetailView.as_view(), + name="admin.pathways.detail", + ), + path( + "admin/pathways/new/", + admin.PathwayCreateView.as_view(), + name="admin.pathways.create", + ), + path( + "admin/fulfillment/", admin.FulfillmentView.as_view(), name="admin.fulfillment" + ), path("admin/shop/", admin.ShopView.as_view(), name="admin.shop"), path("admin/review/", admin.ReviewView.as_view(), name="admin.review"), - path("admin/announcements/", admin.AnnouncementsView.as_view(), name="admin.announcements"), + path( + "admin/announcements/", + admin.AnnouncementsView.as_view(), + name="admin.announcements", + ), path("admin/logs/", admin.AuditLogsView.as_view(), name="admin.logs"), ] diff --git a/twisted/twisted_site/views/admin/admin.py b/twisted/twisted_site/views/admin/admin.py index ec23df6..b3a6bb4 100644 --- a/twisted/twisted_site/views/admin/admin.py +++ b/twisted/twisted_site/views/admin/admin.py @@ -6,6 +6,7 @@ from django_htmx.http import trigger_client_event from ...models import AuditLog + @dataclass class SidebarLink: name: str @@ -13,37 +14,74 @@ class SidebarLink: text: str href: str + # Create your views here. class AdminView(View): def get_context_data(self, page, subpage=None) -> dict: context = {} - context['page'] = page - context['subpage'] = subpage + context["page"] = page + context["subpage"] = subpage context["sidebar_links"] = [ - SidebarLink(name="dashboard", icon="analytics", text="Analytics", href=resolve_url('admin.dash')), - SidebarLink(name="users", icon="profile", text="Users", href=resolve_url('admin.users')), - SidebarLink(name="pathways", icon="controls", text="Pathways", href=resolve_url('admin.pathways')), - SidebarLink(name="fulfillment", icon="list", text="Fulfillment", href=resolve_url('admin.fulfillment')), - SidebarLink(name="shop", icon="bag-add", text="Shop", href=resolve_url('admin.shop')), - SidebarLink(name="review", icon="message-new", text="Review", href=resolve_url('admin.review')), - SidebarLink(name="announcements", icon="important", text="Announcements", href=resolve_url('admin.announcements')), - SidebarLink(name="logs", icon="view", text="Audit Logs", href=resolve_url('admin.logs')+"?page=1"), + SidebarLink( + name="dashboard", + icon="analytics", + text="Analytics", + href=resolve_url("admin.dash"), + ), + SidebarLink( + name="users", + icon="profile", + text="Users", + href=resolve_url("admin.users"), + ), + SidebarLink( + name="pathways", + icon="controls", + text="Pathways", + href=resolve_url("admin.pathways"), + ), + SidebarLink( + name="fulfillment", + icon="list", + text="Fulfillment", + href=resolve_url("admin.fulfillment"), + ), + SidebarLink( + name="shop", icon="bag-add", text="Shop", href=resolve_url("admin.shop") + ), + SidebarLink( + name="review", + icon="message-new", + text="Review", + href=resolve_url("admin.review"), + ), + SidebarLink( + name="announcements", + icon="important", + text="Announcements", + href=resolve_url("admin.announcements"), + ), + SidebarLink( + name="logs", + icon="view", + text="Audit Logs", + href=resolve_url("admin.logs") + "?page=1", + ), ] - context['profile'] = self.request.user.profile + context["profile"] = self.request.user.profile return context - def dispatch(self, request, *args, **kwargs): if request.user.is_anonymous: - return redirect('homepage') + return redirect("homepage") if not request.user.profile.is_staff: - return redirect('dashboard') + return redirect("dashboard") self.audit_log = AuditLog( user=request.user, path=self.request.get_full_path(), - post=(request.method.lower() == 'post'), - additional_context={} + post=(request.method.lower() == "post"), + additional_context={}, ) response = super().dispatch(request, *args, **kwargs) self.audit_log.save() - return response \ No newline at end of file + return response diff --git a/twisted/twisted_site/views/admin/announcements.py b/twisted/twisted_site/views/admin/announcements.py index 73c496a..7b9dfbe 100644 --- a/twisted/twisted_site/views/admin/announcements.py +++ b/twisted/twisted_site/views/admin/announcements.py @@ -2,10 +2,11 @@ from .admin import AdminView from django.shortcuts import render, redirect + # Create your views here. class AnnouncementsView(AdminView): def get(self, request): - context = self.get_context_data(page='announcements') + context = self.get_context_data(page="announcements") if self.request.user.is_anonymous: - return redirect('homepage') + return redirect("homepage") return TemplateResponse(request, "admin/announcements.html", context=context) diff --git a/twisted/twisted_site/views/admin/audit_logs.py b/twisted/twisted_site/views/admin/audit_logs.py index d33890f..ad6ef4f 100644 --- a/twisted/twisted_site/views/admin/audit_logs.py +++ b/twisted/twisted_site/views/admin/audit_logs.py @@ -5,25 +5,25 @@ from ...models import AuditLog from django.core.paginator import Paginator + # Create your views here. class AuditLogsView(AdminView): def get(self, request): - page_number = request.GET.get('page') + page_number = request.GET.get("page") if page_number is None: - return redirect(self.request.get_full_path()+'?page=1') - - context = self.get_context_data(page='logs') - - auditlogs = AuditLog.objects.order_by('-timestamp') - - context_mode = request.GET.get('context_mode', 'false') == 'true' + return redirect(self.request.get_full_path() + "?page=1") + + context = self.get_context_data(page="logs") + + auditlogs = AuditLog.objects.order_by("-timestamp") + + context_mode = request.GET.get("context_mode", "false") == "true" if context_mode: auditlogs = auditlogs.exclude( - Q(additional_context__isnull=True) | - Q(additional_context={}) + Q(additional_context__isnull=True) | Q(additional_context={}) ) - + paginator = Paginator(auditlogs, 250, orphans=50) - context['logs'] = paginator.get_page(page_number) - context['log_count'] = auditlogs.count() + context["logs"] = paginator.get_page(page_number) + context["log_count"] = auditlogs.count() return TemplateResponse(request, "admin/logs.html", context=context) diff --git a/twisted/twisted_site/views/admin/dashboard.py b/twisted/twisted_site/views/admin/dashboard.py index edeb329..5ab4f97 100644 --- a/twisted/twisted_site/views/admin/dashboard.py +++ b/twisted/twisted_site/views/admin/dashboard.py @@ -3,39 +3,50 @@ from django.shortcuts import render, redirect from ...models import Journal, Project, ProjectShip import json + + # Create your views here. class DashboardView(AdminView): def get(self, request): - context = self.get_context_data(page='dashboard') + context = self.get_context_data(page="dashboard") if self.request.user.is_anonymous: - return redirect('homepage') + return redirect("homepage") hours_logged = 0 hours_logged_chart = {} logged_project_type = {"Software": 0, "Hardware": 0} shipped_project_type = {"Software": 0, "Hardware": 0} hours_shipped = 0 hours_shipped_chart = {} - for journal in Journal.objects.all().prefetch_related('project'): + for journal in Journal.objects.all().prefetch_related("project"): hours = journal.reduced_minutes / 60 hours_logged += hours - + date = journal.created_at.date().strftime("%a, %d %b") hours_logged_chart[date] = hours_logged_chart.get(date, 0) + hours - + logged_project_type[journal.project.get_project_type_display()] += hours - + if journal.project.is_shipped(): hours_shipped += hours hours_shipped_chart[date] = hours_shipped_chart.get(date, 0) + hours - shipped_project_type[journal.project.get_project_type_display()] += hours - - context['hours_logged'] = round(hours_logged, 2) - context['hours_logged_chart'] = json.dumps([['Date', 'Hours']] + list(hours_logged_chart.items())) - context['logged_project_type'] = json.dumps([['Type', 'Hours']] + list(logged_project_type.items())) - - context['hours_shipped'] = round(hours_shipped, 2) - context['hours_shipped_chart'] = json.dumps([['Date', 'Hours']] + list(hours_shipped_chart.items())) - context['shipped_project_type'] = json.dumps([['Type', 'Hours']] + list(shipped_project_type.items())) - - - return TemplateResponse(request, "admin/dashboard.html", context=context) \ No newline at end of file + shipped_project_type[journal.project.get_project_type_display()] += ( + hours + ) + + context["hours_logged"] = round(hours_logged, 2) + context["hours_logged_chart"] = json.dumps( + [["Date", "Hours"]] + list(hours_logged_chart.items()) + ) + context["logged_project_type"] = json.dumps( + [["Type", "Hours"]] + list(logged_project_type.items()) + ) + + context["hours_shipped"] = round(hours_shipped, 2) + context["hours_shipped_chart"] = json.dumps( + [["Date", "Hours"]] + list(hours_shipped_chart.items()) + ) + context["shipped_project_type"] = json.dumps( + [["Type", "Hours"]] + list(shipped_project_type.items()) + ) + + return TemplateResponse(request, "admin/dashboard.html", context=context) diff --git a/twisted/twisted_site/views/admin/fulfillment.py b/twisted/twisted_site/views/admin/fulfillment.py index ba0be71..a12b79c 100644 --- a/twisted/twisted_site/views/admin/fulfillment.py +++ b/twisted/twisted_site/views/admin/fulfillment.py @@ -1,8 +1,9 @@ from .admin import AdminView from django.shortcuts import render, redirect + # Create your views here. class FulfillmentView(AdminView): def get(self, request): - context = self.get_context_data(page='fulfillment') + context = self.get_context_data(page="fulfillment") return render(request, "admin/fulfillment.html", context=context) diff --git a/twisted/twisted_site/views/admin/pathways.py b/twisted/twisted_site/views/admin/pathways.py index 7b479cb..8c5bda3 100644 --- a/twisted/twisted_site/views/admin/pathways.py +++ b/twisted/twisted_site/views/admin/pathways.py @@ -5,6 +5,7 @@ from django.utils import timezone from django.contrib import messages + # Create your views here. class PathwayListView(AdminView): def get(self, request): @@ -30,7 +31,6 @@ def get(self, request): context["past_pathways"] = past_pathways context["future_pathways"] = future_pathways - return render(request, "admin/pathways/list.html", context=context) @@ -38,10 +38,10 @@ class PathwayCreateView(AdminView): def get(self, request, error=None, extracontext={}): context = self.get_context_data(page="pathways", subpage="create") context.update(extracontext) - + if error: messages.error(request, error) - + return render(request, "admin/pathways/create.html", context=context) def post(self, request): @@ -52,75 +52,82 @@ def post(self, request): end_date = request.POST.get("endDate") end_time = request.POST.get("endTime") - + min_mins = int(request.POST.get("mins", "0")) errcontext = { - 'pathway_name': pathway_name, - 'start_date': start_date, - 'start_time': start_time, - 'end_date': end_date, - 'end_time': end_time, - 'min_mins': min_mins, + "pathway_name": pathway_name, + "start_date": start_date, + "start_time": start_time, + "end_date": end_date, + "end_time": end_time, + "min_mins": min_mins, } - + if "form validation": if not pathway_name: return self.get(request, "No pathway name typed!", errcontext) - + if not start_date: return self.get(request, "No start date selected!", errcontext) - + if not start_time: return self.get(request, "No start time selected!", errcontext) - + if not end_date: return self.get(request, "No end date selected!", errcontext) - + if not end_time: return self.get(request, "No end time selected!", errcontext) - + if min_mins <= 0: - return self.get(request, "Minimum minutes must be greater than zero!", errcontext) - - current_tz_offset = timezone.datetime.now(timezone.get_current_timezone()).strftime('%z') - + return self.get( + request, "Minimum minutes must be greater than zero!", errcontext + ) + + current_tz_offset = timezone.datetime.now( + timezone.get_current_timezone() + ).strftime("%z") + start = timezone.datetime.strptime( f"{start_date} {start_time} {current_tz_offset}", "%Y-%m-%d %H:%M %z" ) - + end = timezone.datetime.strptime( f"{end_date} {end_time} {current_tz_offset}", "%Y-%m-%d %H:%M %z" ) - + Pathway.objects.create( - start=start, - end=end, - name=pathway_name, - min_mins=min_mins + start=start, end=end, name=pathway_name, min_mins=min_mins ) - - messages.success(request, f"Successfully created Pathway for \"{pathway_name}\"!") - return redirect('admin.pathways') + messages.success(request, f'Successfully created Pathway for "{pathway_name}"!') + + return redirect("admin.pathways") class PathwayDetailView(AdminView): def get(self, request, id): context = self.get_context_data(page="pathways", subpage="detail") pathway = get_object_or_404(Pathway, id=id) - context['pathway'] = pathway + context["pathway"] = pathway + + self.audit_log.additional_context["pathway_name"] = pathway.name - self.audit_log.additional_context['pathway_name'] = pathway.name - mins_per_participant = pathway.mins_spent_per_participant() - users = User.objects.filter(id__in=mins_per_participant.keys()).select_related("profile") + users = User.objects.filter(id__in=mins_per_participant.keys()).select_related( + "profile" + ) participants = [ { "user": user, "mins": mins_per_participant[user.id], - "percent": min(100, round(mins_per_participant[user.id] / pathway.min_mins * 100)) if pathway.min_mins else 0, + "percent": min( + 100, round(mins_per_participant[user.id] / pathway.min_mins * 100) + ) + if pathway.min_mins + else 0, "qualified": mins_per_participant[user.id] >= pathway.min_mins, } for user in users diff --git a/twisted/twisted_site/views/admin/review.py b/twisted/twisted_site/views/admin/review.py index 4895ecd..2b2d1c9 100644 --- a/twisted/twisted_site/views/admin/review.py +++ b/twisted/twisted_site/views/admin/review.py @@ -5,39 +5,40 @@ from django.conf import settings from ...models import ProjectShip + # Create your views here. class ReviewView(AdminView): def get(self, request): if settings.DEBUG_REVIEW: return self.debug_get(request) - - context = self.get_context_data(page='review') + + context = self.get_context_data(page="review") return render(request, "admin/review.html", context=context) - + def post(self, request): if settings.DEBUG_REVIEW: return self.debug_post(request) - - context = self.get_context_data(page='review') + + context = self.get_context_data(page="review") return redirect(self.request.path_info) - + def debug_get(self, request): - context = self.get_context_data(page='review') - context['ships'] = ProjectShip.objects.all().order_by('-created_at') + context = self.get_context_data(page="review") + context["ships"] = ProjectShip.objects.all().order_by("-created_at") return render(request, "admin/debug/review.html", context=context) - + def debug_post(self, request): - id = request.POST['id'] + id = request.POST["id"] - status = request.POST['status'] - note_to_maker = request.POST['note_to_maker'] - audit_note = request.POST['audit_note'] - technical_features = request.POST['technical_features'] - deflation_reason = request.POST['deflation_reason'] + status = request.POST["status"] + note_to_maker = request.POST["note_to_maker"] + audit_note = request.POST["audit_note"] + technical_features = request.POST["technical_features"] + deflation_reason = request.POST["deflation_reason"] - final_status = request.POST['final_status'] - final_note_to_maker = request.POST['final_note_to_maker'] - final_audit_note = request.POST['final_audit_note'] + final_status = request.POST["final_status"] + final_note_to_maker = request.POST["final_note_to_maker"] + final_audit_note = request.POST["final_audit_note"] ship = get_object_or_404(ProjectShip, id=id) @@ -53,4 +54,4 @@ def debug_post(self, request): ship.save() messages.info(request, f"Ship with id {id} updated.") - return redirect(self.request.path_info) \ No newline at end of file + return redirect(self.request.path_info) diff --git a/twisted/twisted_site/views/admin/shop.py b/twisted/twisted_site/views/admin/shop.py index 3e563b7..782bb85 100644 --- a/twisted/twisted_site/views/admin/shop.py +++ b/twisted/twisted_site/views/admin/shop.py @@ -1,8 +1,9 @@ from .admin import AdminView from django.shortcuts import render, redirect + # Create your views here. class ShopView(AdminView): def get(self, request): - context = self.get_context_data(page='shop') + context = self.get_context_data(page="shop") return render(request, "admin/shop.html", context=context) diff --git a/twisted/twisted_site/views/admin/users.py b/twisted/twisted_site/views/admin/users.py index 4a836e4..6358cd7 100644 --- a/twisted/twisted_site/views/admin/users.py +++ b/twisted/twisted_site/views/admin/users.py @@ -8,58 +8,67 @@ import os import json + # Create your views here. class UsersView(AdminView): def get(self, request): - context = self.get_context_data(page='users') - if request.GET.get('search'): - query = request.GET['search'] - context['users'] = User.objects.all() - context['users'] = User.objects.filter( - Q(profile__slack_username__icontains=query) | - Q(profile__slack_id__icontains=query) | - Q(first_name__icontains=query) | - Q(last_name__icontains=query) - ).order_by('profile__slack_username') - context['search'] = True + context = self.get_context_data(page="users") + if request.GET.get("search"): + query = request.GET["search"] + context["users"] = User.objects.all() + context["users"] = User.objects.filter( + Q(profile__slack_username__icontains=query) + | Q(profile__slack_id__icontains=query) + | Q(first_name__icontains=query) + | Q(last_name__icontains=query) + ).order_by("profile__slack_username") + context["search"] = True else: - context['users'] = User.objects.all().order_by('profile__slack_username') + context["users"] = User.objects.all().order_by("profile__slack_username") return TemplateResponse(request, "admin/users.html", context) def post(self, request): - if request.POST.get('action') == 'logoutall': + if request.POST.get("action") == "logoutall": session_count = Session.objects.count() Session.objects.all().delete() - self.audit_log.additional_context['action'] = 'logoutall' - self.audit_log.additional_context['sessions_deleted'] = session_count + self.audit_log.additional_context["action"] = "logoutall" + self.audit_log.additional_context["sessions_deleted"] = session_count return redirect(self.request.path) - + + class UserDetailView(AdminView): def get(self, request, id): - context = self.get_context_data(page='users', subpage='detail') + context = self.get_context_data(page="users", subpage="detail") user = get_object_or_404(User, id=id) - self.audit_log.additional_context['user_pfp__img'] = user.profile.slack_pfp_url - self.audit_log.additional_context['user'] = user.profile.slack_username - - context['user'] = user - context['login_maybe'] = os.environ.get("LOGIN_ENABLED") == 'maybe' + self.audit_log.additional_context["user_pfp__img"] = user.profile.slack_pfp_url + self.audit_log.additional_context["user"] = user.profile.slack_username + + context["user"] = user + context["login_maybe"] = os.environ.get("LOGIN_ENABLED") == "maybe" return TemplateResponse(request, "admin/user.html", context) - + def post(self, request, id): user = get_object_or_404(User, id=id) - self.audit_log.additional_context['user_pfp__img'] = user.profile.slack_pfp_url - self.audit_log.additional_context['user'] = user.profile.slack_username + self.audit_log.additional_context["user_pfp__img"] = user.profile.slack_pfp_url + self.audit_log.additional_context["user"] = user.profile.slack_username - if request.POST.get('action') == 'toggle_is_allowed': + if request.POST.get("action") == "toggle_is_allowed": prof = user.profile prof.is_allowed = not prof.is_allowed - self.audit_log.additional_context['is_allowed'] = f"Set to {prof.is_allowed}" + self.audit_log.additional_context["is_allowed"] = ( + f"Set to {prof.is_allowed}" + ) prof.save() resp = redirect(self.request.path) - resp["HX-Trigger"] = json.dumps({ - "toast": {"message": f"Set is_allowed to {prof.is_allowed}", "variant": "success"} - }) + resp["HX-Trigger"] = json.dumps( + { + "toast": { + "message": f"Set is_allowed to {prof.is_allowed}", + "variant": "success", + } + } + ) return resp diff --git a/twisted/twisted_site/views/ari.py b/twisted/twisted_site/views/ari.py index be2784a..61c92ff 100644 --- a/twisted/twisted_site/views/ari.py +++ b/twisted/twisted_site/views/ari.py @@ -10,12 +10,12 @@ def _escape_mrkdwn(text): - return text.replace('&', '&').replace('<', '<').replace('>', '>') + return text.replace("&", "&").replace("<", "<").replace(">", ">") def _quote_block(value): - lines = _escape_mrkdwn(value).splitlines() or [''] - return '\n'.join(f'> {line}' for line in lines) + lines = _escape_mrkdwn(value).splitlines() or [""] + return "\n".join(f"> {line}" for line in lines) def _build_ship_update_blocks(project, changes): @@ -31,18 +31,20 @@ def _build_ship_update_blocks(project, changes): for change in changes: blocks.append({"type": "divider"}) - field_name = _escape_mrkdwn(change['field'].replace('_', ' ').title()) - blocks.append({ - "type": "section", - "text": { - "type": "mrkdwn", - "text": ( - f"*{field_name}* changed\n\n" - f"*Old:*\n{_quote_block(change['old_value'])}\n\n" - f"*New:*\n{_quote_block(change['new_value'])}" - ), - }, - }) + field_name = _escape_mrkdwn(change["field"].replace("_", " ").title()) + blocks.append( + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": ( + f"*{field_name}* changed\n\n" + f"*Old:*\n{_quote_block(change['old_value'])}\n\n" + f"*New:*\n{_quote_block(change['new_value'])}" + ), + }, + } + ) return blocks @@ -87,13 +89,15 @@ def _build_review_approved_blocks(project, note_to_maker): ] if note_to_maker: blocks.append({"type": "divider"}) - blocks.append({ - "type": "section", - "text": { - "type": "mrkdwn", - "text": f"*Note from reviewer:*\n{_quote_block(note_to_maker)}", - }, - }) + blocks.append( + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": f"*Note from reviewer:*\n{_quote_block(note_to_maker)}", + }, + } + ) return blocks @@ -109,21 +113,25 @@ def _build_review_rejected_blocks(project, note_to_maker): ] if note_to_maker: blocks.append({"type": "divider"}) - blocks.append({ + blocks.append( + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": f"*Note from reviewer:*\n{_quote_block(note_to_maker)}", + }, + } + ) + blocks.append({"type": "divider"}) + blocks.append( + { "type": "section", "text": { "type": "mrkdwn", - "text": f"*Note from reviewer:*\n{_quote_block(note_to_maker)}", + "text": "Feel free to drop us a message over at #twisted-help if you think this is a mistake!", }, - }) - blocks.append({"type": "divider"}) - blocks.append({ - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Feel free to drop us a message over at #twisted-help if you think this is a mistake!", - }, - }) + } + ) return blocks @@ -150,61 +158,62 @@ def _build_review_requeued_blocks(project): }, ] + # Create your views here. -@method_decorator(csrf_exempt, name='dispatch') +@method_decorator(csrf_exempt, name="dispatch") class AriView(View): def post(self, request): body = request.body if not verify_webhook_signature( body, - request.headers.get('X-Ari-Timestamp', ''), - request.headers.get('X-Ari-Delivery-Id', ''), - request.headers.get('X-Ari-Signature', ''), + request.headers.get("X-Ari-Timestamp", ""), + request.headers.get("X-Ari-Delivery-Id", ""), + request.headers.get("X-Ari-Signature", ""), ): return HttpResponse(status=401) data = json.loads(body) - external_id = data.get('external_id') + external_id = data.get("external_id") if not external_id: - return HttpResponseBadRequest('Missing external_id') + return HttpResponseBadRequest("Missing external_id") try: - project_id = int(external_id.removeprefix('twisted-')) + project_id = int(external_id.removeprefix("twisted-")) project = Project.objects.get(id=project_id) except (ValueError, Project.DoesNotExist): # ty:ignore[unresolved-attribute] - return HttpResponseBadRequest('Invalid external_id') + return HttpResponseBadRequest("Invalid external_id") - event = data.get('event') + event = data.get("event") if not event: - return HttpResponseBadRequest('Missing event') - - if data['event'] == 'ship.updated': - project.project_name = data['ship']['title'] - project.project_description = data['ship']['description'] - project.project_type = data['ship']['track'] - project.screenshot_url = data['ship']['thumbnail_url'] - project.repo_url = data['ship']['repo_url'] - project.playable_url = data['ship']['demo_url'] - project.hackatime_project_name = data['ship']['hackatime_projects'][0] + return HttpResponseBadRequest("Missing event") + + if data["event"] == "ship.updated": + project.project_name = data["ship"]["title"] + project.project_description = data["ship"]["description"] + project.project_type = data["ship"]["track"] + project.screenshot_url = data["ship"]["thumbnail_url"] + project.repo_url = data["ship"]["repo_url"] + project.playable_url = data["ship"]["demo_url"] + project.hackatime_project_name = data["ship"]["hackatime_projects"][0] project.save() slack_bot.send_blocks( channel=project.user.profile.slack_id, - blocks=_build_ship_update_blocks(project, data['changes']), + blocks=_build_ship_update_blocks(project, data["changes"]), text=f"Your ship for {project.project_name} has been updated by a reviewer!", ) - return HttpResponse('Request processed!') - - if data['event'] == 'review.changes': - if data['decision'] != 'changes': - return HttpResponse('Event ignored') - note_to_maker = data['review']['note_to_maker'] + return HttpResponse("Request processed!") - ship:ProjectShip = project.latest_ship() + if data["event"] == "review.changes": + if data["decision"] != "changes": + return HttpResponse("Event ignored") + note_to_maker = data["review"]["note_to_maker"] + + ship: ProjectShip = project.latest_ship() - ship.status = 'requested_changes' # ty:ignore[invalid-assignment] + ship.status = "requested_changes" # ty:ignore[invalid-assignment] ship.note_to_maker = note_to_maker ship.save() @@ -214,19 +223,19 @@ def post(self, request): text=f"Your ship for {project.project_name} needs some changes!", ) - return HttpResponse('Request processed!') + return HttpResponse("Request processed!") - if data['event'] == 'review.approved': - review = data['review'] - note_to_maker = review.get('note_to_maker', '') - justification = review.get('justification') or {} + if data["event"] == "review.approved": + review = data["review"] + note_to_maker = review.get("note_to_maker", "") + justification = review.get("justification") or {} ship: ProjectShip = project.latest_ship() - ship.status = 'approved' # ty:ignore[invalid-assignment] + ship.status = "approved" # ty:ignore[invalid-assignment] ship.note_to_maker = note_to_maker - ship.audit_note = review.get('audit_note', '') - ship.technical_features = justification.get('technical_features', '') - ship.deflation_reason = justification.get('deflation_reason', '') + ship.audit_note = review.get("audit_note", "") + ship.technical_features = justification.get("technical_features", "") + ship.deflation_reason = justification.get("deflation_reason", "") ship.save() slack_bot.send_blocks( @@ -235,19 +244,19 @@ def post(self, request): text=f"Your ship for {project.project_name} was approved!", ) - return HttpResponse('Request processed!') + return HttpResponse("Request processed!") - if data['event'] == 'review.rejected': - review = data['review'] - note_to_maker = review.get('note_to_maker', '') - justification = review.get('justification') or {} + if data["event"] == "review.rejected": + review = data["review"] + note_to_maker = review.get("note_to_maker", "") + justification = review.get("justification") or {} ship: ProjectShip = project.latest_ship() - ship.status = 'rejected' # ty:ignore[invalid-assignment] + ship.status = "rejected" # ty:ignore[invalid-assignment] ship.note_to_maker = note_to_maker - ship.audit_note = review.get('audit_note', '') - ship.technical_features = justification.get('technical_features', '') - ship.deflation_reason = justification.get('deflation_reason', '') + ship.audit_note = review.get("audit_note", "") + ship.technical_features = justification.get("technical_features", "") + ship.deflation_reason = justification.get("deflation_reason", "") ship.save() slack_bot.send_blocks( @@ -256,11 +265,11 @@ def post(self, request): text=f"Your ship for {project.project_name} was rejected.", ) - return HttpResponse('Request processed!') + return HttpResponse("Request processed!") - if data['event'] == 'review.reverted': + if data["event"] == "review.reverted": ship: ProjectShip = project.latest_ship() - ship.status = 'pending' # ty:ignore[invalid-assignment] + ship.status = "pending" # ty:ignore[invalid-assignment] ship.save() slack_bot.send_blocks( @@ -269,11 +278,11 @@ def post(self, request): text=f"The decision on your ship for {project.project_name} was reverted.", ) - return HttpResponse('Request processed!') + return HttpResponse("Request processed!") - if data['event'] == 'review.requeued': + if data["event"] == "review.requeued": ship: ProjectShip = project.latest_ship() - ship.status = 'pending' # ty:ignore[invalid-assignment] + ship.status = "pending" # ty:ignore[invalid-assignment] ship.save() slack_bot.send_blocks( @@ -282,6 +291,6 @@ def post(self, request): text=f"Your ship for {project.project_name} is back in the review queue.", ) - return HttpResponse('Request processed!') + return HttpResponse("Request processed!") - return HttpResponse('Event ignored') \ No newline at end of file + return HttpResponse("Event ignored") diff --git a/twisted/twisted_site/views/client/__init__.py b/twisted/twisted_site/views/client/__init__.py index 7e3545f..2b54b67 100644 --- a/twisted/twisted_site/views/client/__init__.py +++ b/twisted/twisted_site/views/client/__init__.py @@ -2,7 +2,11 @@ from .dashboard import DashboardView from .projects import ListProjects, CreateProject from .project import ProjectDetail, ProjectSettings, SubmitProject -from .journal import NewProjectHackatimeJournal, NewProjectUntrackedJournal, DeleteJournal +from .journal import ( + NewProjectHackatimeJournal, + NewProjectUntrackedJournal, + DeleteJournal, +) from .pathways import PathwaysView from .referrals import ReferralsView -from .discover import DiscoverView \ No newline at end of file +from .discover import DiscoverView diff --git a/twisted/twisted_site/views/client/auth.py b/twisted/twisted_site/views/client/auth.py index dc695db..0adfd84 100644 --- a/twisted/twisted_site/views/client/auth.py +++ b/twisted/twisted_site/views/client/auth.py @@ -97,15 +97,15 @@ def get(self, request): profile.slack_username = display_name profile.slack_pfp_url = avatar_url profile.ysws_eligible = ysws_eligible - profile.hca_access_token = token['access_token'] - - referral_code = self.request.COOKIES.get('referral') + profile.hca_access_token = token["access_token"] + + referral_code = self.request.COOKIES.get("referral") if created and referral_code: referral_profiles = Profile.objects.filter(my_referral_code=referral_code) if referral_profiles: referral_profile = referral_profiles.get() profile.referred_by = referral_profile - + profile.save() if os.environ.get("LOGIN_ENABLED") == "maybe": diff --git a/twisted/twisted_site/views/client/dashboard.py b/twisted/twisted_site/views/client/dashboard.py index dfe3ca0..86f987e 100644 --- a/twisted/twisted_site/views/client/dashboard.py +++ b/twisted/twisted_site/views/client/dashboard.py @@ -2,25 +2,29 @@ from django.shortcuts import render, redirect, resolve_url, get_object_or_404 from ...models import Project + # Create your views here. class DashboardView(View): def get(self, request): if self.request.user.is_anonymous: - return redirect('homepage') + return redirect("homepage") profile = self.request.user.profile - - context = { - "profile": profile - } - + + context = {"profile": profile} + startup_windows = [] - - project_id = request.GET.get('project') - + + project_id = request.GET.get("project") + if project_id: project = get_object_or_404(Project, id=project_id) - startup_windows.append({"href": resolve_url('fr.projects.detail', project.id), "title": project.project_name}) - - context['startup_windows'] = startup_windows - - return render(request, "client/dashboard.html", context) \ No newline at end of file + startup_windows.append( + { + "href": resolve_url("fr.projects.detail", project.id), + "title": project.project_name, + } + ) + + context["startup_windows"] = startup_windows + + return render(request, "client/dashboard.html", context) diff --git a/twisted/twisted_site/views/client/homepage.py b/twisted/twisted_site/views/client/homepage.py index 9008576..a4dc838 100644 --- a/twisted/twisted_site/views/client/homepage.py +++ b/twisted/twisted_site/views/client/homepage.py @@ -10,22 +10,22 @@ def get(self, request): login_enabled = False else: login_enabled = True - + referral_code = request.GET.get("ref") - + response = render( request, "client/homepage.html", {"login_enabled": login_enabled}, ) - + if referral_code: response.set_cookie( - 'referral', + "referral", referral_code, - max_age=60*60, # 1 hour + max_age=60 * 60, # 1 hour httponly=True, - samesite='Lax' + samesite="Lax", ) return response diff --git a/twisted/twisted_site/views/client/journal.py b/twisted/twisted_site/views/client/journal.py index 0a8d438..59bcb67 100644 --- a/twisted/twisted_site/views/client/journal.py +++ b/twisted/twisted_site/views/client/journal.py @@ -8,7 +8,7 @@ import math HACKATIME_MAX_LOGGABLE_MINUTES = 6 * 60 -IMAGE_REGEX = r'!\[([^\]]*)\]\([^)]+\)' +IMAGE_REGEX = r"!\[([^\]]*)\]\([^)]+\)" class NewProjectHackatimeJournal(View): @@ -24,8 +24,7 @@ def get(self, request, id, info=None, context={}): context["project"] = project if project.is_shipped(): - return redirect('fr.projects.detail', id) - + return redirect("fr.projects.detail", id) log_minutes = project.hackatime_time_unjournaled() @@ -47,15 +46,15 @@ def post(self, request, id): ) if project.is_shipped(): - return redirect('fr.projects.detail', id) + return redirect("fr.projects.detail", id) content = request.POST["content"] - + image_count = len(re.findall(IMAGE_REGEX, content)) required_image_count = math.ceil(max(1, reduced_minutes / 180)) - - content_no_images = re.sub(IMAGE_REGEX, '', content) - content_length = len(' '.join(content_no_images.split())) + + content_no_images = re.sub(IMAGE_REGEX, "", content) + content_length = len(" ".join(content_no_images.split())) if image_count < required_image_count: return self.get( @@ -87,19 +86,20 @@ def post(self, request, id): UNTRACKED_MAX_LOGGABLE_MINUTES = 60 + class NewProjectUntrackedJournal(View): def get(self, request, id, info=None, context={}): context["info"] = info if self.request.user.is_anonymous: return redirect("homepage") - + project = get_object_or_404(Project, id=id) if project.user != request.user: return redirect("dashboard") - if project.project_type == 'software': - return redirect('fr.projects.journals.new.hackatime') + if project.project_type == "software": + return redirect("fr.projects.journals.new.hackatime") context["project"] = project @@ -123,16 +123,15 @@ def post(self, request, id): project = get_object_or_404(Project, id=id) if project.user != request.user: return redirect("dashboard") - - if project.project_type == 'software': - return redirect('fr.projects.journals.new.hackatime') + + if project.project_type == "software": + return redirect("fr.projects.journals.new.hackatime") content = request.POST["content"] time_logged = int(request.POST["time_logged"]) - - content_no_images = re.sub(IMAGE_REGEX, '', content) - content_length = len(' '.join(content_no_images.split())) + content_no_images = re.sub(IMAGE_REGEX, "", content) + content_length = len(" ".join(content_no_images.split())) if time_logged > UNTRACKED_MAX_LOGGABLE_MINUTES: return self.get( @@ -149,7 +148,7 @@ def post(self, request, id): info="I dont understand, why do you wanna lose time :hs:", context={"content": content}, ) - + if content_length < min(100, time_logged * 2): return self.get( request, @@ -169,46 +168,42 @@ def post(self, request, id): return self.get(request, id, context={"success": True}) + class DeleteJournal(View): - def get(self, request, id, context={'success': False}): + def get(self, request, id, context={"success": False}): if request.user.is_anonymous: - return redirect('homepage') - + return redirect("homepage") + if id is not None: journal = get_object_or_404(Journal, id=id) if journal.project.is_shipped(): - return redirect('fr.projects.detail', journal.project.id) + return redirect("fr.projects.detail", journal.project.id) if journal.project.user != request.user: - return redirect('dashboard') - - if journal.type != 'untracked': - return redirect('dashboard') - - - context['journal'] = journal - - - return render( - request, "client/projects/journal/delete.html", context=context - ) + return redirect("dashboard") + + if journal.type != "untracked": + return redirect("dashboard") + + context["journal"] = journal + + return render(request, "client/projects/journal/delete.html", context=context) def post(self, request, id): if request.user.is_anonymous: - return redirect('homepage') + return redirect("homepage") journal = get_object_or_404(Journal, id=id) if journal.project.is_shipped(): - return redirect('fr.projects.detail', journal.project.id) + return redirect("fr.projects.detail", journal.project.id) if journal.project.user != request.user: - return redirect('dashboard') - - if journal.type != 'untracked': - return redirect('dashboard') - + return redirect("dashboard") + + if journal.type != "untracked": + return redirect("dashboard") + journal.delete() - - + return self.get(request, id=None, context={"success": True}) diff --git a/twisted/twisted_site/views/client/project.py b/twisted/twisted_site/views/client/project.py index 0acddbb..e9c245d 100644 --- a/twisted/twisted_site/views/client/project.py +++ b/twisted/twisted_site/views/client/project.py @@ -8,6 +8,7 @@ from ... import hackatime from ... import ari + # Create your views here. class ProjectDetail(View): def get(self, request, id): @@ -139,7 +140,7 @@ def post(self, request, id, context={}): project = get_object_or_404(Project, id=id) if project.user != request.user: - return redirect('fr.projects.detail', project.id) + return redirect("fr.projects.detail", project.id) if project.is_shipped(): return self.get( @@ -162,4 +163,4 @@ def post(self, request, id, context={}): except Exception as e: ship.delete() raise e - return redirect('fr.projects.detail', project.id) + return redirect("fr.projects.detail", project.id) diff --git a/twisted/twisted_site/views/client/projects.py b/twisted/twisted_site/views/client/projects.py index 4aa49ae..897504b 100644 --- a/twisted/twisted_site/views/client/projects.py +++ b/twisted/twisted_site/views/client/projects.py @@ -8,8 +8,8 @@ class ListProjects(View): def get(self, request): if self.request.user.is_anonymous: - return redirect('homepage') - + return redirect("homepage") + profile = request.user.profile projects = request.user.projects.all() @@ -24,14 +24,14 @@ def get(self, request): class CreateProject(View): def get(self, request): if self.request.user.is_anonymous: - return redirect('homepage') - + return redirect("homepage") + return render(request, "client/projects/create.html") def post(self, request): if self.request.user.is_anonymous: - return redirect('homepage') - + return redirect("homepage") + project_name = request.POST["name"] project_description = request.POST["description"] project_type = request.POST["type"] @@ -46,4 +46,4 @@ def post(self, request): project_type=project_type, ) - return redirect('fr.projects') + return redirect("fr.projects") diff --git a/twisted/twisted_site/views/client/referrals.py b/twisted/twisted_site/views/client/referrals.py index 0ddeb28..a8b1ea3 100644 --- a/twisted/twisted_site/views/client/referrals.py +++ b/twisted/twisted_site/views/client/referrals.py @@ -12,22 +12,22 @@ class ReferralsView(View): def get(self, request): if self.request.user.is_anonymous: return redirect("homepage") - + context = {} - - context['profile'] = profile = request.user.profile - + + context["profile"] = profile = request.user.profile + if not profile.my_referral_code: while True: - current_code = ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(12)]) + current_code = "".join( + [ + random.choice(string.ascii_letters + string.digits) + for _ in range(12) + ] + ) if len(Profile.objects.filter(my_referral_code=current_code)) == 0: profile.my_referral_code = current_code profile.save() break - - return render( - request, - "client/referrals.html", - context=context - ) + return render(request, "client/referrals.html", context=context) diff --git a/twisted/twisted_site/views/image_upload.py b/twisted/twisted_site/views/image_upload.py index d325330..ed25b25 100644 --- a/twisted/twisted_site/views/image_upload.py +++ b/twisted/twisted_site/views/image_upload.py @@ -22,6 +22,7 @@ region_name="auto", ) + @login_required def upload_file(request): if request.method == "POST": @@ -30,7 +31,10 @@ def upload_file(request): if file.content_type not in ALLOWED_CONTENT_TYPES: return JsonResponse( - {"status": "error", "reason": "Only PNG, JPEG, WEBP, or GIF images are allowed!"} + { + "status": "error", + "reason": "Only PNG, JPEG, WEBP, or GIF images are allowed!", + } ) # The size limit is a server-side policy; never let the client raise it. @@ -46,23 +50,25 @@ def upload_file(request): # Handle upload errors if response_data.get("status") == "error": return JsonResponse(response_data) - + url = response_data["link"] filename = response_data["name"] UploadedFile.objects.create( uploaded_by=request.user, link=url, cdn_response=response_data, - uploaded_thru=request.POST.get('ref', 'unknown'), - filesize=file.size + uploaded_thru=request.POST.get("ref", "unknown"), + filesize=file.size, + ) + + return JsonResponse( + { + "status": "ok", + "link": url, + "name": filename, + "response": response_data, + } ) - - return JsonResponse({ - "status": "ok", - "link": url, - "name": filename, - "response": response_data, - }) return JsonResponse( {"status": "error", "reason": "Invalid request: No file found"} ) @@ -93,10 +99,7 @@ def _upload_fileobj(fileobj, filename, content_type, size): } except (ClientError, BotoCoreError) as e: - return { - "status": "error", - "error": str(e) - } + return {"status": "error", "error": str(e)} except Exception as e: return { From 959c1bbdcf6cb5d69385e72b3593f3bfd6df8f8b Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:11:37 -0400 Subject: [PATCH 03/16] Format any remaining Python files --- twisted/common/apps.py | 2 +- twisted/manage.py | 5 +- twisted/mysite/asgi.py | 2 +- twisted/mysite/middleware.py | 1 + twisted/mysite/settings.py | 131 ++++++++++++++++--------------- twisted/mysite/wsgi.py | 2 +- twisted/tailwindcsstheme/apps.py | 2 +- 7 files changed, 75 insertions(+), 70 deletions(-) diff --git a/twisted/common/apps.py b/twisted/common/apps.py index 5f2f078..3ce3894 100644 --- a/twisted/common/apps.py +++ b/twisted/common/apps.py @@ -2,4 +2,4 @@ class CommonConfig(AppConfig): - name = 'common' + name = "common" diff --git a/twisted/manage.py b/twisted/manage.py index a7da667..43fe8a5 100755 --- a/twisted/manage.py +++ b/twisted/manage.py @@ -1,12 +1,13 @@ #!/usr/bin/env python """Django's command-line utility for administrative tasks.""" + import os import sys def main(): """Run administrative tasks.""" - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: @@ -18,5 +19,5 @@ def main(): execute_from_command_line(sys.argv) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/twisted/mysite/asgi.py b/twisted/mysite/asgi.py index 540f6e4..3801320 100644 --- a/twisted/mysite/asgi.py +++ b/twisted/mysite/asgi.py @@ -11,6 +11,6 @@ from django.core.asgi import get_asgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") application = get_asgi_application() diff --git a/twisted/mysite/middleware.py b/twisted/mysite/middleware.py index 19e33d5..325db2b 100644 --- a/twisted/mysite/middleware.py +++ b/twisted/mysite/middleware.py @@ -1,6 +1,7 @@ import zoneinfo from django.utils import timezone + class TimezoneMiddleware: def __init__(self, get_response): self.get_response = get_response diff --git a/twisted/mysite/settings.py b/twisted/mysite/settings.py index 6933734..7a43ceb 100644 --- a/twisted/mysite/settings.py +++ b/twisted/mysite/settings.py @@ -9,11 +9,12 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/6.0/ref/settings/ """ + from dotenv import load_dotenv import os from pathlib import Path -if not os.environ.get('ALLOWED_HOSTS'): +if not os.environ.get("ALLOWED_HOSTS"): load_dotenv() # Build paths inside the project like this: BASE_DIR / 'subdir'. @@ -24,14 +25,14 @@ # See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.environ['SECRET_KEY'] +SECRET_KEY = os.environ["SECRET_KEY"] # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = os.environ.get('DEBUG', 'false').lower() in ['true', 'on', '1'] -DEBUG_REVIEW = os.environ.get('DEBUG_REVIEW', str(DEBUG)).lower() in ['true', 'on', '1'] +DEBUG = os.environ.get("DEBUG", "false").lower() in ["true", "on", "1"] +DEBUG_REVIEW = os.environ.get("DEBUG_REVIEW", str(DEBUG)).lower() in ["true", "on", "1"] USE_X_FORWARDED_HOST = True -SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') +SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") # Behind the TLS-terminating proxy above, cookies should never travel over plain # HTTP once we're not in local dev. @@ -42,40 +43,42 @@ SECURE_HSTS_INCLUDE_SUBDOMAINS = not DEBUG SECURE_HSTS_PRELOAD = not DEBUG -X_FRAME_OPTIONS = 'SAMEORIGIN' +X_FRAME_OPTIONS = "SAMEORIGIN" allowed_hosts_raw = os.getenv("ALLOWED_HOSTS", "127.0.0.1,localhost") ALLOWED_HOSTS = [host.strip() for host in allowed_hosts_raw.split(",") if host.strip()] -csrf_origins_raw = os.getenv("CSRF_TRUSTED_ORIGINS", "http://127.0.0.1:8000,http://localhost:8000") -CSRF_TRUSTED_ORIGINS = [origin.strip() for origin in csrf_origins_raw.split(",") if origin.strip()] +csrf_origins_raw = os.getenv( + "CSRF_TRUSTED_ORIGINS", "http://127.0.0.1:8000,http://localhost:8000" +) +CSRF_TRUSTED_ORIGINS = [ + origin.strip() for origin in csrf_origins_raw.split(",") if origin.strip() +] # Application definition -TAILWIND_APP_NAME = 'tailwindcsstheme' +TAILWIND_APP_NAME = "tailwindcsstheme" INSTALLED_APPS = [ # 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'django.contrib.humanize', - + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "django.contrib.humanize", # Your apps - 'common', - 'twisted_site', - + "common", + "twisted_site", # 3rd party apps - 'django_cotton', - 'django_cotton_ui', - 'tailwind', + "django_cotton", + "django_cotton_ui", + "tailwind", TAILWIND_APP_NAME, - 'django_htmx', - 'django_extensions', - 'mathfilters', - 'django_humanize' + "django_htmx", + "django_extensions", + "mathfilters", + "django_humanize", ] if DEBUG: @@ -83,15 +86,15 @@ INSTALLED_APPS += ["django_browser_reload"] MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'whitenoise.middleware.WhiteNoiseMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'mysite.middleware.TimezoneMiddleware', + "django.middleware.security.SecurityMiddleware", + "whitenoise.middleware.WhiteNoiseMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + "mysite.middleware.TimezoneMiddleware", "django_htmx.middleware.HtmxMiddleware", ] @@ -101,24 +104,24 @@ "django_browser_reload.middleware.BrowserReloadMiddleware", ] -ROOT_URLCONF = 'mysite.urls' +ROOT_URLCONF = "mysite.urls" TEMPLATES = [ { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", ], }, }, ] -WSGI_APPLICATION = 'mysite.wsgi.application' +WSGI_APPLICATION = "mysite.wsgi.application" # Database @@ -141,16 +144,16 @@ AUTH_PASSWORD_VALIDATORS = [ { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] @@ -158,9 +161,9 @@ # Internationalization # https://docs.djangoproject.com/en/6.0/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = "en-us" -TIME_ZONE = 'UTC' +TIME_ZONE = "UTC" USE_I18N = True USE_L10N = True @@ -171,8 +174,8 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/6.0/howto/static-files/ -STATIC_URL = 'static/' -STATIC_ROOT = BASE_DIR / 'static' +STATIC_URL = "static/" +STATIC_ROOT = BASE_DIR / "static" CSRF_COOKIE_HTTPONLY = False NPM_BIN_PATH = os.environ.get("NPM_BIN_PATH", "npm") @@ -182,23 +185,23 @@ # Logging LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, # Keeps Gunicorn's loggers active - 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', + "version": 1, + "disable_existing_loggers": False, # Keeps Gunicorn's loggers active + "handlers": { + "console": { + "class": "logging.StreamHandler", }, }, - 'root': { - 'handlers': ['console'], - 'level': 'INFO', + "root": { + "handlers": ["console"], + "level": "INFO", }, } # Ari (Review) # https://ari.hackclub.com/docs/webhooks -ARI_INGEST_ENDPOINT = os.environ.get('ARI_INGEST_ENDPOINT') -ARI_SIGNING_SECRET = os.environ.get('ARI_SIGNING_SECRET') +ARI_INGEST_ENDPOINT = os.environ.get("ARI_INGEST_ENDPOINT") +ARI_SIGNING_SECRET = os.environ.get("ARI_SIGNING_SECRET") # Separate from ARI_SIGNING_SECRET: signs deliveries Ari sends to us (Settings -> Webhooks), # not requests we send to Ari. -ARI_WEBHOOK_SECRET = os.environ.get('ARI_WEBHOOK_SECRET') \ No newline at end of file +ARI_WEBHOOK_SECRET = os.environ.get("ARI_WEBHOOK_SECRET") diff --git a/twisted/mysite/wsgi.py b/twisted/mysite/wsgi.py index ba5b07b..96cd3c5 100644 --- a/twisted/mysite/wsgi.py +++ b/twisted/mysite/wsgi.py @@ -11,6 +11,6 @@ from django.core.wsgi import get_wsgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") application = get_wsgi_application() diff --git a/twisted/tailwindcsstheme/apps.py b/twisted/tailwindcsstheme/apps.py index 7e9716d..bb2220b 100644 --- a/twisted/tailwindcsstheme/apps.py +++ b/twisted/tailwindcsstheme/apps.py @@ -2,4 +2,4 @@ class TailwindcssthemeConfig(AppConfig): - name = 'tailwindcsstheme' + name = "tailwindcsstheme" From 5303b1edfe60d9c86a909416f6c3c59101a815d1 Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:18:02 -0400 Subject: [PATCH 04/16] Add ruff-check workflow for formatting checks --- .github/workflows/ruff-check.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/ruff-check.yaml diff --git a/.github/workflows/ruff-check.yaml b/.github/workflows/ruff-check.yaml new file mode 100644 index 0000000..ecc1d2c --- /dev/null +++ b/.github/workflows/ruff-check.yaml @@ -0,0 +1,18 @@ +name: ruff-check +on: push +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ruff + # Update output format to enable automatic inline annotations. + - name: Run Ruff + run: ruff check --output-format=github From bd39e6b4410aad3fcc30bf2e114c775319c43ee7 Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:20:14 -0400 Subject: [PATCH 05/16] Format & order file imports tried not to break anything --- twisted/common/views.py | 7 ++++--- twisted/mysite/middleware.py | 1 + twisted/mysite/settings.py | 3 ++- twisted/mysite/urls.py | 2 +- twisted/twisted_site/ari.py | 1 - twisted/twisted_site/hackatime.py | 3 ++- twisted/twisted_site/models.py | 3 ++- .../twisted_site/templatetags/time_filters.py | 3 ++- twisted/twisted_site/urls.py | 10 +++++----- twisted/twisted_site/views/admin/__init__.py | 10 +++++----- twisted/twisted_site/views/admin/admin.py | 8 +++++--- .../twisted_site/views/admin/announcements.py | 3 ++- twisted/twisted_site/views/admin/audit_logs.py | 7 ++++--- twisted/twisted_site/views/admin/dashboard.py | 8 +++++--- .../twisted_site/views/admin/fulfillment.py | 3 ++- twisted/twisted_site/views/admin/pathways.py | 9 +++++---- twisted/twisted_site/views/admin/review.py | 7 ++++--- twisted/twisted_site/views/admin/shop.py | 3 ++- twisted/twisted_site/views/admin/users.py | 14 ++++++++------ twisted/twisted_site/views/ari.py | 6 ++++-- twisted/twisted_site/views/client/__init__.py | 10 +++++----- twisted/twisted_site/views/client/auth.py | 13 +++++++------ twisted/twisted_site/views/client/dashboard.py | 3 ++- twisted/twisted_site/views/client/discover.py | 5 +++-- twisted/twisted_site/views/client/homepage.py | 5 +++-- twisted/twisted_site/views/client/journal.py | 12 +++++++----- twisted/twisted_site/views/client/pathways.py | 5 +++-- twisted/twisted_site/views/client/project.py | 15 ++++++++------- twisted/twisted_site/views/client/projects.py | 7 ++++--- twisted/twisted_site/views/client/referrals.py | 10 ++++++---- twisted/twisted_site/views/image_upload.py | 18 ++++++++++-------- 31 files changed, 123 insertions(+), 91 deletions(-) diff --git a/twisted/common/views.py b/twisted/common/views.py index f15120b..9f0deb0 100644 --- a/twisted/common/views.py +++ b/twisted/common/views.py @@ -1,7 +1,8 @@ +import json import os -from django.shortcuts import render + +import requests from django.contrib.auth.decorators import login_required from django.http import HttpResponse +from django.shortcuts import render from django.utils.translation import gettext_lazy as _ -import requests -import json diff --git a/twisted/mysite/middleware.py b/twisted/mysite/middleware.py index 325db2b..d424a1f 100644 --- a/twisted/mysite/middleware.py +++ b/twisted/mysite/middleware.py @@ -1,4 +1,5 @@ import zoneinfo + from django.utils import timezone diff --git a/twisted/mysite/settings.py b/twisted/mysite/settings.py index 7a43ceb..7b0c5b9 100644 --- a/twisted/mysite/settings.py +++ b/twisted/mysite/settings.py @@ -10,10 +10,11 @@ https://docs.djangoproject.com/en/6.0/ref/settings/ """ -from dotenv import load_dotenv import os from pathlib import Path +from dotenv import load_dotenv + if not os.environ.get("ALLOWED_HOSTS"): load_dotenv() diff --git a/twisted/mysite/urls.py b/twisted/mysite/urls.py index c5b2bf4..797f10b 100644 --- a/twisted/mysite/urls.py +++ b/twisted/mysite/urls.py @@ -15,9 +15,9 @@ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ -from django.urls import include, path from django.conf import settings from django.conf.urls.static import static +from django.urls import include, path urlpatterns = [ path("", include("twisted_site.urls")), diff --git a/twisted/twisted_site/ari.py b/twisted/twisted_site/ari.py index 1a163e6..7f7abf6 100644 --- a/twisted/twisted_site/ari.py +++ b/twisted/twisted_site/ari.py @@ -10,7 +10,6 @@ from .models import Journal, Project, ProjectShip - ARI_INGEST_ENDPOINT = settings.ARI_INGEST_ENDPOINT ARI_SIGNING_SECRET = settings.ARI_SIGNING_SECRET ARI_WEBHOOK_SECRET = settings.ARI_WEBHOOK_SECRET diff --git a/twisted/twisted_site/hackatime.py b/twisted/twisted_site/hackatime.py index 91f49a6..01eb8f3 100644 --- a/twisted/twisted_site/hackatime.py +++ b/twisted/twisted_site/hackatime.py @@ -1,6 +1,7 @@ +from dataclasses import dataclass from datetime import datetime + import requests -from dataclasses import dataclass HACKATIME_ROOT_URL = "https://hackatime.hackclub.com" diff --git a/twisted/twisted_site/models.py b/twisted/twisted_site/models.py index df207bb..73cbbcf 100644 --- a/twisted/twisted_site/models.py +++ b/twisted/twisted_site/models.py @@ -1,8 +1,9 @@ -from django.db.models import TextField from django.contrib.auth import get_user_model from django.core.validators import MinValueValidator from django.db import models +from django.db.models import TextField from django.utils import timezone + from . import hackatime from .slack import slack_bot diff --git a/twisted/twisted_site/templatetags/time_filters.py b/twisted/twisted_site/templatetags/time_filters.py index 763e7dc..cd5c846 100644 --- a/twisted/twisted_site/templatetags/time_filters.py +++ b/twisted/twisted_site/templatetags/time_filters.py @@ -1,6 +1,7 @@ -from django import template from datetime import timedelta +from django import template + register = template.Library() diff --git a/twisted/twisted_site/urls.py b/twisted/twisted_site/urls.py index 60fcd2e..0bb238a 100644 --- a/twisted/twisted_site/urls.py +++ b/twisted/twisted_site/urls.py @@ -1,14 +1,14 @@ +from django.urls import path + +from .views import admin, client +from .views.ari import AriView from .views.client.auth import ( - LoginView, AuthCallbackView, HackatimeCallbackView, + LoginView, LogoutView, ) -from django.urls import path -from .views import client -from .views import admin from .views.image_upload import upload_file -from .views.ari import AriView urlpatterns = [ path("", view=client.HomepageView.as_view(), name="homepage"), diff --git a/twisted/twisted_site/views/admin/__init__.py b/twisted/twisted_site/views/admin/__init__.py index d2ffe18..74b154e 100644 --- a/twisted/twisted_site/views/admin/__init__.py +++ b/twisted/twisted_site/views/admin/__init__.py @@ -1,8 +1,8 @@ +from .announcements import AnnouncementsView +from .audit_logs import AuditLogsView from .dashboard import DashboardView -from .users import UsersView, UserDetailView -from .pathways import PathwayListView, PathwayDetailView, PathwayCreateView from .fulfillment import FulfillmentView -from .shop import ShopView +from .pathways import PathwayCreateView, PathwayDetailView, PathwayListView from .review import ReviewView -from .announcements import AnnouncementsView -from .audit_logs import AuditLogsView +from .shop import ShopView +from .users import UserDetailView, UsersView diff --git a/twisted/twisted_site/views/admin/admin.py b/twisted/twisted_site/views/admin/admin.py index b3a6bb4..96ca7ee 100644 --- a/twisted/twisted_site/views/admin/admin.py +++ b/twisted/twisted_site/views/admin/admin.py @@ -1,9 +1,11 @@ -from django.views import View -from django.shortcuts import render, redirect, resolve_url -from dataclasses import dataclass import json +from dataclasses import dataclass from typing import Literal + +from django.shortcuts import redirect, render, resolve_url +from django.views import View from django_htmx.http import trigger_client_event + from ...models import AuditLog diff --git a/twisted/twisted_site/views/admin/announcements.py b/twisted/twisted_site/views/admin/announcements.py index 7b9dfbe..4678372 100644 --- a/twisted/twisted_site/views/admin/announcements.py +++ b/twisted/twisted_site/views/admin/announcements.py @@ -1,6 +1,7 @@ +from django.shortcuts import redirect, render from django.template.response import TemplateResponse + from .admin import AdminView -from django.shortcuts import render, redirect # Create your views here. diff --git a/twisted/twisted_site/views/admin/audit_logs.py b/twisted/twisted_site/views/admin/audit_logs.py index ad6ef4f..551d4b5 100644 --- a/twisted/twisted_site/views/admin/audit_logs.py +++ b/twisted/twisted_site/views/admin/audit_logs.py @@ -1,9 +1,10 @@ +from django.core.paginator import Paginator from django.db.models.query_utils import Q +from django.shortcuts import redirect, render from django.template.response import TemplateResponse -from .admin import AdminView -from django.shortcuts import render, redirect + from ...models import AuditLog -from django.core.paginator import Paginator +from .admin import AdminView # Create your views here. diff --git a/twisted/twisted_site/views/admin/dashboard.py b/twisted/twisted_site/views/admin/dashboard.py index 5ab4f97..78335f6 100644 --- a/twisted/twisted_site/views/admin/dashboard.py +++ b/twisted/twisted_site/views/admin/dashboard.py @@ -1,8 +1,10 @@ +import json + +from django.shortcuts import redirect, render from django.template.response import TemplateResponse -from .admin import AdminView -from django.shortcuts import render, redirect + from ...models import Journal, Project, ProjectShip -import json +from .admin import AdminView # Create your views here. diff --git a/twisted/twisted_site/views/admin/fulfillment.py b/twisted/twisted_site/views/admin/fulfillment.py index a12b79c..a9c4bbe 100644 --- a/twisted/twisted_site/views/admin/fulfillment.py +++ b/twisted/twisted_site/views/admin/fulfillment.py @@ -1,5 +1,6 @@ +from django.shortcuts import redirect, render + from .admin import AdminView -from django.shortcuts import render, redirect # Create your views here. diff --git a/twisted/twisted_site/views/admin/pathways.py b/twisted/twisted_site/views/admin/pathways.py index 8c5bda3..3480be4 100644 --- a/twisted/twisted_site/views/admin/pathways.py +++ b/twisted/twisted_site/views/admin/pathways.py @@ -1,9 +1,10 @@ +from django.contrib import messages from django.http import HttpResponse -from .admin import AdminView -from django.shortcuts import render, redirect, get_object_or_404 -from ...models import Pathway, User +from django.shortcuts import get_object_or_404, redirect, render from django.utils import timezone -from django.contrib import messages + +from ...models import Pathway, User +from .admin import AdminView # Create your views here. diff --git a/twisted/twisted_site/views/admin/review.py b/twisted/twisted_site/views/admin/review.py index 2b2d1c9..a367749 100644 --- a/twisted/twisted_site/views/admin/review.py +++ b/twisted/twisted_site/views/admin/review.py @@ -1,9 +1,10 @@ +from django.conf import settings from django.contrib import messages from django.http import HttpResponse -from .admin import AdminView -from django.shortcuts import render, redirect, get_object_or_404 -from django.conf import settings +from django.shortcuts import get_object_or_404, redirect, render + from ...models import ProjectShip +from .admin import AdminView # Create your views here. diff --git a/twisted/twisted_site/views/admin/shop.py b/twisted/twisted_site/views/admin/shop.py index 782bb85..3de27f1 100644 --- a/twisted/twisted_site/views/admin/shop.py +++ b/twisted/twisted_site/views/admin/shop.py @@ -1,5 +1,6 @@ +from django.shortcuts import redirect, render + from .admin import AdminView -from django.shortcuts import render, redirect # Create your views here. diff --git a/twisted/twisted_site/views/admin/users.py b/twisted/twisted_site/views/admin/users.py index 6358cd7..efae049 100644 --- a/twisted/twisted_site/views/admin/users.py +++ b/twisted/twisted_site/views/admin/users.py @@ -1,12 +1,14 @@ +import json +import os + from django.contrib.sessions.models import Session -from django.template.response import TemplateResponse +from django.db.models import Q from django.http import HttpResponse +from django.shortcuts import get_object_or_404, redirect, render +from django.template.response import TemplateResponse + +from ...models import Profile, User from .admin import AdminView -from django.shortcuts import render, redirect, get_object_or_404 -from ...models import User, Profile -from django.db.models import Q -import os -import json # Create your views here. diff --git a/twisted/twisted_site/views/ari.py b/twisted/twisted_site/views/ari.py index 61c92ff..b9a96f1 100644 --- a/twisted/twisted_site/views/ari.py +++ b/twisted/twisted_site/views/ari.py @@ -1,11 +1,13 @@ import json -from django.http import HttpResponseNotAllowed, HttpResponse, HttpResponseBadRequest + +from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed from django.shortcuts import render from django.utils.decorators import method_decorator from django.views import View from django.views.decorators.csrf import csrf_exempt + from ..ari import verify_webhook_signature -from ..models import ProjectShip, Project +from ..models import Project, ProjectShip from ..slack import slack_bot diff --git a/twisted/twisted_site/views/client/__init__.py b/twisted/twisted_site/views/client/__init__.py index 2b54b67..4d05309 100644 --- a/twisted/twisted_site/views/client/__init__.py +++ b/twisted/twisted_site/views/client/__init__.py @@ -1,12 +1,12 @@ -from .homepage import HomepageView, FaqsView from .dashboard import DashboardView -from .projects import ListProjects, CreateProject -from .project import ProjectDetail, ProjectSettings, SubmitProject +from .discover import DiscoverView +from .homepage import FaqsView, HomepageView from .journal import ( + DeleteJournal, NewProjectHackatimeJournal, NewProjectUntrackedJournal, - DeleteJournal, ) from .pathways import PathwaysView +from .project import ProjectDetail, ProjectSettings, SubmitProject +from .projects import CreateProject, ListProjects from .referrals import ReferralsView -from .discover import DiscoverView diff --git a/twisted/twisted_site/views/client/auth.py b/twisted/twisted_site/views/client/auth.py index 0adfd84..7cd8cce 100644 --- a/twisted/twisted_site/views/client/auth.py +++ b/twisted/twisted_site/views/client/auth.py @@ -1,15 +1,16 @@ +import hmac +import os +import secrets + import requests -from django.http import JsonResponse +from authlib.integrations.django_client import OAuth from django.contrib.auth import get_user_model, login, logout +from django.http import JsonResponse from django.shortcuts import redirect -import os -from authlib.integrations.django_client import OAuth from django.views import View -import secrets -import hmac -from ...models import Profile from ... import hackatime +from ...models import Profile from ...slack import slack_bot oauth = OAuth() diff --git a/twisted/twisted_site/views/client/dashboard.py b/twisted/twisted_site/views/client/dashboard.py index 86f987e..6823095 100644 --- a/twisted/twisted_site/views/client/dashboard.py +++ b/twisted/twisted_site/views/client/dashboard.py @@ -1,5 +1,6 @@ +from django.shortcuts import get_object_or_404, redirect, render, resolve_url from django.views import View -from django.shortcuts import render, redirect, resolve_url, get_object_or_404 + from ...models import Project diff --git a/twisted/twisted_site/views/client/discover.py b/twisted/twisted_site/views/client/discover.py index 442a8e9..76e0649 100644 --- a/twisted/twisted_site/views/client/discover.py +++ b/twisted/twisted_site/views/client/discover.py @@ -1,6 +1,7 @@ -from django.views import View -from django.shortcuts import render, redirect from django.core.paginator import Paginator +from django.shortcuts import redirect, render +from django.views import View + from ...models import Project PROJECTS_PER_PAGE = 120 diff --git a/twisted/twisted_site/views/client/homepage.py b/twisted/twisted_site/views/client/homepage.py index a4dc838..f748503 100644 --- a/twisted/twisted_site/views/client/homepage.py +++ b/twisted/twisted_site/views/client/homepage.py @@ -1,7 +1,8 @@ -from django.views import View -from django.shortcuts import render import os +from django.shortcuts import render +from django.views import View + # Create your views here. class HomepageView(View): diff --git a/twisted/twisted_site/views/client/journal.py b/twisted/twisted_site/views/client/journal.py index 59bcb67..640bfde 100644 --- a/twisted/twisted_site/views/client/journal.py +++ b/twisted/twisted_site/views/client/journal.py @@ -1,11 +1,13 @@ -from markdown_it.rules_inline import image +import math +import re + from django.http import JsonResponse +from django.shortcuts import get_object_or_404, redirect, render from django.views import View -from django.shortcuts import render, redirect, get_object_or_404 -from ...models import Profile, Project, Journal +from markdown_it.rules_inline import image + from ... import hackatime -import re -import math +from ...models import Journal, Profile, Project HACKATIME_MAX_LOGGABLE_MINUTES = 6 * 60 IMAGE_REGEX = r"!\[([^\]]*)\]\([^)]+\)" diff --git a/twisted/twisted_site/views/client/pathways.py b/twisted/twisted_site/views/client/pathways.py index 0223962..7e82b57 100644 --- a/twisted/twisted_site/views/client/pathways.py +++ b/twisted/twisted_site/views/client/pathways.py @@ -1,7 +1,8 @@ +from django.http import HttpResponse, JsonResponse +from django.shortcuts import redirect, render from django.utils import timezone -from django.http import JsonResponse, HttpResponse from django.views import View -from django.shortcuts import render, redirect + from ...models import Pathway diff --git a/twisted/twisted_site/views/client/project.py b/twisted/twisted_site/views/client/project.py index e9c245d..daaee13 100644 --- a/twisted/twisted_site/views/client/project.py +++ b/twisted/twisted_site/views/client/project.py @@ -1,12 +1,13 @@ -from requests import HTTPError, RequestException from itertools import chain -from markdown_it.rules_inline import image -from django.http import JsonResponse, HttpResponse + +from django.http import HttpResponse, JsonResponse +from django.shortcuts import get_object_or_404, redirect, render from django.views import View -from django.shortcuts import render, redirect, get_object_or_404 -from ...models import Profile, Project, Journal, ProjectShip, PROJECT_TYPE_CHOICES -from ... import hackatime -from ... import ari +from markdown_it.rules_inline import image +from requests import HTTPError, RequestException + +from ... import ari, hackatime +from ...models import PROJECT_TYPE_CHOICES, Journal, Profile, Project, ProjectShip # Create your views here. diff --git a/twisted/twisted_site/views/client/projects.py b/twisted/twisted_site/views/client/projects.py index 897504b..8d0d287 100644 --- a/twisted/twisted_site/views/client/projects.py +++ b/twisted/twisted_site/views/client/projects.py @@ -1,7 +1,8 @@ -from django.http import JsonResponse, HttpResponse +from django.http import HttpResponse, JsonResponse +from django.shortcuts import redirect, render from django.views import View -from django.shortcuts import render, redirect -from ...models import Project, PROJECT_TYPE_CHOICES + +from ...models import PROJECT_TYPE_CHOICES, Project # Create your views here. diff --git a/twisted/twisted_site/views/client/referrals.py b/twisted/twisted_site/views/client/referrals.py index a8b1ea3..75dffb4 100644 --- a/twisted/twisted_site/views/client/referrals.py +++ b/twisted/twisted_site/views/client/referrals.py @@ -1,10 +1,12 @@ +import random +import string + +from django.http import HttpResponse, JsonResponse +from django.shortcuts import redirect, render from django.utils import timezone -from django.http import JsonResponse, HttpResponse from django.views import View -from django.shortcuts import render, redirect + from ...models import Profile -import random -import string # Create your views here. diff --git a/twisted/twisted_site/views/image_upload.py b/twisted/twisted_site/views/image_upload.py index ed25b25..705fd1b 100644 --- a/twisted/twisted_site/views/image_upload.py +++ b/twisted/twisted_site/views/image_upload.py @@ -1,16 +1,18 @@ import json import os +from pathlib import Path +from uuid import uuid4 + +import boto3 import requests -from django.http import JsonResponse, HttpResponse -from django.views import View -from django.shortcuts import render, redirect -from ..models import Project, UploadedFile +from botocore.exceptions import BotoCoreError, ClientError from django.contrib.auth.decorators import login_required +from django.http import HttpResponse, JsonResponse +from django.shortcuts import redirect, render from django.utils.text import slugify -import boto3 -from pathlib import Path -from uuid import uuid4 -from botocore.exceptions import ClientError, BotoCoreError +from django.views import View + +from ..models import Project, UploadedFile ALLOWED_CONTENT_TYPES = {"image/png", "image/jpeg", "image/webp", "image/gif"} From 44f1508b22b63f6781914b4acaf1aee26035a19f Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:38:27 -0400 Subject: [PATCH 06/16] Remove unused imports --- twisted/common/admin.py | 1 - twisted/common/models.py | 1 - twisted/common/tests.py | 1 - twisted/common/views.py | 7 ------- twisted/twisted_site/admin.py | 1 - twisted/twisted_site/models.py | 1 - twisted/twisted_site/tests.py | 1 - twisted/twisted_site/views/admin/admin.py | 5 +---- twisted/twisted_site/views/admin/announcements.py | 2 +- twisted/twisted_site/views/admin/audit_logs.py | 2 +- twisted/twisted_site/views/admin/dashboard.py | 4 ++-- twisted/twisted_site/views/admin/fulfillment.py | 2 +- twisted/twisted_site/views/admin/pathways.py | 1 - twisted/twisted_site/views/admin/review.py | 1 - twisted/twisted_site/views/admin/shop.py | 2 +- twisted/twisted_site/views/admin/users.py | 5 ++--- twisted/twisted_site/views/ari.py | 3 +-- twisted/twisted_site/views/client/journal.py | 5 +---- twisted/twisted_site/views/client/pathways.py | 2 -- twisted/twisted_site/views/client/project.py | 5 ++--- twisted/twisted_site/views/client/projects.py | 2 +- twisted/twisted_site/views/client/referrals.py | 2 -- twisted/twisted_site/views/image_upload.py | 8 ++------ 23 files changed, 16 insertions(+), 48 deletions(-) diff --git a/twisted/common/admin.py b/twisted/common/admin.py index 8c38f3f..b97a94f 100644 --- a/twisted/common/admin.py +++ b/twisted/common/admin.py @@ -1,3 +1,2 @@ -from django.contrib import admin # Register your models here. diff --git a/twisted/common/models.py b/twisted/common/models.py index 71a8362..35e0d64 100644 --- a/twisted/common/models.py +++ b/twisted/common/models.py @@ -1,3 +1,2 @@ -from django.db import models # Create your models here. diff --git a/twisted/common/tests.py b/twisted/common/tests.py index 7ce503c..4929020 100644 --- a/twisted/common/tests.py +++ b/twisted/common/tests.py @@ -1,3 +1,2 @@ -from django.test import TestCase # Create your tests here. diff --git a/twisted/common/views.py b/twisted/common/views.py index 9f0deb0..8b13789 100644 --- a/twisted/common/views.py +++ b/twisted/common/views.py @@ -1,8 +1 @@ -import json -import os -import requests -from django.contrib.auth.decorators import login_required -from django.http import HttpResponse -from django.shortcuts import render -from django.utils.translation import gettext_lazy as _ diff --git a/twisted/twisted_site/admin.py b/twisted/twisted_site/admin.py index 8c38f3f..b97a94f 100644 --- a/twisted/twisted_site/admin.py +++ b/twisted/twisted_site/admin.py @@ -1,3 +1,2 @@ -from django.contrib import admin # Register your models here. diff --git a/twisted/twisted_site/models.py b/twisted/twisted_site/models.py index 73cbbcf..fca2b52 100644 --- a/twisted/twisted_site/models.py +++ b/twisted/twisted_site/models.py @@ -5,7 +5,6 @@ from django.utils import timezone from . import hackatime -from .slack import slack_bot User = get_user_model() diff --git a/twisted/twisted_site/tests.py b/twisted/twisted_site/tests.py index 7ce503c..4929020 100644 --- a/twisted/twisted_site/tests.py +++ b/twisted/twisted_site/tests.py @@ -1,3 +1,2 @@ -from django.test import TestCase # Create your tests here. diff --git a/twisted/twisted_site/views/admin/admin.py b/twisted/twisted_site/views/admin/admin.py index 96ca7ee..9616a34 100644 --- a/twisted/twisted_site/views/admin/admin.py +++ b/twisted/twisted_site/views/admin/admin.py @@ -1,10 +1,7 @@ -import json from dataclasses import dataclass -from typing import Literal -from django.shortcuts import redirect, render, resolve_url +from django.shortcuts import redirect, resolve_url from django.views import View -from django_htmx.http import trigger_client_event from ...models import AuditLog diff --git a/twisted/twisted_site/views/admin/announcements.py b/twisted/twisted_site/views/admin/announcements.py index 4678372..8d928cf 100644 --- a/twisted/twisted_site/views/admin/announcements.py +++ b/twisted/twisted_site/views/admin/announcements.py @@ -1,4 +1,4 @@ -from django.shortcuts import redirect, render +from django.shortcuts import redirect from django.template.response import TemplateResponse from .admin import AdminView diff --git a/twisted/twisted_site/views/admin/audit_logs.py b/twisted/twisted_site/views/admin/audit_logs.py index 551d4b5..3abdaa7 100644 --- a/twisted/twisted_site/views/admin/audit_logs.py +++ b/twisted/twisted_site/views/admin/audit_logs.py @@ -1,6 +1,6 @@ from django.core.paginator import Paginator from django.db.models.query_utils import Q -from django.shortcuts import redirect, render +from django.shortcuts import redirect from django.template.response import TemplateResponse from ...models import AuditLog diff --git a/twisted/twisted_site/views/admin/dashboard.py b/twisted/twisted_site/views/admin/dashboard.py index 78335f6..de3d177 100644 --- a/twisted/twisted_site/views/admin/dashboard.py +++ b/twisted/twisted_site/views/admin/dashboard.py @@ -1,9 +1,9 @@ import json -from django.shortcuts import redirect, render +from django.shortcuts import redirect from django.template.response import TemplateResponse -from ...models import Journal, Project, ProjectShip +from ...models import Journal from .admin import AdminView diff --git a/twisted/twisted_site/views/admin/fulfillment.py b/twisted/twisted_site/views/admin/fulfillment.py index a9c4bbe..9d1bf37 100644 --- a/twisted/twisted_site/views/admin/fulfillment.py +++ b/twisted/twisted_site/views/admin/fulfillment.py @@ -1,4 +1,4 @@ -from django.shortcuts import redirect, render +from django.shortcuts import render from .admin import AdminView diff --git a/twisted/twisted_site/views/admin/pathways.py b/twisted/twisted_site/views/admin/pathways.py index 3480be4..4948dca 100644 --- a/twisted/twisted_site/views/admin/pathways.py +++ b/twisted/twisted_site/views/admin/pathways.py @@ -1,5 +1,4 @@ from django.contrib import messages -from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.utils import timezone diff --git a/twisted/twisted_site/views/admin/review.py b/twisted/twisted_site/views/admin/review.py index a367749..0a33029 100644 --- a/twisted/twisted_site/views/admin/review.py +++ b/twisted/twisted_site/views/admin/review.py @@ -1,6 +1,5 @@ from django.conf import settings from django.contrib import messages -from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from ...models import ProjectShip diff --git a/twisted/twisted_site/views/admin/shop.py b/twisted/twisted_site/views/admin/shop.py index 3de27f1..2fb3397 100644 --- a/twisted/twisted_site/views/admin/shop.py +++ b/twisted/twisted_site/views/admin/shop.py @@ -1,4 +1,4 @@ -from django.shortcuts import redirect, render +from django.shortcuts import render from .admin import AdminView diff --git a/twisted/twisted_site/views/admin/users.py b/twisted/twisted_site/views/admin/users.py index efae049..d123791 100644 --- a/twisted/twisted_site/views/admin/users.py +++ b/twisted/twisted_site/views/admin/users.py @@ -3,11 +3,10 @@ from django.contrib.sessions.models import Session from django.db.models import Q -from django.http import HttpResponse -from django.shortcuts import get_object_or_404, redirect, render +from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse -from ...models import Profile, User +from ...models import User from .admin import AdminView diff --git a/twisted/twisted_site/views/ari.py b/twisted/twisted_site/views/ari.py index b9a96f1..285dc93 100644 --- a/twisted/twisted_site/views/ari.py +++ b/twisted/twisted_site/views/ari.py @@ -1,7 +1,6 @@ import json -from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed -from django.shortcuts import render +from django.http import HttpResponse, HttpResponseBadRequest from django.utils.decorators import method_decorator from django.views import View from django.views.decorators.csrf import csrf_exempt diff --git a/twisted/twisted_site/views/client/journal.py b/twisted/twisted_site/views/client/journal.py index 640bfde..4f9dc96 100644 --- a/twisted/twisted_site/views/client/journal.py +++ b/twisted/twisted_site/views/client/journal.py @@ -1,13 +1,10 @@ import math import re -from django.http import JsonResponse from django.shortcuts import get_object_or_404, redirect, render from django.views import View -from markdown_it.rules_inline import image -from ... import hackatime -from ...models import Journal, Profile, Project +from ...models import Journal, Project HACKATIME_MAX_LOGGABLE_MINUTES = 6 * 60 IMAGE_REGEX = r"!\[([^\]]*)\]\([^)]+\)" diff --git a/twisted/twisted_site/views/client/pathways.py b/twisted/twisted_site/views/client/pathways.py index 7e82b57..3d1ddb9 100644 --- a/twisted/twisted_site/views/client/pathways.py +++ b/twisted/twisted_site/views/client/pathways.py @@ -1,6 +1,4 @@ -from django.http import HttpResponse, JsonResponse from django.shortcuts import redirect, render -from django.utils import timezone from django.views import View from ...models import Pathway diff --git a/twisted/twisted_site/views/client/project.py b/twisted/twisted_site/views/client/project.py index daaee13..2b81e15 100644 --- a/twisted/twisted_site/views/client/project.py +++ b/twisted/twisted_site/views/client/project.py @@ -1,13 +1,12 @@ from itertools import chain -from django.http import HttpResponse, JsonResponse +from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.views import View -from markdown_it.rules_inline import image from requests import HTTPError, RequestException from ... import ari, hackatime -from ...models import PROJECT_TYPE_CHOICES, Journal, Profile, Project, ProjectShip +from ...models import PROJECT_TYPE_CHOICES, Profile, Project, ProjectShip # Create your views here. diff --git a/twisted/twisted_site/views/client/projects.py b/twisted/twisted_site/views/client/projects.py index 8d0d287..e9ae01f 100644 --- a/twisted/twisted_site/views/client/projects.py +++ b/twisted/twisted_site/views/client/projects.py @@ -1,4 +1,4 @@ -from django.http import HttpResponse, JsonResponse +from django.http import HttpResponse from django.shortcuts import redirect, render from django.views import View diff --git a/twisted/twisted_site/views/client/referrals.py b/twisted/twisted_site/views/client/referrals.py index 75dffb4..09a2771 100644 --- a/twisted/twisted_site/views/client/referrals.py +++ b/twisted/twisted_site/views/client/referrals.py @@ -1,9 +1,7 @@ import random import string -from django.http import HttpResponse, JsonResponse from django.shortcuts import redirect, render -from django.utils import timezone from django.views import View from ...models import Profile diff --git a/twisted/twisted_site/views/image_upload.py b/twisted/twisted_site/views/image_upload.py index 705fd1b..48c8c1d 100644 --- a/twisted/twisted_site/views/image_upload.py +++ b/twisted/twisted_site/views/image_upload.py @@ -1,18 +1,14 @@ -import json import os from pathlib import Path from uuid import uuid4 import boto3 -import requests from botocore.exceptions import BotoCoreError, ClientError from django.contrib.auth.decorators import login_required -from django.http import HttpResponse, JsonResponse -from django.shortcuts import redirect, render +from django.http import JsonResponse from django.utils.text import slugify -from django.views import View -from ..models import Project, UploadedFile +from ..models import UploadedFile ALLOWED_CONTENT_TYPES = {"image/png", "image/jpeg", "image/webp", "image/gif"} From 5e17771626f720151e63ee192ad97bcf42b04102 Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:44:39 -0400 Subject: [PATCH 07/16] Remove mutable argument defaults unsafe fixes --- twisted/twisted_site/hackatime.py | 5 ++++- twisted/twisted_site/views/admin/pathways.py | 5 ++++- twisted/twisted_site/views/client/journal.py | 15 ++++++++++++--- twisted/twisted_site/views/client/project.py | 10 ++++++++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/twisted/twisted_site/hackatime.py b/twisted/twisted_site/hackatime.py index 01eb8f3..3694685 100644 --- a/twisted/twisted_site/hackatime.py +++ b/twisted/twisted_site/hackatime.py @@ -24,7 +24,10 @@ class HackatimeProject: languages: list[str] -def authhelper(access_token, headers={}): +def authhelper(access_token, headers=None): + if headers is None: + headers = {} + return {"Authorization": f"Bearer {access_token}", **headers} diff --git a/twisted/twisted_site/views/admin/pathways.py b/twisted/twisted_site/views/admin/pathways.py index 4948dca..5df538c 100644 --- a/twisted/twisted_site/views/admin/pathways.py +++ b/twisted/twisted_site/views/admin/pathways.py @@ -35,7 +35,10 @@ def get(self, request): class PathwayCreateView(AdminView): - def get(self, request, error=None, extracontext={}): + def get(self, request, error=None, extracontext=None): + if extracontext is None: + extracontext = {} + context = self.get_context_data(page="pathways", subpage="create") context.update(extracontext) diff --git a/twisted/twisted_site/views/client/journal.py b/twisted/twisted_site/views/client/journal.py index 4f9dc96..d029549 100644 --- a/twisted/twisted_site/views/client/journal.py +++ b/twisted/twisted_site/views/client/journal.py @@ -11,7 +11,10 @@ class NewProjectHackatimeJournal(View): - def get(self, request, id, info=None, context={}): + def get(self, request, id, info=None, context=None): + if context is None: + context = {} + context["info"] = info if self.request.user.is_anonymous: return redirect("homepage") @@ -87,7 +90,10 @@ def post(self, request, id): class NewProjectUntrackedJournal(View): - def get(self, request, id, info=None, context={}): + def get(self, request, id, info=None, context=None): + if context is None: + context = {} + context["info"] = info if self.request.user.is_anonymous: return redirect("homepage") @@ -169,7 +175,10 @@ def post(self, request, id): class DeleteJournal(View): - def get(self, request, id, context={"success": False}): + def get(self, request, id, context=None): + if context is None: + context = {"success": False} + if request.user.is_anonymous: return redirect("homepage") diff --git a/twisted/twisted_site/views/client/project.py b/twisted/twisted_site/views/client/project.py index 2b81e15..0846975 100644 --- a/twisted/twisted_site/views/client/project.py +++ b/twisted/twisted_site/views/client/project.py @@ -112,7 +112,10 @@ def post(self, request, id): class SubmitProject(View): - def get(self, request, id, context={}): + def get(self, request, id, context=None): + if context is None: + context = {} + if self.request.user.is_anonymous: return redirect("homepage") @@ -134,7 +137,10 @@ def get(self, request, id, context={}): context["project"] = project return render(request, "client/projects/ship.html", context) - def post(self, request, id, context={}): + def post(self, request, id, context=None): + if context is None: + context = {} + if self.request.user.is_anonymous: return redirect("homepage") From e3f01a14ae8ac84a142654b82be402e72a2ae7eb Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:48:48 -0400 Subject: [PATCH 08/16] Resolve remaining automatic safe Ruff fixes --- twisted/mysite/middleware.py | 2 +- twisted/twisted_site/ari.py | 2 +- twisted/twisted_site/slack.py | 2 +- twisted/twisted_site/views/image_upload.py | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/twisted/mysite/middleware.py b/twisted/mysite/middleware.py index d424a1f..79eea71 100644 --- a/twisted/mysite/middleware.py +++ b/twisted/mysite/middleware.py @@ -15,7 +15,7 @@ def __call__(self, request): timezone.activate(zoneinfo.ZoneInfo(tzname)) else: timezone.deactivate() - except Exception as e: + except Exception: timezone.deactivate() return self.get_response(request) diff --git a/twisted/twisted_site/ari.py b/twisted/twisted_site/ari.py index 7f7abf6..ed4d1b3 100644 --- a/twisted/twisted_site/ari.py +++ b/twisted/twisted_site/ari.py @@ -34,7 +34,7 @@ def verify_webhook_signature( return False key_bytes = ARI_WEBHOOK_SECRET.encode("utf-8") - message_bytes = f"{timestamp}.{delivery_id}.".encode("utf-8") + body + message_bytes = f"{timestamp}.{delivery_id}.".encode() + body expected_signature = hmac.new(key_bytes, message_bytes, hashlib.sha256).hexdigest() return hmac.compare_digest(expected_signature, signature) diff --git a/twisted/twisted_site/slack.py b/twisted/twisted_site/slack.py index e6baeea..9532d35 100644 --- a/twisted/twisted_site/slack.py +++ b/twisted/twisted_site/slack.py @@ -151,7 +151,7 @@ def error_log( # Break up any backticks in the error text so it can't close the code # fence early and have the remainder render as live Slack mrkdwn. - safe_error = error.replace("`", "`​") + safe_error = error.replace("`", "`\u200b") thread_text = f"```{safe_error}```" if mention: diff --git a/twisted/twisted_site/views/image_upload.py b/twisted/twisted_site/views/image_upload.py index 48c8c1d..39b26a5 100644 --- a/twisted/twisted_site/views/image_upload.py +++ b/twisted/twisted_site/views/image_upload.py @@ -78,7 +78,7 @@ def upload_file(request): def _upload_fileobj(fileobj, filename, content_type, size): try: ext = Path(filename).suffix.lower() - stored_name = f"{str(uuid4())}-{size}/{slugify(Path(filename).stem)}{ext}" + stored_name = f"{uuid4()!s}-{size}/{slugify(Path(filename).stem)}{ext}" original_filename = Path(filename).stem s3.upload_fileobj( fileobj, @@ -102,7 +102,7 @@ def _upload_fileobj(fileobj, filename, content_type, size): except Exception as e: return { "status": "error", - "error": f"Unknown Error Occurred: {str(e)}", + "error": f"Unknown Error Occurred: {e!s}", } From 298f46d2d139f8623bb217477d44cee1dafeb4bf Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 12:49:09 -0400 Subject: [PATCH 09/16] Resolve remaining automatic unsafe Ruff fixes --- twisted/twisted_site/ari.py | 1 - twisted/twisted_site/views/admin/review.py | 2 +- twisted/twisted_site/views/client/project.py | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/twisted/twisted_site/ari.py b/twisted/twisted_site/ari.py index ed4d1b3..a07abd9 100644 --- a/twisted/twisted_site/ari.py +++ b/twisted/twisted_site/ari.py @@ -142,7 +142,6 @@ def send_ship(ship: ProjectShip): "meta": meta, }, ) - resp = r.content r.raise_for_status() diff --git a/twisted/twisted_site/views/admin/review.py b/twisted/twisted_site/views/admin/review.py index 0a33029..9caeb04 100644 --- a/twisted/twisted_site/views/admin/review.py +++ b/twisted/twisted_site/views/admin/review.py @@ -19,7 +19,7 @@ def post(self, request): if settings.DEBUG_REVIEW: return self.debug_post(request) - context = self.get_context_data(page="review") + self.get_context_data(page="review") return redirect(self.request.path_info) def debug_get(self, request): diff --git a/twisted/twisted_site/views/client/project.py b/twisted/twisted_site/views/client/project.py index 0846975..a3faf5d 100644 --- a/twisted/twisted_site/views/client/project.py +++ b/twisted/twisted_site/views/client/project.py @@ -166,7 +166,7 @@ def post(self, request, id, context=None): ship.save() try: ari.send_ship(ship) - except Exception as e: + except Exception: ship.delete() - raise e + raise return redirect("fr.projects.detail", project.id) From f6130fe104a41308307eedb02499f06c4d2bc45d Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 13:00:03 -0400 Subject: [PATCH 10/16] Configure re-exports for package init files --- twisted/twisted_site/views/admin/__init__.py | 14 ++++++++++++++ twisted/twisted_site/views/client/__init__.py | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/twisted/twisted_site/views/admin/__init__.py b/twisted/twisted_site/views/admin/__init__.py index 74b154e..8ef4e48 100644 --- a/twisted/twisted_site/views/admin/__init__.py +++ b/twisted/twisted_site/views/admin/__init__.py @@ -6,3 +6,17 @@ from .review import ReviewView from .shop import ShopView from .users import UserDetailView, UsersView + +__all__ = [ + "AnnouncementsView", + "AuditLogsView", + "DashboardView", + "FulfillmentView", + "PathwayCreateView", + "PathwayDetailView", + "PathwayListView", + "ReviewView", + "ShopView", + "UserDetailView", + "UsersView", +] diff --git a/twisted/twisted_site/views/client/__init__.py b/twisted/twisted_site/views/client/__init__.py index 4d05309..d066a43 100644 --- a/twisted/twisted_site/views/client/__init__.py +++ b/twisted/twisted_site/views/client/__init__.py @@ -10,3 +10,20 @@ from .project import ProjectDetail, ProjectSettings, SubmitProject from .projects import CreateProject, ListProjects from .referrals import ReferralsView + +__all__ = [ + "CreateProject", + "DashboardView", + "DeleteJournal", + "DiscoverView", + "FaqsView", + "HomepageView", + "ListProjects", + "NewProjectHackatimeJournal", + "NewProjectUntrackedJournal", + "PathwaysView", + "ProjectDetail", + "ProjectSettings", + "ReferralsView", + "SubmitProject", +] From bfdc650b8833a85680f0e3a8e6280ed987dd68fe Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 13:00:23 -0400 Subject: [PATCH 11/16] Collapse nested if statements --- twisted/twisted_site/views/client/auth.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/twisted/twisted_site/views/client/auth.py b/twisted/twisted_site/views/client/auth.py index 7cd8cce..5e9aa31 100644 --- a/twisted/twisted_site/views/client/auth.py +++ b/twisted/twisted_site/views/client/auth.py @@ -109,11 +109,10 @@ def get(self, request): profile.save() - if os.environ.get("LOGIN_ENABLED") == "maybe": - if not profile.is_allowed: - return JsonResponse( - {"error": "Not allowed! DM @kavyansh. if this is a mistake!"} - ) + if os.environ.get("LOGIN_ENABLED") == "maybe" and not profile.is_allowed: + return JsonResponse( + {"error": "Not allowed! DM @kavyansh. if this is a mistake!"} + ) login(request, user) From 33c7822f94b608b48a34c6c3778b71c3ab88b35a Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 13:00:46 -0400 Subject: [PATCH 12/16] Exclude Django database migration files from Ruff checking --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 49fdf52..0793262 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,3 +28,6 @@ dependencies = [ "django-mathfilters>=1.0.0", "django-humanize>=0.1.2", ] + +[tool.ruff.lint.per-file-ignores] +"*/migrations/*.py" = ["RUF012"] From 4218fb290d044738c24bcfc03c565eedf3229959 Mon Sep 17 00:00:00 2001 From: Lewin Kelly Date: Tue, 8 Sep 2026 13:03:20 -0400 Subject: [PATCH 13/16] Improve exception catching and handling --- twisted/mysite/middleware.py | 2 +- twisted/twisted_site/ari.py | 2 +- twisted/twisted_site/views/client/auth.py | 7 +++++-- twisted/twisted_site/views/image_upload.py | 4 ++++ 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/twisted/mysite/middleware.py b/twisted/mysite/middleware.py index 79eea71..b11417e 100644 --- a/twisted/mysite/middleware.py +++ b/twisted/mysite/middleware.py @@ -15,7 +15,7 @@ def __call__(self, request): timezone.activate(zoneinfo.ZoneInfo(tzname)) else: timezone.deactivate() - except Exception: + except (zoneinfo.ZoneInfoNotFoundError, ValueError): timezone.deactivate() return self.get_response(request) diff --git a/twisted/twisted_site/ari.py b/twisted/twisted_site/ari.py index a07abd9..ecfd902 100644 --- a/twisted/twisted_site/ari.py +++ b/twisted/twisted_site/ari.py @@ -44,7 +44,7 @@ def get_hex_signature(content): key_bytes = ARI_SIGNING_SECRET.encode("utf-8") try: message_bytes = content.encode("utf-8") - except Exception: + except AttributeError: message_bytes = content hmac_object = hmac.new(key_bytes, message_bytes, hashlib.sha256) diff --git a/twisted/twisted_site/views/client/auth.py b/twisted/twisted_site/views/client/auth.py index 5e9aa31..ed3d5da 100644 --- a/twisted/twisted_site/views/client/auth.py +++ b/twisted/twisted_site/views/client/auth.py @@ -1,4 +1,5 @@ import hmac +import logging import os import secrets @@ -13,6 +14,8 @@ from ...models import Profile from ...slack import slack_bot +logger = logging.getLogger(__name__) + oauth = OAuth() oauth.register( @@ -87,8 +90,8 @@ def get(self, request): ) avatar_url = slack_profile.get("image_512") - except Exception as e: - print("Slack profile fetch failed", e) + except Exception: + logger.exception("Slack profile fetch failed") display_name = name avatar_url = os.environ["DEFAULT_PFP"] diff --git a/twisted/twisted_site/views/image_upload.py b/twisted/twisted_site/views/image_upload.py index 39b26a5..45ca6e5 100644 --- a/twisted/twisted_site/views/image_upload.py +++ b/twisted/twisted_site/views/image_upload.py @@ -1,3 +1,4 @@ +import logging import os from pathlib import Path from uuid import uuid4 @@ -10,6 +11,8 @@ from ..models import UploadedFile +logger = logging.getLogger(__name__) + ALLOWED_CONTENT_TYPES = {"image/png", "image/jpeg", "image/webp", "image/gif"} s3 = boto3.client( @@ -100,6 +103,7 @@ def _upload_fileobj(fileobj, filename, content_type, size): return {"status": "error", "error": str(e)} except Exception as e: + logger.exception("Unknown error during file upload") return { "status": "error", "error": f"Unknown Error Occurred: {e!s}", From db424c7f0a904202ce0cfc19046bda63763f7044 Mon Sep 17 00:00:00 2001 From: KavyanshKhaitan2 Date: Tue, 8 Sep 2026 22:46:27 +0530 Subject: [PATCH 14/16] Rebased --- twisted/twisted_site/hackatime.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/twisted/twisted_site/hackatime.py b/twisted/twisted_site/hackatime.py index da4f820..44b70b7 100644 --- a/twisted/twisted_site/hackatime.py +++ b/twisted/twisted_site/hackatime.py @@ -1,5 +1,5 @@ from dataclasses import dataclass -from datetime import datetime +from datetime import UTC, datetime import requests From 729ac87fde247c2d8d4342571cd5bc4d694066b5 Mon Sep 17 00:00:00 2001 From: KavyanshKhaitan2 Date: Tue, 8 Sep 2026 22:53:06 +0530 Subject: [PATCH 15/16] Changes --- slack_bot/slack.py | 0 twisted/.env.example | 4 +- twisted/mysite/settings.py | 6 +- ...ffpermissions_profile_staff_permissions.py | 26 +++ ...rmissions_manage_announcements_and_more.py | 58 ++++++ twisted/twisted_site/models.py | 39 +++- twisted/twisted_site/slack.py | 187 +----------------- twisted/twisted_site/static/icons/gift.png | Bin 0 -> 140169 bytes .../twisted_site/static/icons/pathways.png | Bin 0 -> 198287 bytes .../twisted_site/templates/admin/user.html | 43 +++- .../templates/client/dashboard.html | 29 ++- .../templates/cotton/project_ship_mark.html | 4 +- twisted/twisted_site/views/admin/admin.py | 20 +- twisted/twisted_site/views/client/auth.py | 10 +- .../twisted_site/views/client/dashboard.py | 16 +- twisted/twisted_site/views/client/journal.py | 7 +- twisted/twisted_site/views/client/project.py | 22 ++- twisted/twisted_site/views/client/projects.py | 15 +- 18 files changed, 256 insertions(+), 230 deletions(-) delete mode 100644 slack_bot/slack.py create mode 100644 twisted/twisted_site/migrations/0031_profilestaffpermissions_profile_staff_permissions.py create mode 100644 twisted/twisted_site/migrations/0032_profilestaffpermissions_manage_announcements_and_more.py create mode 100644 twisted/twisted_site/static/icons/gift.png create mode 100644 twisted/twisted_site/static/icons/pathways.png diff --git a/slack_bot/slack.py b/slack_bot/slack.py deleted file mode 100644 index e69de29..0000000 diff --git a/twisted/.env.example b/twisted/.env.example index 624d072..5e6abc6 100644 --- a/twisted/.env.example +++ b/twisted/.env.example @@ -18,9 +18,7 @@ HACKATIME_CLIENT_SECRET = HACKATIME_REDIRECT_URI = https://localhost:8000/auth/hackatime_callback SLACK_TOKEN = xoxb-*** -SLACK_SIGNING_SECRET = -SLACK_APP_TOKEN = xapp-*** -SLACK_MODE = https +SLACK_LOG_CHANNEL = C*** ALLOWED_HOSTS = 127.0.0.1, localhost CSRF_TRUSTED_ORIGINS = http://127.0.0.1:8000, http://localhost:8000 diff --git a/twisted/mysite/settings.py b/twisted/mysite/settings.py index 7b0c5b9..7879fe9 100644 --- a/twisted/mysite/settings.py +++ b/twisted/mysite/settings.py @@ -205,4 +205,8 @@ ARI_SIGNING_SECRET = os.environ.get("ARI_SIGNING_SECRET") # Separate from ARI_SIGNING_SECRET: signs deliveries Ari sends to us (Settings -> Webhooks), # not requests we send to Ari. -ARI_WEBHOOK_SECRET = os.environ.get("ARI_WEBHOOK_SECRET") +ARI_WEBHOOK_SECRET = os.environ.get('ARI_WEBHOOK_SECRET') + +# Slack (bot) +SLACK_TOKEN = os.environ.get('SLACK_TOKEN') +SLACK_LOG_CHANNEL = os.environ.get('SLACK_LOG_CHANNEL') diff --git a/twisted/twisted_site/migrations/0031_profilestaffpermissions_profile_staff_permissions.py b/twisted/twisted_site/migrations/0031_profilestaffpermissions_profile_staff_permissions.py new file mode 100644 index 0000000..244d4fa --- /dev/null +++ b/twisted/twisted_site/migrations/0031_profilestaffpermissions_profile_staff_permissions.py @@ -0,0 +1,26 @@ +# Generated by Django 6.0.7 on 2026-09-08 15:55 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('twisted_site', '0030_alter_journal_minutes_worked_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='ProfileStaffPermissions', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('superuser', models.BooleanField(default=False)), + ], + ), + migrations.AddField( + model_name='profile', + name='staff_permissions', + field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='twisted_site.profilestaffpermissions'), + ), + ] diff --git a/twisted/twisted_site/migrations/0032_profilestaffpermissions_manage_announcements_and_more.py b/twisted/twisted_site/migrations/0032_profilestaffpermissions_manage_announcements_and_more.py new file mode 100644 index 0000000..358899e --- /dev/null +++ b/twisted/twisted_site/migrations/0032_profilestaffpermissions_manage_announcements_and_more.py @@ -0,0 +1,58 @@ +# Generated by Django 6.0.7 on 2026-09-08 16:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('twisted_site', '0031_profilestaffpermissions_profile_staff_permissions'), + ] + + operations = [ + migrations.AddField( + model_name='profilestaffpermissions', + name='manage_announcements', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='manage_fulfillments', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='manage_pathways', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='manage_review', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='manage_shop', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='view_auditlogs', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='view_pathways', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='view_review', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profilestaffpermissions', + name='view_users', + field=models.BooleanField(default=False), + ), + ] diff --git a/twisted/twisted_site/models.py b/twisted/twisted_site/models.py index fca2b52..85a3816 100644 --- a/twisted/twisted_site/models.py +++ b/twisted/twisted_site/models.py @@ -8,13 +8,6 @@ User = get_user_model() -JOURNAL_TYPES = { - "hackatime": "Hackatime", - "lookout": "Lookout", - "untracked": "Untracked", -} - - class UploadedFile(models.Model): uploaded_by = models.ForeignKey(User, on_delete=models.PROTECT) link = models.CharField(max_length=500) @@ -39,10 +32,11 @@ class Profile(models.Model): hackatime_state = models.CharField(max_length=100, blank=True, default="") hca_access_token = models.CharField(max_length=2000, blank=True, default="") - - is_staff = models.BooleanField(default=False) + is_allowed = models.BooleanField(default=False) - + is_staff = models.BooleanField(default=False) + staff_permissions = models.OneToOneField('twisted_site.ProfileStaffPermissions', on_delete=models.PROTECT, default=None, null=True) + twists = models.IntegerField(default=0) referred_by = models.ForeignKey( @@ -77,6 +71,26 @@ def __str__(self): return self.user.username # ty:ignore[unresolved-attribute] +class ProfileStaffPermissions(models.Model): + superuser = models.BooleanField(default=False) + + view_users = models.BooleanField(default=False) + + view_pathways = models.BooleanField(default=False) + manage_pathways = models.BooleanField(default=False) + + manage_fulfillments = models.BooleanField(default=False) + + manage_shop = models.BooleanField(default=False) + + view_review = models.BooleanField(default=False) + manage_review = models.BooleanField(default=False) + + manage_announcements = models.BooleanField(default=False) + + view_auditlogs = models.BooleanField(default=False) + + PROJECT_TYPE_CHOICES = {"software": "Software", "hardware": "Hardware"} @@ -155,6 +169,11 @@ def is_approved(self): return False return latest_ship.status == "approved" +JOURNAL_TYPES = { + "hackatime": "Hackatime", + "lookout": "Lookout", + "untracked": "Untracked", +} class Journal(models.Model): project = models.ForeignKey( diff --git a/twisted/twisted_site/slack.py b/twisted/twisted_site/slack.py index 9532d35..15ad87b 100644 --- a/twisted/twisted_site/slack.py +++ b/twisted/twisted_site/slack.py @@ -1,184 +1,15 @@ -import os from typing import Any +from django.conf import settings from slack_sdk import WebClient +SLACK_TOKEN = settings.SLACK_TOKEN +SLACK_LOG_CHANNEL = settings.SLACK_LOG_CHANNEL -class SlackBot: - def __init__( - self, - token: str | None = None, - cc_group_id: str | None = None, - ): - self.token = token or os.getenv("SLACK_TOKEN") +slack_bot = WebClient(token=SLACK_TOKEN) - if not self.token: - raise ValueError("SLACK_TOKEN must be set") - - self.client = WebClient(token=self.token) - self._cc_group_id = cc_group_id or os.getenv("SLACK_CC_GROUP_ID") - - def post_message( - self, - *, - channel: str, - text: str, - blocks: list[dict[str, Any]] | None = None, - **kwargs: Any, - ): - payload = { - "channel": channel, - "text": text, - **kwargs, - } - - if blocks is not None: - payload["blocks"] = blocks - - return self.client.chat_postMessage(**payload) - - def send_message( - self, - *, - channel: str, - text: str, - **kwargs: Any, - ): - return self.post_message( - channel=channel, - text=text, - **kwargs, - ) - - def send_blocks( - self, - *, - channel: str, - blocks: list[dict[str, Any]], - text: str = " ", - **kwargs: Any, - ): - return self.post_message( - channel=channel, - text=text, - blocks=blocks, - **kwargs, - ) - - def dm_user( - self, - *, - user: str, - text: str, - blocks: list[dict[str, Any]] | None = None, - **kwargs: Any, - ): - """ - Send a DM to a Slack user using their U... user ID. - - No D... DM channel ID is required. - """ - return self.post_message( - channel=user, - text=text, - blocks=blocks, - **kwargs, - ) - - def dm_user_blocks( - self, - *, - user: str, - blocks: list[dict[str, Any]], - text: str = " ", - **kwargs: Any, - ): - """Send Block Kit directly to a user using their U... ID.""" - return self.dm_user( - user=user, - text=text, - blocks=blocks, - **kwargs, - ) - - def users_info(self, *, user: str): - return self.client.users_info(user=user) - - def get_user_profile(self, user: str) -> dict[str, Any]: - response = self.client.users_info(user=user) - - user_data = response["user"] - profile = user_data.get("profile", {}) - - return { - "id": user_data["id"], - "name": user_data.get("name"), - "real_name": (user_data.get("real_name") or profile.get("real_name")), - "display_name": (profile.get("display_name") or user_data.get("name")), - "image_24": profile.get("image_24"), - "image_32": profile.get("image_32"), - "image_48": profile.get("image_48"), - "image_72": profile.get("image_72"), - "image_192": profile.get("image_192"), - "image_512": profile.get("image_512"), - } - - def error_log( - self, - *, - channel: str, - error: str, - title: str = "Error Log", - **kwargs: Any, - ): - group_id = self._cc_group_id - mention = f"<@{group_id}>" if group_id else "" - - parent = self.client.chat_postMessage( - channel=channel, - text=title, - blocks=[ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": f"*{title}*", - }, - } - ], - **kwargs, - ) - - # Break up any backticks in the error text so it can't close the code - # fence early and have the remainder render as live Slack mrkdwn. - safe_error = error.replace("`", "`\u200b") - thread_text = f"```{safe_error}```" - - if mention: - thread_text += f"\n\nCC: {mention}" - - return self.client.chat_postMessage( - channel=channel, - thread_ts=parent["ts"], - text=thread_text, - blocks=[ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": thread_text, - }, - } - ], - ) - - -slack_token = os.getenv("SLACK_TOKEN") -cc_group_id = os.getenv("SLACK_CC_GROUP_ID") - -slack_bot = SlackBot( - token=slack_token, - cc_group_id=cc_group_id, -) - -slack_client = slack_bot.client +def log_to_channel(message): + if settings.DEBUG: + slack_bot.chat_postMessage(channel=SLACK_LOG_CHANNEL, text=message, username="[DEBUG]") + else: + slack_bot.chat_postMessage(channel=SLACK_LOG_CHANNEL, text=message) \ No newline at end of file diff --git a/twisted/twisted_site/static/icons/gift.png b/twisted/twisted_site/static/icons/gift.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e3334ef0600d13d05e0156946d256571b29193 GIT binary patch literal 140169 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�zdtHM-*U$V}#O2g~CNtW|TDn|Dg~gF9Kx`EXcP2CvW8^=*FMr z*AI~eJmVTEEy8b9a_z6F<>jwLVk`Yo`W5>cVt?fb|6epy55a!855EKV5AMR%!2zri zLNZdEx>w%Ra_jmtxO4R}mih(!;Q#QygIoXG|INUQ_CP}_;C<2Z15`nPnG7+Gjrkm# zPs_CEysUh6z#d$&l=jQiy@Y^1z1@=nnTgve(DSs)ySLV90l$%1!;1*K;Og=B9 zKab@+eIDZR?#!h?>KR?9I z{Qw8^H(1B}l=%g3?tQ$ek8yE*2kZC@Kkwk;_rOXlRx+^?jgo~13b}EGNoLTd7R=;N z;T4;Jp^^dAiBQQkRQ5;cJ0j?SSb<@4Cmo~{44zvXU(0+dB@`Y81OcoqfqdBzXS z{MF0dr`G*{{EXb$5h_n$Ojt9i$*4`j^7n8!u!4NlRz!w$jqUUKd~42!8_RXx_n*tM zexBhdmEPNMhT1HBp42N=!zrGY>Lb^EG+f`Ja^x*HF+2s^n3XE=+!k*?q|a{np?4{_ zG5Qj`-C+7)<@4)KFLGbk?9BN`KRUy~Ae;G>ziXWL6Yl@j$oJX57iq-vmD>AK274{i zSl9)Q4%hsNW z#|ZhOAw*a+F=v+Qs|KQ)`Ee!3yV^*Ak!R?1G{P%lAHC6nM|8!)*9*ew*cUB+ z0PyEM$DgK|g^+CsHCsLvUZWbVJsy@-$G$LJ&ceopjk%XB&-PEt8lm0i-hjYG}--ylNW4Z2Q zIZr|ZEp87Sv=Wz+LJQJIFM-+fiTPAVfU&tIlh4xBVX=8-ieXAb(WNLeOi{Oep&YPO zjB>K-VMR;&{0&0LUq4?I0WkB9n0+nsk<)fO;-E|&@0rr$<#NBNVgAbOBZVl0QO42$ zdDlf|yokX^(oynCqeS_>KEpIB*9t*;UBmokGAr}KK2>m1F>DrN{}+=(_~h32;m64x7-&B<2mpJd61FzAA$r=PY?;5cAuIK1 zc6v?Tb3F7~*SA;snA_0@D-5W!nby&>&OIN66(~njW^0*lcr&A(dO~^@x67aN_z0d( z)l=%~BhSsDwR7}wY$Y7*jI{rh8I5Jk;asr32BG<-hUaJgw!W~Q(C>qYnAuvMAu-{y zZ2Rs%Y{O=#T34rH^n?IJ~_%V(5R z6hMUm>rc=p99YQMBGh4dRoFsd!4jQc!dE2f2*KuRVDD?-+ej)sDeRI2=Uzlr@2UD_ zkn48G_c-R9_WrQ?0uT}Ou1vgqSsnNelO4l~A@zF2@LcVgJTDxz*VVbKg8P+t&$4zt z!rzp1hjRPp#$~7$bbvK;uEqJXY$k}k5K(m;fuOPdb9<5Z3}9j;YYtx`3UGl&tr;4| z9(!j&N@YC%atWUv{}9e+r;zwv5YuMsw!Qz2m%f{<9%@IdmQW zz|<3Zu&2=VIIn^>ttY;gu^QnE&nUfE9UZ80T12Msd;{~QlS)>7nxbfio=jo`zm;6s zUT(+V!vDKa9Do-S4(j%=miZ9n!kcPi2Jmpdxh{o)UM59sZlIm_{GYsRPT+VJ0zi)O zao2e1k~`qkGj0+Fcs3=VxdS4Yh;R_gZ*uA@{U84xduPE&%1=cAsk~rO8NcDe3lu#4 zR-XA2vA^vG-hn@X-?{iRI9We}X?4Y656QrW_C>?U@0;j-dzQ_dNYkB#3%4@h$ov6x z%>i-Ho`%$^_8&5IGFz+J(!qAvUm5gE>zTrfIhT1-#%JUDuA#M^zlrps$b}|=2yu4v zdM3t3l#DsJU4C}V09ISK(Ha2Vx%0eleq`Ek?EO#Lzl)`c#MWmVNW3i^26~xPuvAZu zf9(9%&NF7ZtsY*PhfR!{*zyAH@?^cw5vF6zX(QJB5;OupwfRc?3Mzk=+P%Wh4Su7@ zfC9h8{=DtW=9ns zLc2-A3riGxB5MqPQRtpr$4Ag29?Eq!^aBUHP{%_2yrlAzwpoh|sj#M|S=)`!f8%-N z6mu(Np7vYZW{gHxw6PAh?Q|9Kk2K@P2i4-`kaaSg;{3SYcQ?+{aV;V1H!qg3lr+tJoG+n3799XU{WInlAFnTr6PAEYqXQz~3a=2lA*px8v6 zEU`N?^8c8aC1vmd`1+({NP+-`3{p;sW#JJ3B4yAeJ{;Oru<*KnEjl zS&V`RN{i#o3eFbq!;RuI6a@YT+bdC&_#ECVGni$UFwlNz5CHZ~ihl2+KKRyB81kpi z!d1_8_IoH8L_wWwv}?`K%7awnRAE4w0Id%@nSV&OBPvNK4E}Al`|pz8G}(ei1L(sD zLlR}OWNVHDPzss3720++`&FoxxPP(x7ZSElG4zz%e&&-S8Iz8tLKx`llMhV<+6It? z0TJ*#+otV#E865J_CW_~kyl}$@SuL~1p$r^P!Tn5?Dy;lSYi`X5fDmWL+f7Rn@ zV7p+DIFNh803i%KFYA;u7ZUTQZH8C#DXd2mxXun>b8!H-;X`cc3q%4Q;WW91f%Zd# z0Pt-hyXX@=O&JYC3auuo=dD@3T?x9o)rnI2Tu4TzacYp5o~Gjawln{y5sgEi_kWl} zS>wZTz~j+2<9`~Xx4r^jg_QBDIRHQW-tiK-xX^i%nttZbl5PijA@Z3nqb9VHOaWDi zf0dX5>Z&sZ*p6R_lORU{l-^K~$aLWJKb*;rC5lYKc&f&<;Jg_D#86NN+Jf_T{=%ni zqNsr>8UU8*0i>Ia-)V6*o*`0H`P>m%Jce?dz(==daB*=0H?q6%HvBoH)th4G`}WZw z0PK^#%G#*B^LgKyuCU%Rc7ScvTI=i!H?+=R8Fa(l=`-B!wwGeq-b_H@gzp0LS3AnC zbA6e7^cr)XvctK$E8y87tzp~L^DL{x^PD$`Q8RUF+Ts-tmB-vqvI~@fz%tO+q-{Ye zLXE$Q7%}Qg|KZCB%TC0huSP+W{+t&LIK{6+*p82PL;Nc7<_EzIQgH~ZL|CZhcqJ$S z|0WDz4F}6}sFD~a)3MLaSh$$$iU?zfA*;tw9LKQ0Ia59v!@X#57}*yM0>C~g44boy zaJU%jxsds*MjoyJHf&FS+laH!AApwEY0X zm`x$OXG5sfEBdZxn;LdA^}cIW-f%n0gUB87Shd&+ALAy!!;R*Y%6C{+UM`g;buvrm zb?Tb;)Tinl)$E+vF#Ad}0JJ-1MPBzWyxqU_pgoBOZT7#anOF|W#*P?6-CQ4egM!-p zIi#@7IXH*McR-n*D5DsDbLVI9GfH(m z&|YYGQ};!R@P^EMmnLSJwI!|NY1+G9-zQWMg*)l>rNXxwrSfr2b5ADh#@4Iaij@+S zMy7Jjcdy3>>QV^Z2w9}1&-Sm+ioWZk*yVbl!lZ*|n+L@HPt3o`|1VW6Hz%;E#o$lO zpXNd;x$dK{V|N&+AsWY+VSXZ)lTQFL`I6!KG$Zz%d0idEi7)c7eIhaax!2GOdDjx3 z3xLWcka=Ms_d5vWqW^a@1m@l$uxd;IAg+Im-tiSJqBnsr{Wl6ToWbY*?^gCbh##%t zYIX(Ph|Kz9 z%`K)w=pA=uf{mY->67XYK)(5blNCBKX__$u~Ee9v(F zu)`mlYC~bbmQ_LYX~HA4=g7qGqz?MLENFXzLs%DwfdAnmmHQZ&|I4AO=b=WGHvuFG z!$Czv>3DK{J+D#hPP`URSilCH|EqmCMr$2n-vEa3IIlmw*rj*pn=~$h%+{4^F(L5x z+6x0^;BpuncR`!CjIETMh2U-YQ~1f_{{qG+Fi!FfjLX4KWS=x30Q(|+GweHLv-5@2 z=jl@iIG={x^ zAx4bIN@13)*X2{l7O8ux(`R2oR~A!HriSOE9j2vCbqme@r*K`~#7Fyy-=VJAac`%? z<3P_%Q3%l?CCE-U$ZTtVpm~)62m2*H%O7j|Z3th1r~t8gg7{;3ADz_6_^4}66X6Ex#zl}9pEWK358-`WCOGBL4fqV(dnD&8(D($p<^)XyfAHwP zfM1P&AD*1vLTl0Uq(U9&o1j4e*cYjSY&QaW)?yqoab3hiSRY_JM?aCt)Y@VGQE+`& zpY;Q%pc@{jnE^GF{{&dkf2bAFL6s1ZqKMZ&lvFCvUR(@zD|Z=VmBuYhy;7lIK)5~SN^9E|+=mgt(bXX!tH>)8pc zM~8?=MDS?!E}X2sfLrjlI1?8B$_gs6GUYIZPvJ+%_kVN#_py!V3LzTk8=ye|*f+h1 z5yoU*>m2J-6#Ep*6uJw0xISB?K+Oh3p);91PsdbOf#8!Qvb~fUEQdETTCq$H%ZqMzBoha6LJI^YtzG{_3A1!@u7wJGy+#PzboU zp2I3_^Vs==Ty@zXEj@R0g1_ zg6Z=f{;hE#IUAc!9GK21^AEG$0et&}gXlTW(O`yNmp!EB7#+%|fd=(cnyq@ug;9v| z+vaRp*Eb+5j^Xj@ZA1d5J#`Pv|D}@ktDuBHSp}NgkA41Y@4A=D3tM`Y&l9BfR(K~% z1E&Kb-97dZ{;|};FFlvxx|QKavY@bl!9qOCjOrYMD8pz9nTx#df03Zj;1XD%AW*q6 z+*y8zI>BFdfF}BW6A^-0^_BM!ALwh+AOO6Mw2L`gvNqm60pMw-V_lbR1OY%7@(;Cr zRou1QMy`JZJd19DWGa&~DijcriSY<8xYQHmBrpy-)fWwr!82{(-zw4v_nfa~=-sc+ z%_0GIwGEm2i;y5qPQm~$E0XJO!@8Wqll%zWu&Mj2rK0jEKwK2w=FYBr4&S2GivgUe zpK|}Lycke}CjY6uw}0%#gGl~&{wk1se(EE@#)B?JUT~-d4Pd(;2?Pi0E7*)CkWWt_ zizArgh3jPO4H91*-i4}0&Ci$!6;70OUX$zvF*TWBz^q z1fgwM1q^EnunA=BTd&Zt!u@LVr}8T~N1vZyrKeb6EF3~n0PQcC{E5dek*P1orXh7e zvYpi5-!|s|wEIb*AF@e$j>&@y?e_Z2ZD{E(jlQpIU8nBexkQh)#N%gI^ectmtbT%s z{|Ju96b6WWEjOG3IE8_}Ns5pW7ql@HvivLuPUy??C#G{%1)Tej-n9q;JCe@HK``<0 z`Q!}{i)$WlBFqwdB?|)!3%cP46YmF*_^5$MFapN&F8ndLL<2%uct3#i>8Te?Hgy8! zcmfYkB6xIs6Ur|W1O@-hM+^}8<)|KfMfOF50Pwm|=;ZfR&RfT>*n9$XBM&TpQK3Nn z^@`v)ts@#1NXO{?t+24)8g9d!!JG2%a~^ZP@*~qPZS!!%spD#@>;T#%1D0&kf){a; zc$3Lya#HFu0q6sQex|N#whO8$;py@RIr!nV&ia&C9|5T+qA39NA* z9MD#Q-kUq-L;=In^72V{1SC@c4sW!w_? zBvm+rHVYBa7`{6Wg4PzJqz)FAXq=Mvw8}~~w3{?3cw&V;>nqULG%@xPe5%&O=7q2% zvKl3$TNStAZ1p}|tZ$;JzlLdY32mHuJot8g6GYCH>IXmqSBeZ8HEhT-a3f^pS=o90 z*(s1EdD7iS-WV{(*K*^TyQcTC@*!*arCd+7v7bQcg9Wc}8K4Y;nL!F1Og+AE4aZ^> zAZ+1q`6>J=|Ca%7eBk#2SYzeObP7{c7CyZFdr&+~;SQEQh6fPW6%4c=`mU%~Zx&g* zdl=gHEZR2Ob@K&S&v09>F8B#_H9tiIti9QPj(HJMs`X;JfEYRL5sS?0QOve~^7FZZ zRaMIjdEzbmRF zVkbb#{#POFe}8iuuF5$w|0Rqg=^AON#H2QAPx_klb$korZ?XRfF-;V-T!or{iF!B+ z2RGT%zTb#Mm`5%EL;63IWY_re)mAVmfprOUYB`agGz+G z7|cwF+Kguk!E00GR_++D28O=`{!{8RizT^ z^BH{mqDW-U5Kn!GbKs(Q2MQDd;%I{cKmoJSW0BWv#-ML75s(T7yD|>a`KpFDJ|m&u zSE1)Pg#spIi^2CLL7RM$lJOrcZ!87Y;;5(O{EJqIT$o8FfXD;>WuwiP#_ykr)Bm(7 zfOC(^Rl@2uG_Y*Sayf3_A$xz9?EQ~w_~^z@{8V1M2|khvuFxbu)yiQa-=P^t5j!(VTMikif*lP6Fnasg<9spZcX3G0FT^T+VCMcg6mS*-Uq0JwR z7i^>)ahem;C(SHK<%=u12hA`1UEeD}Lp6HH`bj>E(eEN-->3Q_YeERAW>=3azYF(Q zcVSr~8$k$qmR`Y~@qH;YJUX7=N`!;HUf90lvfZP0lwo^|-#C-Wt?ox1ctU>6GfVO9h zG<5q)$ihANQ#gEb4!=J589Y9C%U?uD0Qm*b^nRG$gMs!#g9+euAl0xfRq*`GUp4v~ z`Vj=HDTb)5!p9o7A6{ESYXVTTfa=SXG27IF#P~DlIufW80LU@K{p&e93{u+QYbi(T z3i&3HU_d?sZY>Sl7~#xx+WuDa!9MAE>@(3b%J#jEmP7Y2wGis>tL}MFbSv=bd{Xm| z{3cn?Ps?fsPx9M7$x9j`+#6*uPp|k|3%kE;-!4;ky{@2GmyqZD>9-*!>a!YIGs2tZ zZ}zNQ3JD5fBV@+0?9~^GUhX(6Kubl#{P}UVb1?R?0VHxq-Yif-yN$4F`XJX(?ts#} z{;|s-k&_7)$u0u?-P{6@Kk#qicdq{&?w)@EaaH>CzlB3A0=54v8ny)A7Yzcy>p;A^SbE-UJ-ZC~64qfIFvBho z+3bxj_zat|z9M?8f{p-5-v5tK&U(E00ICx0$F4v{JA;$-0xq-L+^16d_DxVJovTU- zSgXA|+XlJ*VuRl(IYG6S{V6JD{A2N&r@@E?l~6(A+u$Q0+XVaQ3=#%PcIzA0+fTuQ ze#+GOv9tZY^7#W;2;k`c%m@O!{~yQwZv+=`pcw%)+h8mcs5|wz+zdW}AFcmuxO4G2 zS^#sH78&G--qeE=z}{#O0QN?j-V>hv6hc1$7o1C=b>h=Mt=C2qsInd^(w1kbhChaG zZUBNCDPC7I{?%i-#%lg_Q30(mP(X_a6s9r7hQ;fjJele6HMF6I)FvSU#C4p{DGVH1 z5XQ5m(q3fR=*uejO;O0SE!<+4;Lz(*$wDuEPJlg=BOY;DSiNLd7X;SteD5o-=jWPjpWE%p1Gq8$1XdM2tW2B;UUFg=%dk_5HY`2+U*kU#1UC3d zY;OfuuqHE8N?D4qV1#44ax4g>aVtRR=lXe|k=LB6#6K$<_M})s>Da1U^&m#PRPdZE zyeB~A{r9uRWEY7rPUST+nt~EP_%3|7i37 zhaWxoE10h@U|g)hMMEBdebFEQ?2Sw;w=Tdt*85HvUs%R6dmFk{nQJYSuWizA-uk<> zAKTD-MGJ_J(%McAM^yF#I1OA?nv23lv~gAEb(4TRxPK~t#OF4=kb$NJr^TBtJ9NB< zke4Z_?rW)M1Z}#(D`@vHroTD7It0K{=)|}yX@h-$c~H)tvkWR}>n}4NAIsdexMkY< zoJ0A-^;ECjwRJdXH~*1(isB|*7H`4D<~EF@9L8}DtNc__1QYYESy-%ImR47`3_H*L zaK+9+*+A2!XGEEYxM>f&D_C4E&?2y4L4;Ie`rNoSNV;$(*djVoK+oi>{@R$y+Vnq5$E-UqUyNpL+f) zX)JgSZM2=52CQ(PetXXJk9aL1_wy0+*G?#bLI#x-3e?6%f;ljq(GUV^Y%b@<+>rMV zC|KB_Xn|C!_0fgc!4V+=wB6vD+~7#+NTt06?8m?LtL%VBeGbt9`!JMLz{z$a04fk9 z&^{IyoDYRZt;3pzD!Bx2#aV&Un*e?nHYgPk{GY}pOp-M$^P4akUCRbF^1NT#J^%(q zN#&hEoA=bi)Rh#XB$2VTp+`q;r;2Vrmc$KuQ{d*A? z$e>f}=+|}1V-TOy{^SjOpZiUJIjnE&w-YYC3t<7JOqL3GPXQ9JX7VdCW2cBf;hzW- z!~R)geT>9YAQBhFDZZoc!as#~ul@qYZb${ZFB$}ZeUTGw_-Sj9W%hN?ab56<)KM>3 z$RSk3LZ@=;KR|D)LcbYwO%E!@&oXwPN3Ly~JSwYu(e*!I2v|eVqpRFeTanSYr zKM?aj{ytB*>Z!C#&3U&2&60NotyH7Z%08xcn1atz^ptBtr$C!SIlMlS=lm3hK)NhU z=M3gtNLH|n+9tv-KScBT7n}E>C?{}TOga8PUi*bUD(iL^z-EJ(mu%ZrO))_`G#a@l z`0o(s3B|NK&!T8jtUV%7cm}qFMX^G#YQw&yhti+1`*x+6m`5zsY!J9F82O@{02Jz% zM2T_!v*C}*`hqS73yG@|YMck*JYKIS@S)FSX2-e~h@EB<8FeU;EF0{#O zX`h6E8MK*3NiLXRZt8$|W8@&rV^H zAENeOz;XHnHsuVvQ$VbJB3rwc#k2$85RDOt9#@F&SDYMqa{%k|61z+DZ{xL9&S#&( zGTZo^c+)c+yCX6+xo^*21uDo;_Qf$GAo$J@q#mWn-0|J1sz~hdZG?XePPF(6bcev$ zCkCRohD>a{qhJo*cwol+2ro#R8QbCnwZDoGg;)$UwZN2*;YU7yzzBtmG1fnU`<-by zatjz}KQssc`y$t)idiJAZ?U#~!@+LnFEz=tiL_mZ>1pS%Z4=I*Rpf25A1g#u!L^D$ z=;nTx33P1=BiP2LE%PT@L)Ww4nhS`;BtRV`2gJv++7VDdSp+xQr&==4T|?^|un*>M zp^~Rj9bET3<(^X3GW`(Y32gek^QMNb^Qa!vxl=#OK@r zg4~I@z7qR-#M|Q1u6Rie^Yt;xi)%@GtCr{jI6$t3MTI7db7Xz9*b5NwZLmG7AVaU! z1~v7X)AWKG_CNNffU#%Pi65mxoO3JSJpxr=;8*~ z)I%S@x(l_`$D~7S){7(1~#-W8W4beQy*UpHE$(VvaK+nnxCyl zBLeh2Rs>!>{{dRlduSK7s2_c&m4YDCMNNUmsCkP75b|z{*(U_v@ARjuT9{U@g02Lk zzn_Pw!*l*x>xMYj-E_pgwu{$+La+a?ia#q1^8(Im){!$rkF4geq>&^g2YN(e3Ls0& z!_7UoEKU)!;diNg(qK&xv)q z_O@yEcwM5V99^TqV1^ft;%?M}J|fB?;00`PZd517D1cG)_zc?j>uITo)mNg7WwS2F zj(jtF9=J?yLV!}K7u1KLZu>h;I6ETcKNyXC9d#LrKCg*^OYb0Afo}V&mzN$B0KYE) znN$kz0l+PB*e-vsWO-<#1e`xd1_Qc+QVFd^)S!``_-%wp^Dhzv{}V)J;siGFZP<)Z zc)X%r0sq;60PK+l0bpN5liq6625RltVXaMGA$Wavm2qo^KIN(U=X&bby#Pw+YKnFz zKnwMkwA)z0VR}@6crTgh=Rw^d$H&sqGYtW>jcX#HNIIgnhNn?zHb_k;DP`aVKxa2G z4H0~mv`dH)?%5G^EN1((>voL`?bt*47@qSU`{4Zw`kBA*B?{?t0m}5z5}T}2m?SI6 z@H4GZA1p_3Jidmb@g;n4WWr6-Z`l6dM}E#4xa%Z>Nsh2{mO!~)dwX>0C+`?)@A)2i z(0Z|4!(@{}JoQd3%=9VYRVMX#VL+aRGUkm417v#2&G99)kC&oV%DOA>QF+>NiRLRs zCU`4Z$pZEy;2HCu$r*&9wVVn_-$iO=EkT6bw+X(R1#J_IW|_yc z8&D!T6PGBGjgH_7C)hgud*Ggo;B7Y`0Q;gr0N5AN3ak8($mZ)0ow<}@TmBh3h!?Q! zTV{EPEbd#de-yNB9rf1~ZiX-SQbYV|zK(YHTj7OMVn%tpMZK>3es2#=0HjHJqM-B7 z>xLcPtc5Vh7C>s#2Daf29k6ejLI!V12U(pVZ8^G+zLbl~spH+}3K?*^#T1?`LxuAo zbR-P~MGBoKo|G6ta#_9$%Y2Fmz#-bwCvZHyz{Na9zO{jQ^b3(^@E#`<^2md|hS;e_ zozfNoDI^4im%I}eg$hPKR515?E-|YWGS2uqhv|6C43%;$cRcZjeJdalzDAm zH|D9u>_NW!sZagGd-lctu6Zt&UR&o-$_#~q*ncD6i4~qZz&hvncZ_e?1lj-FUg$h7 z&e59xIo5REWc*YA0v0*S4oErmp1XKI#RAgD1$=Vr0|Y&2(;+kvM01}3@Rv7#7k=Ug zZlHb8AOP%(>beVGEAzH__myWV->|#+g`wj%FOMpoYS+~TNX-DcHruej#+Lw37NzXW zo3Rf-RYI3jjCq0cycip}Td`9k6{Gd#iT1M)twv#Mf(Tad;&$&{Uj6!e4qY^XRIyi? zUtHlAfG)Sy@d}wg(FFQAw?4E`fYFDlvGC9}{U}8}U9iV2y3|KfUt)wpQdqyZ{(T?! ze;8kS9{JOQzd{~`EF!&x_m4`MKPsV)XvZKQufG?fxjAzT-N&WZ;HN0G!1WSm27}_f zWlrQR)wTDCM?H6gY;l7+?Gz#Lc*+8e4xZP#Bd%MuaFyRmnTHD!2*m#+O;`w-IA;3P z7s}6DiDY#Vp&VC0jj(-mhFbFo*)^eUM=@U))4StZbBc9X^y>yP|B6HyhTsX^C>y3+ zd6+-*x%@J(!#j!dAIk!h_*{UshyN4L_%|Ls*x;{?5A+-3-wakL&}HcqG8CjXivz>~ z?!v9|0W$Yb@v3vIY3yPDLc9UWW?U=r5#GQ}_z+I&&td%V8a_V#J?zFBHqjW?5uyV{ z29L&fVW9ocAOP%(oNG~Vq7af*o}vn-h3{2suc52KTV=(X2P{IM<*bsaK65_IuWaM* zAqn<%*9HMv&VrTP7Y3&Zdt%XA{CZ@a4G2cuwb8&X(uGfL4r-rJ2L+8b(3_!10E!oU zm74>FuJ-`la0v*`dzWqKH&rNy)=W%9`q0VczTz~uRn`Vu^!aequpKo5J;wpIkt1Mv z&R13P=^K+z&;$^{2DRi>b_DMq{}HT;JMh85pMz6~x{~=pb-Zfk@81n$qgNR)PnZEy zcaDx=R&1bH(jEdEZxK(x$xO<9;NUf7xHQs?9eHj#7XlD6a6P8lp5?zp7J3iK+WA%3Fd1bVrCFl~)Wk>3e~N$S*g-d9J7v?L z;{7&RjW8>ps#Te>3J$tBYSJERWCFWY&|Q?nc9>nrK&fu>3s}Ib^#iaz3YP4{49o25 zpA}~G;hTrPNLZ^~I)mC6+BFx{=}(8x3XoED^C`@~HuLd=`9H;j%zaKyKZV2eOBl~S zhg%b95r)P&uH5Ya_p(WuqB_MXRIXaH{{z;rT{X_uy^TAY4Y z(}0q70t}t@!ZLatDa0y7=wFz`PdDGAANQ3z=;}(pRozs>b0~cz(8TR`IFpvq4(rB2 zFG^AH-3kPX2JFKLa2NBp+P_uJpGL|}t<-0Z$MTyrY+A!7&}}}{`0YHh^C^rPvCXTg zI%Xt*4&A_Z=E)y>9!O#IQEa-{cT4I7_f1n6ZD8Bf5W2=uFYaU$oE+e9WU{M*1y!BV z&PY&;qJYtP0qJbSc6lNbK3JhJR+WY5->mC01dk%cC9+yV1EwM%o9F=z%hOK=@@gMG zSBVDgjc3b^2ksLRLgJ`fPl7gnG$+Inq84T1_4mBoc%uN-kog+;y(k6pTgm?;@ea_p zeC*pMmQTH)^A|X^VwhbcrjQ;%O_2row{h$=xJhTQi8HA44(Rq&qpqcRF8$X6c6uq!2Fwo1RK>*kn^)Y_CFl!mBP=|hVjpk+Qu$o-~t>O*P z@?au$La(3;{}OCTj(?PG?^>a1BJq+2n=!~{8FJ7%8qDN)W;(7?hNW9b-cTbR73I9X4sKDosH8S z^(t9A`RhQ>np$3(K}Z~#e71Dn44~QZ__g4FWGu*+OP^mLp?w&9>Rs?!dA(8QT?s>H z_FVy|*^Th^Ni+O5kGVZcT(m;0z{l(J`=hXZ4DJ4U0KEGiBLq3PYf83+EO{j$7nv3|D;Hb6hWRKdYI*(;;BQ9#ZdQwMbG9H!;~50^rF@LCzW zYT4@P7k0w>|He{@h85T)AcbyRx1nh`+%Q^^dSb?G%fn~@%X&}?+=x3 z*YjQGiwnyeq0|cp;zy@GZ}eGqLVP*lSNCATh(xLTE{H@&4{U@iK6P+Vr?A>M z5B`;+9n|uFEeU~QFCxU!ZxRW3V<6q@kKgDe+WUV6v+_%LeEAbNPfuVqo}wTyf(kWw za_GC5-GpKpW4RkBlm0bCf&%E$6Y4ueci=Cfyr^JWzDj?cfh-LIz`n?d7GasTMT$ct zK-W^s3lz#%MLje#M?oFRi!G`Trd?fmsEk6(WOv*|rUSa;oi8rMjDfW2cHOr??4jH$RocsI);GcWk@9ej$%i%l&Xa&f+ z{Z86{h~Sr1z|*B`URa>VOw6Cc)-DRRxxWcSk_~y=V}IS`$nS@jERd-ovt_oNdKO%X zvjGLkMTi(ouJJQXkq5`fjFG{Q5@cowpqJ_d$M&>ZZ16dG%5PHCka28IQlAGPTzp3` zM@W4Q`6}`;`mK1(VU@Lq@(ZAz#n))NrznM)LV2=Cs54~FNW}zgHPwp1fVC_E#Nbu)?2~kzSLZtm)$3wymFo~sQ(mKH?*iJb zd@V!Bp>-;^XakY%*`rE*VcH`hz$f?FaD4Mt+!=LXC52R~Q0RLDt(!VEEa`kZ`xC#3 zv`fNr=9mgYRy$uoD-03oK5k~`lpW(5dg&5 z5oV8IwmQW7E4=HRlR+Zp%kp=GtPu6&dy)zM~>EKyv@D$iCq&mM1B zOssUZ$?)R6GKEo$=s<}A!iu963Na{dV4q~| z@fs?wZ-^qlb^#}{LVzyXRBj_>!##M^{NCbZn!AvS2Lo10WH`4tAUS*8_%cjWu*@0G4_&;>Tr})S)a>8DtL}N99E?k4( z$s2t#X76*KmKG0x8f`bPDwZNe)sAi{fMXL+*;@+nT3}6|`~gS^AOP!vdGiv|o;R8Ikk@T*E6*Ou&Yt4T-@tS&;r|mh zZ$%?ww^I}XmR^)&Eqd+iqYQh*VpFu~Cr9$aUR3PV>GKI}d>ElaW}c#u7o&E)Su%uA z%sBJRoG}S9AQTm{<@FNA)d*1=2YHnFV29dk@SO6u^2~c934tnqFCb7qQQ<{`T;9~N zw3P`cn0G{5&HZ-(pW!UMg8SB7tFaJ&cuw;%Ie8jU&>Iy5l17Q_2%MzplgT-f>n^e} zTo-Sl5}iSfTHsxR{cSqjH^m2_5mv;%g%V%oW8Tp)n!sciJc0hN0X1%VW9!527c zk2~{C-=MgLf%Zg$0I*N8wpo1}RC}{d?#i6QXflf+(05fFtd}aPcyE2Ohooo@7>^M}Ks|a>i$*Td0m`~JG)#`IJG9&7Bx4DSd~e9mWMM$B)$iin>+AU z{Tr;|W6*^wd_x9$^)v_ouM_QZim#xB@)hPMvfedT`?HK*{Q^MFEp45`{3*V8soK5R z5S9q(uPM*}hP5GINn|?dptV!?-GpWKiaYlu?s?q>fB$Q^H{6O>d+q?n58UEsF4YTV6!I((yEChyf+k2JT_u zBJ<_}-rQFgg-9NE3pqxz{Bxq7R*-44_|ZL0u(nggI!;k6m;vqZcb2{dv;18+ga>f! zlK^czV?RK9|Ks(~;8FD!tjCAmub@Pm(FPGBH#>zdRzJaenD~f-#0wt-?VAPxVBZw_ zj#;uuvMQH~2q>~{QR7en)rdRUs=YBIXdR?+6ba{T7r3ug6H8v@HwVx%y)|^B0Rkq~ zq32=jZyFk)WDV=C=bUhHt5vG^zCVU7qPpUo}@c%3r8>CS~d zfWDHZ^(vTLI!+>#CTO)mri|~}CM%78&1rMI z&p(<3l3B$9p5IOw&#q9csGWBJWFUu`^avse%54Pz#sJ8@FBU%q5&<}I54Y7u0MsVr zrxaYG?syEd){uJ>2W9jp5oQjX=?K=z6tcv@b%{(qnir1GL{@wp?>IKiX_?mckSVaG4?7uX9QM!@KxV*8F%m_Gx;Y2jbao zr~CVr0@)K)VxzAlM?mGR{2;}qtxmA19Kq|{n?DGO-jh8{~ zjR{K;RyL!^?<%lKM+osF(t*bN4Vopcu8)wRKZGOrt#>B80l$Q4`3SyT{0N?mZ$X6S z07^Anp(MFDJ%$Y;Ba8JRyyX)IJ%WMuM}q*cPqK)5sQeLG_}2Q6SxaRymeXCf^^vYzE@mpI#30=<8Zg|o<9E6@`-&Rrtq>uE0gzolF6Oi0y$Z2$}tHHkCDk=WjA1xqg}W>fTQvn zezp8v_}Q($gmJclX3l7geJmYJBtjr&`?$ArzYcx^9+{vd2dKASRzA5+SusSNURR!h zaXR0c?eiOx?LO^Hkxg^VeVQ8GqhV_7z_{_I6SUiT}g8%A9=ZhV?DSl_!sjEV#P!d0^I>H_b5Z;g@&vVg>pTHyVc*}s__NZwn8D`pTTu;10G&}A6Cf;l+&@FrZu4m zqkE8D&*A;}5C+;04FbTvDAc%A=~m{hi?4Oo(qoDmC?C-zLA186MB~y>ea#X`-}TKV zx`BU_g17&@v>npj`iSYzpk?|hU0A07T|fXxVzL;yW#$(8CsL0xJr2+h?O3j>l$hfx zjFHz@;%&h&iDZjijx6`hT-B|$#@hb@wsSTCbl`t&hN_M%AYtYr@w!R^4QdfSY2Tcp zm_b5wtd3DJ-oS6Jehg=;oABw)Q@96T3iHRmE3_{sk+(dLH?-&dn7!-Cj!tQDFRC_U zU~DChS4}t|2*_{ulJtnAqvP0r zpCXK3Z*tiYJMpQ25)ZetIfq`&%_alRvln|7TYI4)67vB+Jl(Oc_6dSV!t7Zn;E~d8 zgZM#560*k$co`y0{Ji2MRJ=KG;>CnD?Q0;o!3N)Ve)MW=sEvr~eCC1#K7nKS-1{yp zF7Ltp_=j*lz3K0t?xgba& z+`qbqW`r0nZXAgH94lR|y``DL-w2Fe61&Sb2wsd)rV%NG7-lmk_lN@%qJq3O&RO5i zJ)?}l$zT*djV@`t6Yn=ODw!oS75psL_^jq+^1w19)bghjm@G57|H`}Vv1?#1A$*a9 z0$xJYgwf_uH*J>U9gqPB4UR;EhsHk7miekd2h_oju?v2mOGzxn8U7Lv^K+sf-UyjR z&I~v^0B0+VfV2PUwn#d|OIbKbyMMR5g82F;a24G`W_|!g5;I~#yC1?SJf`%()gj!4 zU*X+7!qwvotod{XIT+4f`37?$&2!5sCga{C1seXQ>45$OY%w3pAL$H@5S-i#1M8+bCEOBh{&!U96WCGQYlffFW`_+&P5 znIIy7Ah&wF@0(;AJG|kzj{HWsY+H|{@2+vN%e{4djZpsvU)3?BWbR1m9jipJ7KDbv zYbpE>k&b8)`Ov_PXSD^?!mOET$HJs5f$>4k=|(ziug`tVed)FQ$fF1v8=Q6ofLfAq zajZX2j2bwJaqh3@cUaHY-g%K{0J$NOQ(+{+2XASl@*(dI0H790$^!8@98}kEc6Apn zX2+0C(M*C;VnG`u!4a&hV_4;LxLte#C-7UJU62w7r6?RcTsv4!rieg|yqm~C`=KEe zbKlftZj(o$Idm%M3IVFoE8K5+K?U9D0a}dc_hQUpeh=~U6I`4>g~k-yaa5L!1JkkZ(wl3!X&Ccw>Az|3&w^~*vgJdvCTUPqX{&G3Q)s?{!Y*eGO1m`Kofw`|_R4bN1QI+H0>l=9rzU{N0XA zECFp65wc>Hf4sSEWKuH6fhzy#hVkCA>TeV`&)?a$SMDD{Mnq0L!FkE$BKEO;PNV3O zCdvCS+&fxSBd`KH6mt4)+%zl zZD)QjjNf=|iumwxct=3v^aLC2VxitK`>-wrSDzi=yIj|$+RpX27XMwqjnBJASNU&K z`P+|Evb9a{(Z}OTJGJB5VV}QSQ~xHK+>I4!Z{F>OJHR0xLNiVJ{cK-y>yS|R<$d`1 zyD*@loKTkK^o7}+{`#ALfQoiPd+8O7|5yVGSb1}`VzD~a4;A*5I`w{L1_DA%Lt#Xz zIoZZg6U`P7c%F-(FXBVbA*7t~ljS|qP zU^l9N^VS8o|)^Qz#)b`-a0+k_YWEfOCg$gi0C20E`uN*&6q-@2*semuc zN5}AhtY`#q)WLn#z%{@ipeZxVn_bu#9{@JI1rYE$jq5pmxcD5GP9iV2BOU@Z(rFwA@bR}J zn#4=pI94w*l~5;PBoW`;vK19ni=W#n8N&?lb%;Qr3^2Pelp61hdq6|?I$SG;LE7qe zk~G(diVsYzeq$8A4e*OaC09nB2R$nwm(sHYYSFXkXUs%s^-SecBBAR;<1DZi|4giHxO#)kyi$p^m>BIL;#6 zn|Ta5X}jnKL(~R*@v642HF#{v;m4Wbc3ZOnM-*o?JjzgJtH^Y2D^=ld7xv>gKwi_U z(u9HA)HYkS=(%Rscc8chc%B!e$Ck==^+NYXu(Thu|Lwn9=l8}i0D(z9_!P>2J4s=!1bXgzM8R-8xEW7)YQ~JJp zf1f1b8N%hJfn?jPXuk7!cMEk@d41 z1upsc<|JhbcG{@mCZ@oSW0jg(1f5}4Y?Z&*)LL-v(RMF`-IStrOS3$qWvy*^Y~df~ zF-oJbNs{A~Zr2t&ks11^x4Qe&G7RJN@^_Isb z?eJ#ys_RpE_1L0neR|vb-;!lrqT>~LYyoaV~t_!zXhY&MUB`S z)BH-ZR#w>|ypR>xfF&B{k$gfg7%;$;aCJO&FeqEni7bMkUK;sL;INoR8Lt?w{Q zH2|=!)ICtcO7AZ43N0MwCePpa8s+&;v>|)J6n`oHMoRJYU4;q~g!Z@jfBfLHhGzvf zl=2e*f+Y0vwW_HWjifmPr{D*AT2>2W>5%K!9ttyNpplo7n-bIHzM-_l;Aums2W^TvUf(&vkAF zKn;&~h`xTY4=>Xp?If4-l{EMeJ9ocu`)vY%keEB~9hiC-O*CXy zG>-DO>4|Hz?>M39I*=B@rC7_gq`{G7^Rx2LOeZ}%^tR8Qjq&KnP2{shd=wazCTe0R z{!>eYeq?53B49&{`tZ2rP6mOkB9M}e2XKLePK_Mzj45=GA%{FNnQwW9u6FK2F+kOf2)j41UJ`emsA0A+Pabk2c8)ERjQT6 z`kn81aRVS+`rj^h0c~bISmuLeOoPU?kCN*eaWf~n8;)uB?V9V%+;B=+K%clsPWYVn zI{H|V>V7WcWKY$6zcZ(?C>~PY?h0G=VEUmL`M zo~Qg5a5U7hxEh#r*H*_dW_d%SQygcE=VWA>Wmtxxj*R*16kW;J4{W;jMXri)~XEf~lZltdT}e12L!qGh^IUT#M`0JtsT zXz6OKzt<)VpZ)uFZm3%B#upi1ZLO3iSAkEI{6PwWT2N$OZ3Z~Lg-;xsM? zYzzFfG?W77ZKh`XxgL)fqjBIYth^l*0WIjeL)>BvuGwt0ple3EL1JcXu37O`;aiK( zcIw#{3o=~gkL_ly#&9qO8+`)n-=*x`%L(ba3n1M5oC%$H!_DOE$8?|M_<;8cHh_1f zv)e3N(Ea3HaksClJ(@SWw3l6gAwM^Y(+2UG9oZpcEPBQ4QYI;ctVGiq>Y&J}?6elX zin;@;N-G>Ct5}O5CC1;+&3o7dmODX$QjjMY7=XMRj=OBdRnVCT1d^b<+Jq&>n(wj( zP2HxFw%1=fH4e#R7=c6?I3^P6jbIA()!SU2{QZU% zw^d;JU~NVb+F$_&9c(h$q5!+j->kfrG~@&_TA!=+)<69W7Us0648POmCjY-{prf%Hd8mud+X2;3&C|i^iASM__tf9vMue_?=IyZZ0*N6>?N!; zK9^a%q^PUuaIE0r3; zNeOFM>;S*Xg7rS;WCkU^Bu%Sh0K*|M?1wHR4IT_F2rwrv;|Fz@1`?!~;@+*v*0~Q1 z$*s0?Q`D5WoN4RjYNMP}m3fktp)kuty!)`2S(p zYdM>kG=(pb@5M5=D#;ko(HJWJ>G#-Ou!o$NhCpv^EBW{po@0G?xapm+ z7`84!LRui``81LnJIcRj(n;X!z+>;zMe`C^ffs3=0b~RjCCL?~sbUvF< zy*>fabwyroPdos)H8Ck)Yz>8(0)Wok4yN@b{cp$UAKsQ9HJCaPTm7u;83ZKiD{k%T zZMy(jYu-?%y^LuH^{;h*;vTRb%gTJm_5t8+X8N7Z?#IRz*b=!deP@fSV69cYt)RCV z02}ddWn1ZoTl;+8F}Di%r(2-vllcE#AHPc`Y$@?;ViQozc1-gJTc25}LGiBP$d55c zkFz(#9sdhYe-!L^q5*)TQ%aetmm%wJF6%qG;XMHYop_^SxDC2hD9SbLz2>c`L@ATo z00^u`V#%}eFWQQ<;vK%zfOKBOnzKK1#-7Iy>{`gx6jSa^4^>~ObsHFJ+ukdwkPk53 z+3e$0Ik_i zWv*N!Bs9dd71zPAO>Vw-WxV`aZBc~tq|mVb`U;zP-x=(3DP`4#PeR$9cnG#^c|bj1=x=;e0A z1AtqTEn2uW)UnhDNUeEeQvHGovuk`IBX^Zz*rEMQD`?rk&c%GK1 zoc-AETVO!WK0fQp|E7SxEgt-uSTGfCZEJx*{G9L6bN1=(Bce?f;07Q6UZ@oJCl%L% z?`}A3@DZN}I^FuuY3tOm{gXAj(04@bq|pLY|NFAZynH~H)l32aC&`@tN3Z@ZJ)Y3! z-4I!C!GH@2Zb}{j07zyX#mkP?-B2`0!{)S7K9>)Y7PW0`RHRi|s!R(Gi31Rb;j#)i zrI4Q+6WJdw8o|rS?nD)O$3cOm8KTa>Usj9o>zDAZGibnZ>Pidvs>0V2!7bTJd5XGP z$9mSpKl|>W%!QGwU?hXsV-62Sj;O_43 z?u!%L-QjWf-TMtQJyYFPU4@Oul(DkU0f>FlHjcOs9=K|>g(H;CCh?Y|n{%340brby zf%$PDI{hTy$kVY68cCJl;4UEROg;@^6wl4ryra$Y=U;3oR5}qSE;?vlG0xAxZ&~1R zohb3dLQE~Obr^f?4_sIN<5=iGC7_fIwUFZsu)k0z{;4)AOTAi5XeOn$PAVL`RdoeI z*Sz~nmu?~64RU*wMUA82%-QCfyh|n4UjDLHZTQ1>X~8ySifLfYDY}tgfbrYL6w{k_ z&w`+KhE5Cj3)W6cJB!~8#3*WGB*X9^@;h(aAI=agfAPr`Y`w*s9?{0uvir@n5X%## zG_h^0!T{Z8wQA0VM&hrMyJG+ybzL?rr(_WfeKRhu{Wqq+mztk{m;H)oZ^epeAk!xN z#$s0XW@*#bx+m1k&bM|Pti*VNnZ`x%mKgykzi5e>3=hPB;-EF26wf^nIRQoo^prTV z;B*Q|xS-V~iPfGuIZHAKcEQ!5)WQ07x^9%pR_W3G>|D7=6uj|DHe?ks3b@fSgd#8m z)%6$|bHO1ol_?vub}=zs@{2Hk9#u`vmbfO;*cAlei1|Yn-Z=hMnukxXq+Cl~LPG!C zOh}BUTO7ptN)Uj?7b~Y{AAq}C(biS9B{XvMG26Qw|GoHAeW8~D8%06ix_DLIeJx%d zGjpz?5^P=Ztvoh*&Ia4Q8SND7npHfHNT$EO;iEAAlDF)4oAh`s8+CQgn5j$mgXE7# zrB?yHhf$s#E7w?HIqoL{SQgnDH&70E=ssBqQ$6Fj4L`FjC#@}f7C1b0mfO`5bX|{` z-k>adabf-B(n_d5ETbJJK?}ox`p%#DbatR~#~#wrI;f9<77t{R{d(xdfI5S9ly8dO zwRY7*lOI}W6pv2|E%7X(*)5f|%bg^)oH8(_XnLE+e^Q?(XHBmj6;#X5_}t-BG`bT=H5$4=hq5`Fn_e%v0g-%^w8W0~vh$NhB65;ZvtcI` z_Aa44MOJRr)wP{5P34)jm1vF-pU_l;r&ruFBHETjOQBe_r?%8g&1qO{iqUN zf@nn$FSopBIvs~(D=(rj-(Z=KA*)G*mE+f=gwQEIKI7&5b_TU&<6g8cR=pBQy?+(p zKWta}jfMJVgLoYNXa3uaV~Ys!Y8qcWZ+RuO`+v&A20`5*uB=5g;@-JoMYEL7F{5~+ zlQ2CoPdwsI@`OZSXY;o$FYTIRK7U#Q(lVh zTQ29`uduGX=~`w?(?ovyYWGE_Ml>^YE2Hc27Nh)sxm-65uCM^vdEZXn;vaV9!@q$5 zsg_>a^x}X9+DL+8c(dM3E$}aQ7#Pg5EjLmN6hy{C?YSQ3e6KIzI8}q`1EP({Uv1U4 z`T?V=grRBwGVZ>w+$x+4H61OmX$xfzauxn4?gv|QZ%XSN=;fAIs!=#UuJCa-VB0a2 z`?K+qdixjIGjz_z4(y`gbd*ERX(3bK5Cz(Y5Gomaie&y)HVjN>TtwRGp*J}e2S?+} z7z)E`oT^?W{M?ZJ9jTYMyQR#(FQ<5i+~yf!{Eayd3Ug*?b?wHvE*%nt6VV1%S{D9> z(O;w-8jKA(;_4prT~osE6cAyFXLy&k`(zr^P$?uYba`~&1T3(0F7DIg+g7990rplH zC0BN38=ceYKW>rghtRBoDi-FGl|jOdQg5mtn04Wt6b&}2VlB2B1I=Aq2Cv47ZxWCd zDc`m(?-gu1^oP=UbbxnZWpsV|0>*wB!U9hX=O zkBSgedcXdL-SB4#9f+g3NE)-Ethc#o*EnS;%<0cfwNhLZmLIaZZ~N4N1W<5e`@PfW zrVXRxO%8XmLstB^dn+grks)e;*C835frNy9#}6an+z!_TzFM{P_3vee z260)72iSZjvK~Jh0tX(8QNo?cd=`<@g8EDv^Oa+HT((+b6z4>-9V&WLMCVXji9GDz z$bz#>XF#WZ!R)penCl$W#Bd4NxHr*o0C&H#&iLQaD- zrCj!6qtfXDRTa<}J_G_TP_^#4m^3`rnRs_%CUqWn*Cq2$Q>|@GQPnc%_)j!yV$&xd zHHNRhol-1Jq(^j zOd~X_;DUk>g$c}q?MU&%+CM}OPrG#D?C5KxowAiAnNzJP8DVCYA}XeMk1b7OWEIR> zF5;BDaQ1WyE+<}-#Q{MAX`D(7ay7;preD%FiAHYI(%$|QXKC5o64VM}Yq!S#tgAs2 zwSwU?hhNL^S{xs==M6k^O%=fg3F+h;x5%JYrQjCzGuJ#}ZE*elJT$p(*U_;IJB*>Y z$O?!n|im-8Xer@!-~5eujbvI~7har5}>?1zGvyWlfDd&R*#C9sp9s5bWiXm|NV zs{f8kgd;TAe%2T>Y)Xp^5ub}i;VVNiu%ID_VB51+^}QuYmIvrO5nw677$D}x3(ujd zBL6e00v(6SZ8Bl{5eV(&GE!V2qqu%f{7f*YPgmZMi;)l2qPa8METEfz$ z4*zHq79mZ9Wx0=sr{!}UubnH+xp>uGr8!pn*NvUZ&EiohNjL2W@y<5M7?&^~B~r53aP zjbm6Rx;##y0(yWSo`%$K-ddqU>LgPbdkQrx>_~@yu8{;wEm_k-77*19trAEMA1QSO zrSwhaIJCy`b-{H^rj4!x@o@vLko~nG$DLuLMa4NMyY)B?9utfe|6A(=e`NV6!1|+v zN3zTTA8NvK=AyHFT}NRlh3mie2*_Gfh9$F6?O5DG=A#jw>B5y+Ln^!$0x_oxX@6){ zuO*Fv95i9oiL0^&_>^K|x0W)LOVQc24!|Tu2?8tq9el}Vcm*8uoGhN4pMr@Qeihle zQaJ?2Dh6WB!Msq;9te%1h<=`!%F`FV(tq^`|0=MTSDIS^0uaD*qNRAW2xBX>BY6b& zEu>Q>trCAnz1WT?D8hAz{Yc0tH^1y_&KR|nv_Z-r4MpzAjXACGbNk${!&d7${rSx^ zA#()Td8na=ogBpW@SBh_hU~%hGBoowAcW2z< zPvm~l&{q_;>>48fwIXJoaa;fvS~qlCjOr0FREqZh2C89oca*mhHA4w|Q)3yl{S(Ur zN{ewno_BJE{WX`$e`6E4bw>s>GA>lwG*&-XpZh6^&Dys6F7&J3rK>GnG}A$tL68|P z2*2H!&dNL09+|ysoUQ9qZD0@e*JrN;Yo3fsudlFBPVip#9hj+Gh^yyu;y1N$?IneY z6iz&*JqR0}MNO2@^c}WR63Z}@)7b649?0sTq0R6$8QhlMlIB06hJ*3=64P(v z*%sXmEC?1DBGVIu zv+|YmuVLSOC{kLs*;+B^yWs~BCB3#B+8BPZ=_uD?&gQNaK5i>`FXPi3i-IK#jdn2& z;R#qf2?!7YD2UB2wsAg9JU{PU^`U_nqP5BS2#9$wlQ)7#u zcUPpxrkJuQ+s?x~KefU>4kU+!Ch3F^Ut&s!;>S}TYd>+e$o$*(^?#t^Oq<4}ch@mC z>D=kdt#hU24T|oC9NU%pQGkX+ft2xu@xE^szY>ut&MuquBn9&>hSkG2{%427{RtIU z^yC|#4;uf7H_rqryG!N!!9$1O52{|gg(utZv-E$bG@2{gwIbTrC3idL5yMl`RqGMS z;$NAgX2Jj=pRttR9qc+NImfiRcRF|jJV(Y%#ByH5TUg^O-|Y%DQ_ZXL_i z@_FzmntU-{)WOvzSRhibcks$t`dvN1-KoqfJ^YnM0duewCRuc0i zcfU%y+>m=kpx*9!u%pu7E8Ql<1}~RnbU?0d5BV{jmnt&`>2~a&c@9+M-!~$TEP@oe zsUc*c&kAoQ0nb1+Gqpe4^?ygFfx48fDiqaB60(SNFgjS-;CZsqOlsr519r>S%x`m6OMcgOdd}%HvF%B>X8v+IDIkXs;=C4VYf)<--@0Mb0tpB(UkV1MtH%0d z6TPnYwNr4Sg3Yg$bd3Tz^k9{Ia((m6V1bO;1dZb}OuLo1Gm59at4KYt6h zn|+q9g6T(^fwQ9!2A^?R#|)zwLA1>fqIe$WN-@^a8H$t>1}@cejigcJwa=9ZlCWg4 z@j|{VWt!03Ia{1rm<_q8-Rk&-_F~PwEmEmxX4sg~UnC{gAZ#^G2+M@X8!X2F#p6|a z?LkDm1Ur`}=IywO>(S=b88dk;Jqu>`mTh!#fD_-LK8%L7$1;6AB&d0e)S~?GIaAVP zJ=}`}>_I}c_Kx$J7m+mmS#=!bA#rr`OlU7JUGbg;L_DeUxu$TCdN+&@;z~knhYZgv zfB$hp6t?iBi#u`lI>Ck!S@3H>W+V^4)t#Q{bo@4LAra2|qj`*Lt`k8e(k11OTw^zx zluHtiX5tU*))07Iu#{p)7-f%@%-+id&0|~los3s+=ewWa;NPZ*`$-uC{Z%Q%S<`y2f<+ElBLX=02nXNqyD^3i{qldfyI$vpi6TsT-5$WCg83 zX420gSCciUJ=hTNIvAX7I^IHRr6UpL)!%J{fHH3C`>n=i8STeK`gvn;lkKN4Ohw$w6`UUQw_ak%$h58XG0nMDxGwTnI{y?1xWih2^-3p1tq5uTr z;jd`$OyBntq3&`P0#1AyZ`9=3hB_1rm^KCLTWNRPfy6Ow1f=Y*^b23STfl@lMV>3# zIT8%hhq|Q;jM7qYdBrtaX9eu+gi71w5*N3e^5*TS(=6VS*Zj6)*itUtWKv9W1~3;Z zz)uWa|LC)s3j2ZPC-=;MT@7m9egp@)<=8|wmoeffzA z9h;&0GqH8T0fkTnhn%Gv@zXLv*cqGoP!#SIfj`ltU@zMKwY-JEO5x}p{Or9dPp-0e zkI-hkHH^q&L>}J`>&y_PZFA(M=Ac2~CMqC265M5EJE5XK#EH8M#MYR^Xo7JK4>&pu zEtz5kG*bR&ifvz|VnO?KX|#+&$0%qRX0rsfWh7)$QF@jC6_)^R&v=2XK||Kyt>Mth z)v#L2aL@WUnXMkH*EMg+W|#xM`rqGD_xX7IGQ0E!iMrocgIU#fElzI@&&cKpq>az@ z&(4FBv>sNs5Mxc)0hczy>~4I*mocoEp)6+BTH1C;_RQ1{>OqQj9nTpTEFHXTT5GR=&12IEE|5WQfGk4 z@*IdHts~gaI*}x6sYj!fPa_E*gMU%TdI^aOelM|}y3VO1VuM7X%1d4c-6&l`LF2Cq z2xED#1N5trmWu88Y?l8CFsKU}iYcgaz^;I9Klaz9{%uH8XDZ2!QY0xcw;M%sfu@dWUH!|?sS0GL z__Ks!#b+fIFp)fTA=1;wmp6L#S(j~430M;#ZITF9)y$g33ZC>1cgS3Yql=vtb_r<4 zjr$)Ce0bc_+wZ9q|CwPvl72Zdisfe`utN(z!HAuC&BQ@MEZ=4hS5yiqhdHMGky2+| zO}X#hy#LMOPaWYR?~rWrsm-u!Vu$M6Pd)DEoPwO$9O593tz^I^uTdflO# z{Tj8Jhjl9^5ggA)oUZSzRFaN4D|h78yJ;AIo>%&5$qA~zRSoxoAR3afd_`-52Eed~ zO1wn2kGEfRR`>-gk$1?NN&R^k?q>ZcD>q`B#O3p|x3njpZ+IqA`UiI3Jr75AD=fZa zF7wfd{zN}mq$H(_i(Q%N8V+E@9+EcS14+)k?7hla;>hm1yBLz;%Dp08TL1=pMWPBLsu>laSL>u3NI|iCYJ%)G{Wz z1g$!R_2hjOfG9Aaf>kJGMSpWV=VxYHK($lg%*LfOJ1 zIy&q$H&K1xv7dH{i6C52=^}@Xw-zh1j z^YyA)ptVk;sHkw#ZB~VXZy$3VJ)xE|YxyLY!p=57P$?be)M66%yW<$p(!#mlxTsWAbkxoSu z3GliN-L#S$(fh}$feqznD;gJV^C1fFPFmw`*;6F59?ldgsv#MwOg(f5XLWIrnP$_{ z?kX`kcYh?03}~K9CBHzG)pz0_acay~ccH5{x8{2^_TS#a?F}@dD%7h2u|u5;T!owJ z(V_uOUHit7V}S!6(OYo6=%52(;YA&Ff6bV@1eQ*^qIVbH!1vCu@@BAnwV}Yl?Sc39 zN9HXzIO`qyEYQOX**b(bIpCM3zNAwv-ya1M*`d+XP`HnWvu(u@Jxe1bN9(*|p5i!z zxu5*6ySriHL%UXbd6fm#)QbIZTj&A@Y8UNS&Z0?n+|w`VX*Skd*=e?mSMNo5f$2(* zIw*M4*R!vyr@99JY!|1lp^$aaO&aqFC!koQ;Y`$Qvfdj30B?+#C_?Ci7WnTX1kNIS zmf!s4l#_kXalf6uL3u_VG7q@;oSvY~wk;>wf|>;q|s`WReEpx(ngfe!;IJGWZ5GsB8*w7?VCi-R(}Tz=2apq^^3; z!t>4f41rye9j`s~QzYd|oxS6$I}HwT2OI1(Xf=`bHg1L2G&Zx=wzk58Fd~-)+EGnj zd6ILCdFV(a)d2cG@P8itjx^FqAgLXX?hZVW!WMKzie#c9rCdeY{LJe}5KYRRjcTmC zg;j8jQ&B)Pnr;XCQ7``)+!o%cifaxhJo1gyIV?7 z%vE$kOkn=tLR}~tbiKYces93`bnD%R*ha@dviSE;eVY5IB4EV37w&EJ0V&34Dq#)} zZS5(G0WTfHAB}FpN%QbbW1|;D)X9%?oa)!1eELkX~U5vYXAe`CLIJJ6STZrAGkn`6d{RR~{pU%Q3*ychxwF!;$ z#x09;f5_%8xi;aCtcLIS)c_nFI}87%C5>oGwOQi%mZaewAkoC;>}!%(XBy^=WwXXX zdCmz1;EcFIZj{`Trmja=VbEaWLql2qE}EW26JanJ=!GEwGw2X-pS`~L?R!0`avT#< z@1f6#FSfTn>xUm{XmY;_&--|&@%Lmx^u=3&OEa_sbzn|3v%KElh|3(`A&S!>X=0(Svp z#|>f~K4%M^q`VM8G%iiqnUIF*aUuV5G_Ucq26|30YQhxcWg)3+UbkCg!FN~xEW3KX zNv9p7&SVZ_;zl7L-R;Crkm&G2$GE8uaV2ZhHRq&WzFSqO{(P%5y51Cx-b~H%qEZ(> zAQToR3m@G;8al#A{kBAh2L;^adW1CIkW@?!cGzv``0-m=*;JucN23X&r;X|D8>(Q$ z52#ZOsa}jKau|8TmP?BZD>KmE19JUacJe@2{+BF<#NOKnB3OdwLS>wbl+g&U&y zX7y6fu0nDKN0E>a)GLTJ0pzrI6hGxaD)r(z z=@WeuyxbBfi)IcRY8ZhT6bv`jnmZY9Q@+ZhUZ9Gi<}BI?)88SlKL3RWsoT|_6neFh zAkqZWzY<_%E%AKAmN8?*&T2i#%RgoB!NI%cnkROFFutIlX9hrb$@rKOVg6@Ilq-)< zQO|$_9SLOut%Nx+9${`g#^YM7(bGG6oe7WOWS*?!@vo(b) zGp#XkX~cfJ?)t@lo{ke~gEBOevg9>!cc)V@QEd%gzs`;4B>>3FyzV3n@ci`3xwF_j zf7iQy7L2mSBw&PEUAqu*WZo;*#}yT-YGN3&Kgas~gypm6ZWAB(>rkwaJb}_o7am#?_I7NTO|Tfn(n>5|&~vp!#IrR4qaxd+>v54_1FLYY9!GlPI~Qvw zMD$0=c(nHa(j3}KZZ}>yRyJ3&^&D|JFC@6g@l&TmeNTqJuq63+i4el6yAsSMZM#eOHLPpoJ^p&11!d~RHH>(`#wg@~2XoWYU#8K5Wi~j; zYdcvJZ){NDCU6&e(X+mT8rln}Wss~l&F1|}u7osiqvb{Msrtaq5`RW3SdOe7`cHj?;{xG;>PbJy5Pt`LyNpO>b>q`6$BI8(>Z&N$l$Hg}P&kthQ#V zGF@=)0b9W{{q5VNvs4>0b;V(;R*mP}vN7hoLoou|=Uo{wFodptcLb{jg9{nyUX00K zt5zl(&M5Z@be{VG>8VJsqEa?av3nkWZBq&q=fF`kf>wg_6PWB=^^mm3^PEJU| z!33|9ux@CXA9+5U-~NpvA-}#$n+eLPkK--S&)Ita&`*8EIe7o3G*3KR>s6xuyr5E9Ehi`PkJ6ZOP;PgrXPoqy_Qc{)RdvzokJu1A&}u(^ z%g?56)_k?P@u42kF27ehf*Hu`c0b~6{G}Go5|gi=)f2E{4@{~a!K{tpCpuKJ+;mfj z@=u)F`m#5(y$_>tKYPTiyJ^<{>8w`Q;$)aYGV`Z_re#a&>6B%4h{Qd-El@6`i27E<)3C0pb%y^CCg0n<0|Cil~`5;C*IDI=b^(_*yRiw&nqwW*k$}B1UY}gLf_1BoOmHnTVuedWz@s6k?vlc2vScsJgK;K5@^buR|P}r|(@a3Jj zrQII8ZJtW1f`^*ldIJi|i};gG08FWa4$QgMdi^!OV>I^Ec+RP9Mppw{-LN0z+R0y3 zda-iQcQLic2U$oY-Q)c(RosdM-()V0d1oAroHe*ut80U?y6|A{jW=Akul)93vQ!mC z6#iA0%ZlsMC*}8-4(Eb_b9IfI!L77_x|~dFVf~eN-j4`mCaKWbC zAp=^AouR>MtvvL-s}U6T_Ob+_h5Vqp_Lx5ju()zEyYEtoMidNz(9D@3g*eybc=7-cK&S;}OzTs&XiI*)QeY<>am(r!ZM- zRwpRMym5oxI%@@S>(tHi(=OXRjZP?SUo~E3OHMA>KuzdGko;(dlR7WC?;&t<^4Wbf z4;q@diXYjS)lNm;mo_SI^qfJO8p|EJ3)0(0pP%)z-`*DbHc(1y<*5HKjz!5Bqpw=G z2f(=7Jn@vR8h?#@z9xP9p*6?)8jZ4w$!smDE~O*{DO!n+vQ%xuNC&mNBpAR;`XhdPEs%W07Mi3*cq6`D=oetJb&R^j4}!CR3uDWzJ`eWs6uGB3wJQE-2Jeg1{UCAy?jhYtjFr2jDN_^mX!i~?X&Wh=1F z*i2kx~^fYjWoJTi$87hc#{TaBFY|(0?|s9|uOJhKqDT4ONbQ;)RcNGm=H2 z4#W-=6==4Ib6^vi>r}=T-2{dUm&hNjhEmXzQO%cE6wy6+jk zZSQJp0?w5y2zD^c>(0HMf7LTQxk&%L;aOCAa(x~T%>B69XD%&jx3XDwqq3TSvttRH z;})ocV5ipMq$z8kJ<%B#InONJs_!Ah2FG>wcOK=iU5%1NNP2y!oVM(-&T5 zc;LPo1h${BL;LRS0A(*e--Hpye2LFRXNPuEB^?qTnLQ`~n3=S$If^C$`KXAmruyFt z;U;LvAUk>vKgh6rtZMd3Rr4tQn8@uiiiEtVgO0qYh_w z#G&v;v2DX?rN=DU_ z*>Q299}yypWfrv-MlgHg6Vckx?(0p68~jw#!h+-Si&l3R5qD3wBHXE!0Dxfb+_VIH zcqL~1a`5u)>9*Pch*H+7J3E%1#ytROaB*D>!db>s^=8P!Z(D}*9e$DTkR0(tUlR{wTEwS>GuD_R@=A1sb z=OI-X!gh<#&dH?1=r&`WC;hi0N~5D768c*& zbyG)Lz`+n~r;8~*l2=wIYHQ!J>lOnhA#$<$B{ja#4k5gwDx!!zh;D_ZMGn( zpc_3j6u#yfAS7B0jopwNp7FFofU?4G18B$NdwGDn0e2%_HV%&ae20t`%{p=H ziH;&u&#$&jAkz(S%3d6U3>_Z4tDxqc^-fOdzsIv zy?oMJSBkJvtavNnbkft=v+yr38;Okmkjnz1XY|?DtK~M|ARK5@^YJrO8owVETXvBq z|8RB0ay;P`E`bx5B3F)HAN{mjYvj0b3kMk(3PxFCxY~=1J^XhqG@`n3)AYriOS;qg zU9F&e*-8A^19%d-AIjTQk%migKo_xafvh{F`sOorNclRjdoL}VTGwepwK_Twp>-(z z%Hs^}*0vsF;keRcIuFaO6(yeu%6C6d&(-@ ze7Bns%a`s9oECuqgHkS`h4p~p`#AmdNA$o6Kr)DpT<&*T4@m>%h%#wV2NQoGgqoIu z7MY4cwCfexf)^Z9DBBzr{3V~2%YX72im?#t$;W}{y|%QciG)=oV!Ryuh4%**DbtjAzi`PnP%aui#DeFpKV*b9v0`3o z=Ihvf+lx_!%{-A3)h^M*)KnW<6Ku5iAvYb^R<0PjoDzO16|wU45E<~O(b7Sa?E|kB z+qMmX@3Z;KMnsd!yQ_QOb?{QuE!)QFTrscr2C}ws4M47`P|-)oB7PS7ZL?)MmJDcgf@FL+Mb7uRry8Fga=iX>p)Q|fgKC44y6|OGf^wbn0*EqJ8$v% ztDn>Y8vA=FY?iz6HV{Njl1(*!Vi#3^mfUkn6fSBEr}QXp)G=w{m!tTH5x&azttI4B zL!|xBJ9a+06$B>MO78?j#XcSMeHfh$0-?=Tl9}pnY!S%nh5>o-QQky)n9CSti)2CY^Q}vuP;W5*hl3 zv_T@Pq<}H9R8X>5uaUObS3Yfc< zmg^`w@BUr=|MOj~x+mMC5v+9e&BGWpvPYzFUzT&f=O~7rIPJPt+{S|Pq%h?SDpo1& zcqt4v!lpXD!8yxqdq};d=e+0+Z2yfmblj=wJ4`eGx-KV`J_EnlvA0n3&~7OkyCIRW zW7hq&5#7Biw`ng7e(vbE-1E76w_^ghx|Oe=r6EBZLU|DT0XE+0@Nz%t&WGF>`U(lF z%;b$$;)0G!fkqN3OV@P-B><{|F?QVaeGhmJS{~$X*f|B3@~IscQtircD;TRJ24}er zI&SA;VpzeLk`W7BMgre6F{dR_M*jH$ES z0x1(!Xe%m`5Ok{y(65vpjgcts4W&ey{oeCAv_p&60F8|`wglHU#Rw;8vV-j~gF^Cm zBJoZ1_dmj#PDh(Fk+N$NT<9)@BTWveoV$8FaHwdu;o=(M0O;363q;QT8V^Y`0P*N0 z<50Iw8Wi@IXxOzJvOX6;U0K+#=k>wY2YaYDtM8Wtf_9RTU8?u7jMbg@#PSefk770nwWHFs^M!MhTRIo>QF%erZ4n+jniE z^{iVi%GPbI`2GfPl}L5@i%q~U_GN2NgCdW&e=3{}j;O1g=Xy{+=~EOSe%+4mFjyi` z0|&<`oiPE7@$|queY)B@cJr5Y0zohLcl<>1JryK-%6b_0jNhL&KNMgR;SpcE&ocnX z|K@ur{uPH?8kc8 zZa@XZfj~%f&RlT)m5A!Ix*}%WC{O2ZO4*Y9j6{%Z7Y@ruQ!1w5jU5@N3YrHNtY;Yh z-0NMav2J_-{@tgTdJ|iCP6V*s2&gl(C0+0*gFhg$Y;E9QhmbDBdjSyH2kp6*)9(n)2`YT{5uyDu#Nbw- zLI07W%G6>9Zgl@$QDRKb$xB8ckqQU&@y>`zvHJki7i)|-I^TF+Uvru3=!&;Xc|@KQ zX#HS;86>HTD-~Rv3k3W2^AGeZ70!*X7X(q5t-zp)08Ror*BZE^bR4k!5&1!bp6vFM zcyf^9Q^sQ#iWgqh1NS%Aix`^ub_VJUWxs1Pf(<(k>C3%vp`;-alts$f9Nyol6DDWw zf@05eRD|G>*)&681Pp0AJR>_%Eyh(}dOihz8fll#2ik#~y~6iRHRUZT+XJ3_i2pjw zZ#b5!*QzEK_jT^u--tQn`Z~G&z;YCSn|Rr)Q{BVBLH*3(GLY~B{vFyPS3v_92hZa z$@wjESI}aPlQ?Mc%d=qVb`1a$Db!jY#XJfsUChAlWQ9Q3e=}pL$1)yI zZY5Xx<07?Kc9KfLmsI?boK6+<2s{^KLr5W$jr2qyW-{dkeV=wC(yvyV|M}&qnN}}k zat1cs9mMOpo`!n8vPsRnOh&*^`S{9Vw83C%;&d~A)qs5)u+DD4a5c4h5pB)T<7!0% zWhO{zv$)mR{LpYNWMI8I<&2y6cJcsplzxOA5RVC}gqPjU>} z*u1WONbW8vmVq8=YSFzKfDaEubU*nW+*#&&knIB^yQug{h+Ji&y!ur*FMLByelqoCDzinJ>%UW5CPamr zTq#Z8YjO`ClYjnyiyOKadZ}yKWjz|EYSpY%*gJa`?YIo||mN*9Hc} zi2(m%O`?>EtLjYdSX<4f;@Zj?cJ5Q=HF!4l23_dA`_rPkeP3z?vB~LY*?b&78_;Nz z3=40%@&2mSbz{9s5D%JwPv5(1;ImD5zn-fGa>KC+gh6Og5NX_(hxI4Dlg5(?=T@4- zTmX6Kg)k)AJW*$A_EuyBl6Yk*idHyz(ESjcaVEsp5&g|Krb*TIuZ4G%Vt<)+(!WZv ze9Ny8+nt%vp}>Etxmu786Wc>;-1O1vJU58l-zg#0*j6()nx3ewsx0$2e;mjmQGc;T z;0T_^JL2!!^C3rMQAne(YIgk;C(?0UG@)@*k|q1M%j;u>BD8}#_c$)xFXja*kr?63 ze_&FRp`CnyWcA2y7LD8hi+8=O+Rm>c<$?RdRE9q@$vr8@powG95#{}l{%jY>q6e=&dpmWTe{q)}DJzdByh z^4r?uI95usYu^Q%E*E`YO511@f>R#RsT69NqbT{en<`h5tCIdT&=p7g*RSWY)__LR zbRVZUiiSTL!X}Uo$sLlzF9iYPR&||zGg^R+ku+e%-U`Q>jzrm7uuNTN>1)8&U`OY6 zj+K5M7cH|4w{97!GQqdYdrH;Y&;^ATqz7NLcuIbvtXZ0loYM42n{4X@a7AD|^W0`o zLw#}HFMa8TMUvl=k3)(3^ELd$F72v1v8M)h$9MHqc@>An*0(RMZ=OM!9N#(%x_?aT zDog63$$jMTpsRMod^z8Akw`nCsjNz5^b8Z-f#jeTLvjsnG`=Qo`M*?MRbD0I( z2Jys6KIO_A%^lajBHw6nagYTm>Cb+7SkuolXr~MEY%v$5)Jyn8?>JWPG*(Y!3p``C zrw{^TUr2rgE?c!S^P5}IBF6@MQU&$%=z*3YtQr?|T3soA>yD(M_$0NW&%jOY(|}L5 z&!LWEN&Ff2jNb2ITh{bl9s#r~xUQtO~`=hVOs0waM5&@2VB9 zknrk!^Gindt6f@k@GVBMFOsn&AEXe~2ISTu2SiE7LOW-KScr{*^MmB$N>i&Qn@2K? zQ?K;~TJ+!aaz_o!2p&T1bP~P(R@PsK+9T|8H3+KzqH8tvPHq>s`|wkZ4_}! zk!_6x+a)wu*F3*OR++mg@BuEahV$8_GOgO3R-O^((o?Nbqc}$eM{a0Ql8dJpmjHkGIJX2ie#KR6hh*;@>DF1ue@FU(J(2>FsBfM zVi}dM7Y#PZ`u|E2kb^2_T)Tyf_erW|5M}JMRi_-I^1`LNWb?qkQiM&>HH_ufc4Ik` zo*Q!C)tvdAo;Y-!R#vcA8TJkQ$ZwNHr!U+zXxFz;!9)S-3-_Xr62hoiXC!)b;c3kM zhnQ(8Rd@EUlsbU>S+kqh=l4|KvtNSwn^E~RNjbwQO>h^=wcBWhAEy7b`%TZP z@y|X2TE~mDq7fb(j(zXguX-gQQM;`J+BLo5E%;rpMxvsTCmi^EF?_yhe!a&I4h>Og zVKoGl1g7ItvQVwUJ|L7`R&~hVx87$5aw}A|i6bv>$EMpx3qL|4w{4AE4vF!4Q?h0% zXX@ripi1WjbU@WayqjthfcJ<^^oJPySg04TL2$kl9^rp&ZQLKt9ZI(-2aJsR8*mA< zAZ^qmyu_iF-K22sHNFa*8RF2>Y&M+X+C$euPwlKpJWbz`yL0)K z@{$tJ3$4bVs9k*Lruw_>xdn%PsQEn(`l?t}SJ}KwP{5rs-<^k%gYsy&nbC8VzrL#zm==2p#3>7kI>i^THEt$mj?jj6S&@M&JV(y+YbttD#98m0>R`|EWw zmuFM(tpE%va?sJ<7wlHvx;cO01287f z10c}GEENX*PJevjq7U+T0tb)Sd1&OTHqdg|1kr;um1YNPujWZX@G@OQ8UMabv#bu@ zq)GN5O)e5S381p9o_}hGGqo<A!1+Z4k4HDBEx1u%tcuT6i5gqMW`NNwz5@qpd@m=OWKkuu=iX&-IS zGAV8nub~^V0iZbJLmLSp*1yazDr+r_c~P!LdZd_AjMaW zsX&9;VnrwZpK95`E_FzBPQ*VxW6yUhd_qu>&&QEAv%+Vaqqh6lQ6)1hKD9_^w^pQa zHN{FRO8yp9V@M4sVC6+rQZ^qNz#QVxhQi{J>E`@G)m4$HEh^d>-@2Efd)P|YL5lpm znUdg0ac2zjdsjv9Bp@R@M5MV)^}XDdmqawcD9bjNntHdJS=@UU(Nbfj9nHVQgVgcK z`X~#wdtTS~*?kpwAD}pdiJ#Svm?uq3n0I%ld@t=#j9uB!FX~oNFVpx zvh%Om(IL8m2wT=CNp8#tZ&F`klNm76$}pRNY(C`xNFO~Mb*yu%f)yqG zm2K8uKaf~tS}q%_8E-;kMn)*=SH6^*!W2TsV!nYoIdDKX6_KgvfgoN6{GB}w{1T8r zF?pbQk!m`ML^FYweX&u{aPE-(35preh4e5Ck+`V?TagFpcLelgn#Qm7SkIn;YPH&OmpUIc`Hw%H@ogm8CR-67+OWpR%z<5S9`Uc5eUV zSPuh=67lcNl0_H1PFstdY~m>d}EzK1ySxTa^Lalf7p>%{d!%os=eVGgl!Wwv!B%g zHLMO^oCm-Fvb$cl6T1mc0KXz;FMUQ9SuwNk1?~iU9o*Q}fE9rp4|;qxDB~+ghHM2O zc(qq&%OTlMd4I$XF9kM5$G%1aC~!}i@p5%7jZ9|-4Aw5%#B?UJ{jChd|H~s^Tpj*w z?M+WgFVkd30%7J!P%)K#IpvoA^=MG+U~P5S)m1@nP27KUejaJUP{&92Z|LB<}n!I8at84#eoVGL>iVR zd~?NOFYpem_2xfLRk8Mezjv@>+iL8_Y1r7dZQHh;G)ZGLwr$%+)7bWtbIyN^=L@Vi z>mJv=*1YEY%`oSHLGM)Uxq?}=whDeRNbjA)tJkIcmN2j%Hb@X71GiR#@1h@N2tx8o zRy?QD)?%P<@QsnUb@X0~)A@ui@;yEBsmrKK2~KAQ?(FN^!FZ3A?V{1vNR^x2F>pJj zFRxErwgzlzi~)DPbb}6Mv+0ghpDm!m4C93!u<0b2$|xUhYotO&T}zq=@~Z%%kvK{4 zFDHV4#=j>VA~1R3ELIZ5kQJ=<^4tNTiJbZ)KKgOqU;h}ve|C^NcfmRA2*e}$X}j1d z_!3qH56ibrC>G8c34oCUAyoDE$7qVi|E2GSTv1vfsz-}4t+7?}Luomz@#a?O%v9(~ zvUMxBp(2X(Zo(2X91hkZzpnU#?KnwRE9w$KTbCy#+%N;cRj~gT(d+Q$PB7$}+Qx*p zKAeeyYgP&wtEV#?)U)CG9ka62V%p9MXCeG6A-Bu~2;XugF4lbO~h-Df&_!S_0~XtHc^ z4t&=x*XjJIlG(n);tvM3?WyLiq#8W6SzTJZt}o~L=gj8s;(o+25xEs|6E;84Cn?X} zS-!Czlshl+6&F0%Sd`#p)Yh5}d5tA;6BZn`!w`Kx>M)lQ!L}&NSY04NUPj^A9wK z(2rMC{RhC!3qG*l-}?n_B&LsO|DkPeK1(ofaqn+R{(70SqrHv7_jmtW$nq!fom(G9 z4cQ&#B41WLeJVQtzpnZY@9zn?H`!0Wq7uI zNiA2mty2IkF2KY0iG>Fb7{IrvOV*q~jMz8uXsvZd2`KdSl(sNqYZtdbrwAThM6ahQeZhU9B^;mt9vmlt&f;B!~4 zIdg}i49HR80dWGT%)7+L-@2Z*Dd*OjS4OH2eH?W@jb7Ne&AUJk2PoMXamT31K0sHJ z@YNh5$uUtF$jzyrZGrqgzO_=1r*1_Em)KXm2v_^IL1b^zyM&zOx@g2b)Zyf2aKg1M z5S-8sY+wT6IM6+D+ZG!l;KAx(6A<>bE}Rrle4v&p5ie+BdwAlj0EkZ!XD1j*w+;_) z0GYk(2U_XVL7GvFMqb4Hj=a(ABd~Ac%hhQ64s^R1p+=X#^fMYNVSex+Q|$=-n=lbF z6Wv(3)-17^B!T6uQey&P{qWATCWJ$*a*WApEWJ}p8?)e3pWP4`c)at+g zSv@<7eoOuf4B|E`;GXdNxPNQ6lkjDl5qF5xp6)%O^4YR^J+&N_@3YuloW)v~q}tW^ z;UW-YAEnVmh>VBzSzODvdR|AmKTGr=P!SN29w4frL~X+MT@wT=eEQVYf`k|;))LE6 zNa&xT$&0^&i2K)2__f6pMCRlPGyNdb5tU{a<__37C>Xpyw`(3YiAuRW(O`BGXb`@` zBl0t8GVA88j;>dAdBBJ;PmS|G=gii=g(x;eAsDLZ^Cw_9UzH%AnS=xkt#%S~)ZA!Zi*q#?k3< zknL)attS%b8^~@D(%hGBs=jgv>q(KI8)dAm-ZM}k;mrbGbB;)SSRVsa1`#jl{`k%= zSH-Dx%PgP*)7T*fwYsjH24xRPXU^{<)x{o(d8dB|Ob_@~Jep+*2t-n=!F5on_=cO5 zTJpEPEPHAIqLiSz@d;0W^1X5E|RbJXpw+D zaGoTYbjkYS7Inp6ZgXC>ecERL*>?6+PjHt&N)mTEx)}o}2ENZ)3kc&lGaP^wZ9`$q z?+f6U%s&0UjD{|sCfy(BADG9aJ_v4TeJXK|DeX6=cO|pl{DZz)E{CnD_m9ytPDVuaV3ok}JZm=Ey&@+?~pfb!^ zVLRx?8wvImp$;Lm$zfew6Qnb9cudq6_W{QHC%30$Sa~svh#AZWNj@gCO?IJ3S(tI& z=aa$j6r&gK4tuSFp)WY*^`TRT3`hx#{sU)>y zzf-(Wt>@kn#}3us*k%1UU*T@YkT`B9Sm?GkVA+EZ5Q!Ys^$o&*Qdg0+vqaYEU{H)O z8u7L9$4otaaL~31I#AX~&}8=8*hH(MA{8=tb3ENuu7s?a<}Mot^{?TrIK>De+4%$L zZI-?5;A7TptP6;Lp3XG0I(yY)-Uv9cFpWSGCr_q$mss3MLp}*Shp|BgW;pD2Tvz6H z9Y&VF5fJ_;6W45GaO!HjQV>hSZf8#Z)cp88h(%1oKpk_Bthe?`?J4h#^T?JbCI8v& z`!GEt!kmQJ7*`@^oHOP(U~F{1&bOyW?&xwnnJZA~4A7<9V9i8L~pPGUsA5F=yzk>|8 zpiFc@UJZo9iCEhp`3>Of3J`5PEid{pH=XPJB8IPSOHwd~3sG&`3+v&vy`lXLOlMAr zJCk4@;-XM95K$>&Z+a~JU&rT@*O8?Q5nx~F>2w?2+%$yjWwn)Qu!K?{@kzsspWh6w z;Trl35I2Sn;4N}!&-HqSYVk7CYuGlkAp%lGZ~T2CUyv;FaQ?9B&`W1<{C{?67XzL&K{tU)wZDaQz; z8W``q)|=_rb%X{wtL+B~ynTi^GwR_#7YubF|$VPqO!0&;j_< zY42Y^yt-P@hc-a;jV8N6uQ(*x|F~{)vc5kDDdUqVHFSwZcBSYN`PVyutiky_oxhju;`?EB(Z5?~o&zFD2otsCWi(0Q9)1#r~Z8#>U^_KxK&0-l82h zz779`XWi~j{j?`$2B-6ROa9_9 z(C=!#tJ2+Auwf^K&@xa)7hSDFRJWgJ=B5#iDDp~em1LWzgWfy?_OmdMEL7wK-^CQ~ z!soY&NAt}D?`qaMN?dvV+Lr4sXBa8H-rbfF(W+VVcI$%+tSkuztX>N2YH@#f7-Af= zpBf#!ytO{NwKG1xU#xX$-MUfvehlMNsb|lL+^1t+BLaHF6~9}_KeaaejXj2keWTe< zp?cM!2KRQ@_b9!o+FgbkpXq|KzoyCVL)S)1P{-lb<X_)ebm4I>D}***J7L}QgP?kD33ZHFfY^xFJeC_EG|`b3*%ZJW1fd(_F|tY zeab=`1iezvV_wPEI&v<2>c|tH%G?CEoxZ*0`$B&D(LH|vlU;#uzm@3W5X+<~oK?F8 z(l*J|XD=nMbm^Ee`?)l@v&jp{(Vwd49d6m$w7rq^hj?L2egJ?O>W7Yqz3PTWOREg@ zH$L1|8qD1!tuL-QSyhkmczBJ~v&VaoW4o6~G-p8puy3M}8*nxl^ZDS&rN4UyuQ6k8 zmAI?*63c=R%&zRoi18`I@baV|j=pmh_b=8KN?FS1YuNAr?XCWkdz4t#kt=c%`Cx}l zjXDZf`oTofa3;ke`MiHrpZPFpnk9cHdYu`__A9LWAg=zvU8j8e<&|uI+l<5C`8Y`E z3V!Nu%hFBV#`0jc0e;%Ics;E5np(KFrKm&ClQ&*G_vH=!%=SpXb-ngho#tx-+SI@f z3oW%{&6h12ngePuBd4ZV`t=NvmV{I`x+O)M-}RT1w{ZBx1(K5>xRWj%b8~k?DwLbu z##=Yn7jFiyAEG;<0sC5+&5Zio#;lRDyOSQGNdhG_SXTSXW-XnUj9ocfkegYda!m+JpmYe10!0uy-J;2|XC?2W-ebc_~gGyq^ zLZijcQHV?^#&E%Zg7WM(HQ9DvNVfsE_{)+Uzxde4=a!>~*Mh`pQe|Z$=axpQ2Dy&S zwyDR!rj^{@2*-g@Ut~tle7+Q~6jJdFX+!jra|1DkNBk8YaL!e7+2(dsOe%!1Il&H} zvrOSm&wOYbkig3#rhQ|oRj<*|VDkMt3I=w=t@YqM85nyQ9*??qdEis)zDtp zQTF{f7$${;;JmfOWe$Hng)H^4b22xJY?a}X!au;U&RZj~i?_PT%3XnL_I>Veq*_?N zmb8G@vnl_|N$vMoTiM-$xD``8cx%69#JpI39k{uAVgo$r6)kzr94!vW?N}6alI6)9 zAT&=ozZ@;q1$3%shBNBIFk8SWxamR*?{u>2VqObm3!i`~ER4&PLq%a9^c&6OiJ7zO zHP^4W$CX$w<7n4q=IQ2)wK4i$=Sd)jbiK;XldDRRGLFLNHw{{6~5ILJyzt_bw@< z^*F}`_h;3wyYFkro;a#-puJJ>oZq}DD{@EsC7EiwCyXODz=BQbS9C&I z-5kFFi}XE26#_!|3*YbHqn>O3MnQ${H9vHG3|aW3C8CSX%}}xkl${SBnwo{(5d50w z=L~5YZe)KP)-9vy_h;u#{uV&ToS3l9oUPGOg zHlV8t0!H^#`;6W;wD>^-?ja1t!-|vD5D4-R)E9mNw7wN$aYtpmg+b*$S-oB@Lr9}b z;}B`Y?{J8__?!V+0Q(%8SfuzhWqjVA=xG$6nOKYJHsph?iq#Bz;Z68uWG5*(L{RLX z5z&SV3gt-_PmC(y|23A3lqr^(V7RS?`9>cYX#AOLWCj~M{F+MZRUMBKChbEVDsQN* z)2gC>#&TX;qhMHm)ScmRb@`=yR!;lya)6`8 zHnEur3&=qp1`RoV=tm5UIo#yu;z_g0{vV{fd1Z$32k<<`*56!FqL_AbueJ(=?UOPe zp1fW%A`L2F%@(ekUK{I;bUM`yT=tA8QT%~Ermvf)t`2@1=RJKgjmx-2%nO~(7WR#R zI0!L=aSusca}E}t+n1=#f2E_^4ZP`H)uZ4-Q@9rWee=H}2vu4vuK3PlzESBozH-UL zJ8V~LzdPLx-Mre{*<6kSg`R7V6!+($H@LvO!Fw=V_X`wx+bhvoMj8-#Yz z@4P4fH0xva%!vs8EUAxHEhoTjj>{X_#suU^LvAOz9gAeGbM=zfenl=4^?eJk&J3*k zB8SRR-risJsVNk_c2qc#rZAC?>AK=Pz%VzxhI=q?sml zS7t?A8vTnwr99Y1u(PuN8V(($nP-TF4I86H{V?9X{~NYWF8)k}kX z?BwSC2Z+m^)GoJsNG1sR=JfWkRs8wFf_Ha`cIt|s-j807+xb;-<};%F?8E%%dex3# z_)ycwAuyZ98SB^b>_glppcg;+ZK1j#m5)r4pmof5naCX5C+pWoNnD`VTwNL^5AB90 zd+LG;gKyS9v^Mxy^X4TUFI)Hp==oX?M4zo6$KG{0c3S8C-eIJJ)!lx<641N$X}zb2R6EN1*qL( z2sPMh{5|><%|AnI<&!}hI${8c&HbqVsGv>H<9`dGt-pUJQ3nIO+3#_?K2j&U6T$CURpKfg zH5{eTp10BuY6rmVHei8t9t`X2tfs9O{ayuKEQHGeRxeLy@*BHkkBP5mHT$CqfnQ?z?gqkg z4C!&J_D$Z>>7v=_m-QwGJVerW%tG>-|DOGT9;0dh9%i8TseZwh<6*H!5eof*v8p_r zc^MUR-Hd{h3F*6``KjZlAq2B+Ga=+$A6OEHQ?=U}plQdX&}z(5uciH76KdBbwK~fN zlHt!QcTAhRaFUO`1c&{7_s8o-2e-lzFH(>d0N_ZOF@gB*VW^v?{mIrTfORg!BPRwX zfa{+S>BEMfH_Z_>e%n;jQ@hDL;>#d`Z$mIFNfQvLmt-A0eqsWH9-aEl2a>a-d(U+y z;KR9>_ZXr@k3asQpIQL%(hX`m+df|ZovZX&tN}Kqu_7^{qsr}??oc0d3ZHdg6cD#nAzdo@t+jxoV?!l7QLO7&r!^=9V4|~e#g0)z{CUuOXF0ddPZ#X z`+<%@`4;GMRV9qPd)J~~;Vspp)W(-jD=b^|A4l8Y@0;7o>lt8ERbz9d!YKiU%jDG{ ze;7@ve{0U{^tmlvuVML~k{y0L&lv~(O9^+hz znViw@D@7u0QsdNV=LfE3_7JS(lc`R)DzrS>A@-I09X^KkZUcK9RA;bgo%w(aAy z)%3@INwQ)Sw2Z&3X;X(rBtgv3fZX6Qg;^<4yt_1F@tz*b%@FaLDr{4;GHjpu;5L|j z+P|?Nr@k8tWN@W%MZia;L}RDNrfOPoV3>e+oILs(#9ewNhd}pCM0AVFn-L}hX)CFvl z`I>Iu+@lp810prmxo-)txW2YgTdu}Iz1)uFM-gQ~ekG@(;1ikNng8!=nGahB`)DDMZ8;q0K2ew^vCmvHLu=#3AVI?u9gh=qS2RnfDBn)YePyQB1dOzm@*^C1U%13o+r8^T`rGVW&p-rLhHz2FMsvjm#{Gl$L&RWDYN3 zT}|m1-^I(;L{P`|<=k$4PdJ^Yiq!qO2|`XSvTO%@-1`rpI659JqNn6Nv1;P@6R|^E z=t>y`GlY)S?$wj+5)40v$birj=>s=g!IJ7-YKyhh|88UJr%3?zKb*caQs7uL`q;56zCvf8>{MMe_M&Pc)XEzp7YwnU~fY#w0NUxUGu9 zWsUkKzTM-xVouz3McbA|W^kUn5#YuwTeLLGziYcTB!*?qKLvKgXYCM!t*UD-%wX@a z1ll1H6Zg)R$s>0*PX1a_wXXL1(Mf*V?b2SLA=*PPF8>JI%J!ky9F^Jl&OIz^^-|wf zl^V8hSLT$NDPxSKXmx-TU=);(!?Pkpt2C|;@vj2z8p=xVRb6jCnfpz-kZZlxzX2Lk zQ#@^62qt_@M`y10h8lA3Uxz1NFvWVfv&Q(23b23nW3&q zRcbv;j+RqNi+#KTIX)Ao5e_*W#5(6Iu+iiUx#x%BF_+j3wDuSNF_Gp?7hVGE+S5&r z9341~3w%%vh+~VUifvV3F;i-gV#SFBQV2E8G=ze{?S4+e0D*p;15GRv@9i_p{V*DW z-3%@WAKy6FH6w*|YTi}OVqUXB66F>W}bXn2X@n zoT>Et3`wn2ja=@8dlc2})Uj9M=ysOcXzOx{!mx9M`(~XVUYL(G9QYyl=EphEB2g)Cu^x<`T9#Akg#kE6Rc#6s-k2I3Ou+O8) zja9Rg{s;P#nCd6)xf#Dk290=Y)6 zvS9!->wS;vx>f96`){Ax;rC+Lx8XyZxRS36>Z?&7S=v|e62Ct#^>a#`=enXVFZXv>gu5cZw-!YdST_}B3Sl9_WBN5yEr&1?tEbHvVmN)#&@V#ST~Ne zU(z8x42M3~DB@p|-$A0X>yd;x9byG<(j(VX>TRm@2Zkm_&*i9f2?wYmTNZ9kmCcBf zbsCmco~@XTsFgJp#g)P*P+{uf3~-*8yW_d`v{WV7&Za_SR7K8>m`IiPBjqu8xJ9dp z^j1cdjd@C1M(FCYLJ=Dybhei5;Z%I|LcXt=Wt= zikA~pWu8qW{>=c4X7{}uN*?glEaQ0c;-`JuWr=FZqFyY38#PO!1L?)8MHI;7i>LO! zV5~<~3O{LGBTJ;kKH|(+9M9hQjJeBP^(pQ+!Ax!@r9vwSkQHiE`j zgWwF{tvrO)HuQ14U(UTu36j{?439>2#oZ zeabrzUq{7pjs+rnwD9YZYlWaW`O(UABN*dk;Za)u89AtNJuTp|YT1hsI9@p2JOAI& zv{&>-8pPAs!okgq(g!V{qQocy zL}ox)I5kHriBjL1$dk7;z(rsl7*ZXas`{uEMu8&Sy}Rhu|Zrl30gD z=?vG|HB#ng24_Dy3GlhKC5uyF_A8jbTYxjcp~ zb!A2iNDGZ1Ovn5Y{>Yi>1nFMSsf$98(i4i^sKaQ8u|Z$=O=Gc z*Z;gdN#LwAkd~Sd87tB$fevmu(2UD zxN52fMBl0aTyK3dm{x`t46x)6H5P)=iE?1_4f@DAV5mr2(TwhA201pc0izSFJ1Ih- z8mX#asHQhT$>%45#p7%%KmqU#DOYc+VW`51xcJ zk~1!LRtR93aKopWlTPjV&MKIfE5c0q}LydYW>zppC|NDb&s$hs^!F~q6{U0Y}TE@2;I)n|X6z2!I@O58|Ex zA$qd1SF1%Qbu>x{*@12TIc9hlLWdbKwP^qd%;9k4zR#&zPKF$LfndA1Th=#ldcdXM zfegW40$QI|1NyC@BtZBR3dq5NyT5jU0wwDx46jF20_M0R80PUU7y5Q*m+0mF&hInh z^HObe{42EqXd!>rd$097rZw}sT<)Ff*MwcD`ui#Qrn}qAKlyOv=n63Dlp8HWJ|$&c z3TLn{`-Ll{s#V^>_N|0LdJK8x*V(DPnhnd*zBfcU6u^Jo)iIcHUC9GNIM(QJmXLn8 zS-anj;Gn3`8!{AsnOALSh$e<$Xvr>e(E8_iHZ}c_mvdXxZO%o&Nw#5ao1B9}WZ!~3 zBP3ehN;qBW9n!?2I@U1q`eyt&nttWmX{CFmGwaL=N7`Fso>``$4m3y6F@mL&V#rv=Qll3GMqT&KN_#jUdKcipe|3l{%^Siz)`6Fnw~Uz82iaYYvnMb` zu-QNnubpo6j_g?s;|?{xqZ!1tWII6Atm_k4)HEe4z_RO$W>JlV3d6bvS0`N310k^V zhjgC`_{Be)KVSH70XvxgX_!m&dyM<&t)BRp?}qWyCN^=fq66WpOi01esy&>msiUjO z&kY*q15HfmRr593ZR}9$8}gH_>s3^0D!;7mJ`DmVE(M)kW6p(T$(2e^#;c?WCybnN zsBnGUp((u;0_;mCMkW$VVcRyVM%kQ13wEuz(}kRo4S>PcY9aZ+T)sm9xCq2awfLX} z%B;+}GVKZeXJyLdi3cq4*`8?UU{~uKjdIJ!)+9}^r^}DO`5eYLfif@_^%#{1j>@8B ztV|`Ryo&@fr(EZUlnq`kwOk1@Jl-1R%2{-PzU(D2QfT#vuhDrk>YeVZh&J zx$LhP)gBr^2iu$_Sayg4W=$x|F)Zi-K=_TfYb?2sZ=KEVkn4N8f}{MbW8LN@$>j3p zFxUac3}XhAzvthty__}qQboV(y}k0U(=ILfV`!Dc8SJ4qTs7!OP{1xXBb}l~f;+J; zRAB$Hg;KRl*eU=;2U3Vu9eX@Zb~?YVi4$*5vb+Kmo7N&jLp!GsS z{D^Ha4pMtUB|?5~5Iv;zi%kNX6iY+TpN_DN>S+-XRZo`QcZN_mc&hJocVTug`P@N9 z27aXSOdCJ)_J97g1_a|XjZDK$!Q6e2c_tyYaX@kglmA13dU7lVCDU?P?lJG&4EPg5GZMqUEVYW;sz=hb-7ai+&_ zlAR5$+GY?u%v(X4e4sBkrMhGNW+72~hHv#ph9U%SF;3t_In>9oY#BtwIal(A>VckE z-i`a5zax5|kn;f8!~N$kVpQ+V$nTE!T<(+ZOZrKs-;rZbtwAO;T7=TfOQXN|mfBN0 ze&+A^KpDgxwH_jWC3!EF|CYJ6y_)gJrnSipk4~ptmkz2C6;daDWZX_s?6$!dX9p{H z2N9w&3cw0uGM6em-K)-1oByB#-77xS6Ic(6>Gs+5M$KEo|G@MWHN{N-w?9|}ARcM8 zeMWzfsiR!%{hsGZ3+r{N3%6(`EYw`<7s8@ox9%2N<5oSZ6U>GzO}3SMw^8V`xPFd$tif>cG1x z?3H)WM}oXYx|gsXj2ht?UFc}JH>bKP?5mdY2otd5I^j(hyJOa|{OdC0U!d>p4aSRD ziC;Ws%}0Mtu2?}yT{&bjzgArPb>M?2WkcH3wUZ!{sNKB9HR_iyjMM=w@A4hWZykoR zK=)m1NixC^5%Jakdu~i_EM#FF7`n(r6;M5vP1lKPz@(lM()cSl&K`ic{@CWEn-Y`} z9x@TkB1ZD}tYip)q2D;>OnN5t8<=j`4k>VK;w^Xb=0<^(m;=0U!~)Vcw#d0ek~ww0 zno5s9AlIJ=RGbK3j1OIHK|=)khF0d??c^MGxHTPVV1$}RgLT^Kf@Am4*>CcQd1S>N zx%8a6nQyQvnou1XW*eLh_r~n^$jCO9bIuX%w_u;oiMYi%wqPbpP@8l@Prm!#N^rlD zf8RICfRi!bv4#9crl8;VsK5FBN1c^w@&Ow~Pa7Vmj3T;cCfqp5G~Nb+Hv6wzDV(G4 zWb(DI`MdtZLd+1ZJ<|A}vqU9+pJu*mUxV%|!fq?^aqf2==V$V+_nB2nS=?WIk8{p= zST`fy4^JiITa&?Un^ASz5OU~UVGZEe4sVA$3D%Sb(RMe#X&K2_rT;d8SFDA1T(g); zzbnajD$kKuS9a{sMn}5?ah&cNiAn0!PuHe1b@~a|jAC4B?$hF1UWd$xXg?JIoO;lU z>0T19y~4CP{7(^!P`@?*-YZM;0R)IwY?9#ev+{%{ZW#9^a^Ef^pH@q~?;NLa2MuKZ z`-y{=$%%!xlY8J~0}2Vf)6ly>_Qg&&T7A3CONftwp6Rr0$4Umyth^bFHp3N~Fw#Uc zZT-oGNR3gBG14D6*7b&!>GQ#=5%1H~0lK?*P%J_iNqkC17jY{)n{hqWFBUKTF`o%0 zLFo1UXRK}p@z2hbL>>4=D#ceiAmVwRch)5wb>x>>a<+RR)KRUWqgC(Lh5|%>ejNGC zbQEQ+M|pKie{Rf;j7|P(y+v9HL?%A;L|j5h}#@txt&2PLqGkI|$PI9uTSe z?|r5oB1j|BeVVIC*g&{0+mn^D&poAy00iKd0p)YbU@qmlC{511{;}*+Di~LYP?x>$ z%L_*8PZT*6s#jZ*NLA{FflKFPz}9cGPB4_!%B zDdibtBvyP|;>I8^7|(0;GWy>5?wPVGk-r+RKBRG|F|KktWq;NRL4K2;w4cs=$UIz| zMOo6LQ;U%kIDtP&m9hfC_gm8xo@%ZxfAl7~k25ia338A&s_e+ogp-rJ>g#Mz+(4*e zU8`N0GBr=W^@>qXG?^kcRpPUwpQ_0ulpBMl;|B^TqKKuA~4%4Q; z_Iuhs5jU`7q}uaH_+R}+qE_;+V#!0;8dMRl*Dx`OQX6A|h+?1VTU{^AFDdo>0@IOU z$~`|ndOtt9bMt0pgi~2+OU#GYBiGtX?7b#LT$XDDgaG-7lIguLP_W;L_5I#xeg&Yo z3&4kpV)K`KuT@6HPIy}z$4$7_CR!JoxBvw391v~If$>v0?1nFRJ5gGy;NOB>#Kw8$ zcK{72zHzrHJV|fOHDCa6$Wq51k_@;k3M_?Yl$h;V3R?ZV;@=$2Xk9%nJZN1}0Ci;jB7d`6iU>LDN88H4=l-y5Dl^;5>9E2ax=5 zHpB4tMI;6%gmn&0*)2Hwbxe(oHxz*pJV+t9`fftFr}N9Ph0Lfd#CgH=3?reZZIRzF zk6ajVP$uY95z^2>@V1Q@H2~@==6c^#2_wVq6QBE~vcJ0Xy)WX3Px99%No*Y1!Qzr zO1LQ%57p5kB@w4h#&X{BJ$P7H_ILMhmhayq{sNPC z`8nl~$DW}_Q#&}9A2CzMjqh+T&u)H!y2EZ&JJs8hjxTw7Z`CiXQ+ZZ`8=pDTOOQIM z0Zu#X5M%M3(-`Qs%7cozWiT>`@NXl62*^wlg|!p7kAh@}aCImzuCe8Yw6$^9Ll%Na>f^D4UOO0iod=ztAwz?cc>^@r;>f9Q}#Yq!Fbe1d$JLZyoGI?7J&> zg(x?oYVm~#^jN&pq~I@EosQQQz_f3DPB=qqcHIdHo*j7-G}H>koC!CHE>bx@VCzb2=vbfApm&@*NG<;$r{ zqB^GmtHg2ZgBHJIqI`)iX~4gnA>RNi`2KydPuXYDI4WN3YehwonH^2CMKAvb9)YC%R;kc68lr^DH{Z)mO9`*?R>d;1 z;uf@HxtSqL76+mi5Nv#$LZ6|9RI#dBgT+$acby~|33w5%bqHRe?8H>Yy@KDpojr7; z-mtXXAfxZ=d4qTHqE>Wz*~Q|Tk=siv^V_tz-+{QeFSCt5Y3unt2k#D`8}7_Wqs4!p zi+_9l9)v3ucWiu!oQj9J%7ZoLNu@R(m-!I2+$Z|Sdx-T$!9n)AZU`*97geTEy1s>% z8wBRBBF{R07C!`e=&g4jJ-pj}maNu9K{;!ROdM1>R_Fvtv8ET)eb9;F`}uN!G*hkj zmb*ZUO)mAach-Cqa*U^V+GP&BD--$^^LwuU%mSiU{pF+whq8W4(5Y-3{gat*U{pxuH zJrAmUOL1<_a}a5rI#q(NPnv%S5i~KU`6|}7c%<$~HP=+xABbp2rYhwP@z#7J;@)3^ zI8u4e~*$pkiZ30^S^z*Z1XXO&W$&#|5pdv{#@*SS^S(t`s`6_ zL&_O*oDDauDWfW^vO`yvBD`#AL4Qr}l-6UqB5Y=7g%CCJnrgVWWMf=Y`x-yS7Jwg#XJoOA5+qDS~-c1=o z^KCHl-fWQQe3(2l1E=PNgg!0IoRzUSxLsvz0y6%mnv`Vfi7k6)>7pVeMmP^TMA{c2 z(^{1)IEQN0)jbUZnzO(tH+@Cn@pP{)BkehG*qemBELsx)h_J)YhHYHhj}bCc0(P|# zig4Qpi}-Sx^SrtZN*k2I#8*Jn`p9wh$d@wNB^-RKu|dQeq|#Mf@E7mSUi7Yc`&DfR z%w6Uop&#~xXyX&X^BC(xizOA@z5dT{TQ%@g+?pJ*{$uE?J=`bxW>ltChb?a-I_E8x z5@kmrx{hu_;0l}ewJjaIgz?+;)WN;jMzZ4nYwx6h)dq04W-3=)DG{ zOYglXMF>d*q$5T;ks?TuCP+sip-Pb^y;u1V0g)0wATQrH@4t9&e>$_Xb9QFu&g?z2 zd(Vyf8F|9CkKkN8&t@1%hyY`|6C4Vtrx0H@e0lt%WCyby8**Ta@AVP&BBQ0z>L!mj zxI8hapbUH-)+0nCFQG$n;x38qv7#S4*H5(1PwhZT^UOim?vx>R`->>ug5go@EP3lB zY}7hE3f`#Cp{RwX}`a|<8MOUmW`^4wmU5AA~WB_9hJnFeBxm1UrmQJ;$9WOs zog3}ch|=Ceb4h;&k;;8y3`hA`u{i@hB0pB>u-H2$G0rO;@yYs)dZHzI@lQN*D~Rt0 zc2l$3+JQW10|l`fwU0aMS(V%Zjt^V7v9S#}HMU1bmT6K%%yQ+=j%p28uBXG<&81{G z`X$7?y>K5^>Ay8C%IN!ay(Ht0og8ZYB}j}A5&KFjcG9|E8knrnK(06XP&H*U?R~Qv z-5nEl&a@E!@YiWeD0ME>V+saW+<=i>x&Jq$nTu&CT5#y^4ycWCjQCfNd=7TicA^9l z*0yU$-=yA1nvN2Ib)E%^8Wlaj!m~kPfB%{i3f~kYC0buWo}Pa?34E$0BxlDneQ*3P zdBd^w+3j!diB(ua4Ev$%^!$d?bC^6qSGsKDnwb_DGR8rek$`-115N?7Pw*u9~mO!T_7oxp- zKsd-iiIKf8zV*OJN@>gfx1z^c%pQ|QBB_G~RQHI{EAEx(!pIh-k$z!DpvO z>hqd*$}(Av;&g1T$)9ZpUToFGIcDaHfb*5hn|_?+%*U(Gb{b<(BOf3i6ICe;Qp+7WsWzK_71)1j?BxN>Q>^P-pd#izGG>y- zoRV0)x&OqCyfsThtzFIZH*4Et2H!V1GjrDU=2IlPR1Cf1NhU#YzG6Gx!5L#(I6%%B z=||T+C|dACf=oU}iiAYnafk>>oSJ80v*})BE%cH2%?FDCJ)Z@cXEyrj?7C!tWJ+6` zzmr-InLjiZ`@5v{tjMSJP5dTxDSyiV-n*ARnkqjUr5vG{S@c-~|7!J42@Jec8rhAMfNOy#vM@Im`$}%fI&q%mM zesn|PH|z)bwVVOOGf7iS9Uk3UiE6H0Pb;iNepT%h=^8<5z&-p+L>#RiXm9nKOSYR` zcuU4r`fO*`RAbBmWvV`+fzOc%Fhapw_c|xDb%IZgGvmHxxZNksf?uYx1!td3H`w3l z6nxVR6O%iw9I1N@w`<`#e)jT3uWYZ}8PCzU^JvgZ9TPA2)K-8T7==`cZyVnq=Fy8A zA|xd)5$=T(PJh{I$q&1?O{EJk;m=fs?pKU>fBi($fB#kJZfp#Y=#oipRlu5@+k?*_ zh<=M|QDaU!^wsarTT4!zD-F~FZFT%W!UBA)_yBQ7%Si z^-+8vUM-QhMyF_2h3bRLi_GQLjv|?O=#GkdnrT{!Ix#g&bS6N=E$NuUBA^ocQcrlX zQOR~|rHnGPftGyE5Mxz}+&3=gqy@2?P-ZAqT6+arZ@G%(QZ6kC{hAK)IC$yRa0%(5M`E?uvD^Du5vWPUOyS=+}038ag9FD9F}w1Rsb!^~CB1laZ~VqL1ba-#K)i ztG0{Lc?z{L$sCO-UuiDru8W<|uSbb(FHf3hMb;)->f7JYWsK_(RGj#G!IwVU94d|j z!u4`~Gu9>(&<5i;J%1Zoe%2y^U;2EGMLx{Ch97m(T;YkoNrrbO57a|P1Z4y62hx39 z^pR*(gH~0WL1k@}m}ix0spQB?-aP})FfHcjqw(UVhj(Wg0P5^1oIhmGa0@ zxi)L&D5Ko1xkBjV6zcX@aYpf*9&tv^r#xbVa(_EYkqO!F93R!yGiMK^th`ZKBojtR z-)glLuyooYdEmJVcHpg6;WP|7q?gd^4rnDuQWBLwcV-jNf&gE==ZdqedKJ8imG2w?>kxp zajzD|64&K~u?Dg)w<)G|peC{Gl~pN=iMLH?McpSYO7ACJz2U$IJC8QWiacho(v8q9 zd8|4gEWkQ7=e^!2weqNtR-(YJ)$;)o!dX-)I`G@9{oqZWZ%FCO#!z&XxIFVNV3HlN z2IG>L1u(JBF^nG0A`D0C-39t+2J?{CRF4b`29;7`Zvu4l<$};81Mrj-w>*6%Tq7oT zt=t*!=c+&&d!i2iX?eo?PaaF`9t0kc&&SIcu9S$49^vwC1_ybIah4J;T{V)FT>^-CdDFAu4-6b8m} zks0MAJHA_}AB;*IV4BCI=;=Kat_vv$sNo;<9a6>e8!XWqb3`r_VS7kQA;lq-(8fykMCpUpcnYj*}XdGp{#f3@KyZc^& z$&j+@?A}>GY2u}7G;KIo`pRyQ?p}d*y-6~uk{KeWpU+>lXJ$|d){--d&RrBk zZhZ0=K78i@+{dux1xYgEf4IguUA(;@b$L!o1t)fcQwYF`^?5r({HMML(e!0#O>kY? zzD7J7KE2WwT=+7NnB79xotmw>zLoxG`Vz-$Lgn)r#5Wj_tumRm#|{{g1#*<@c{>C~ z0YszR>sqIp&3_~io2JP{?XzR`QMGwVaW&YmMQq4JEesi>;Km|caIp4CHYJ#@%IKfS z+B&Q_xjRoR7P%-OjVWJl*8=ItWFvY^o3h9lCzq;9Iw2(FuY-#MM8ll)*pHGM{po~d zYIT6x`nwFmZyy-Mso7epT76n@z5IwI{@S0Z@9q$tnugDWsN=f+1VrrNvk0H;$BM27 zo}NzQmmMzk9jvdH-~mJDb4foF6JafJ0aOjCUTTSRaINoTaQ1q!KRmx@1d2~WJoH)( z=sYB^I8&jX>{55PQC{V9UPu7XSl(^~FqTPr@Qr{=zr2tsIk39EZ zine!Fx4f!V?+H?rO9jO$UUm0b0bS9$h553Tq>44kj#VKk11-DZS73cT@(j?Iy+Y7B2@%noLU<*Ym>tvh)UN! z%eVStO?rBmg#@x^g%zTFQbm;ywCM!)oXVpGYf(DR#I5l5hkCojO@A%TgcUy$RWS|h zvZ3I`R1&h7k_SpFt0;?g>|>t5fr#g@dp|)9##FDgmKF7t7Ks-)gU1 zpq-56tqg*@xrK)_)vQ&kw*ZUnrP}@API5q^>hJ-g%;U*|*z1E3QQtO{3f73l($~G= z7FU&PKtuQPRQFe#i4$?dJZS?7_jy1__=|zd>IVti4Xu;L2ohi$MC&2Z-b7Mlk>Nec zC_kSiyuSm>FP(zgXYeTMzws=C#T&P!-Ff)G-cLa*U|1A2T{hZz8T%1Fx*5CTpukrV zFq3fyoC>BtrN1AscJh_fv1PlHgjRbe#7#mFUhJ%cHJmaVhzzZrv!p3-Ct@52(FOeOxSAa_96{kn1?A zYA}awm&h%GU(-sh$D~54`IMH4uVI4LhRMov`AoePxYlC71ND5Fj3tHU7qUahh=1G0 z$h9rCY0DwZ%mdZz1U4(aP*6cb`T6{Gt2HBhMbZ6|Jj~7JRidrBGEFJRMRIlWThA## zv)TivsgAF+&4g=M7LVn`StLz7(-^rDW)dF3gbMW!F0!LH{C*CPdG+4no|^;<&g5$b zb9|>ra9EAqTmSH!W}9A=Aq%g1d3RsK_`N*0Z8T2{!V`vwK4WWCU&1y8yALNB4+5+}6}H9#RITa=y03E1)H{`@famFF5yG4X>HoF2y6e{1ZQOG@PX9~ zEq4aH{H)XbBXG<=1j|z#*VXA#Vme94{1>R~WQmG*vJTEfl7_~n3bu~tyXcxx;-KWP z{ra`}S3%;G8|%K%({mDscLVSr1OG(cOyavm@nZ>u_AQ**g;xu8guDD5L6X144;x1V z$Mf^d4zPYb0l{X<+1auEq~~5mX{C&rqDix|HFNme6$?JT>2mAn_srpkly2ZC%TCoFf zzh(15#$BvASTPxX8_$1-NUg+;ol!M`1P>0eWfk!oqLz;BsTTe>pyWWl${66U@O>6ZnRd>Mjb;>&{j#6z2iV=A@OYoS>>=N$ z4=lgOC;(E%zz+K65cY^6r^+2blp9-;sK(FWU>*r_iGGv9eHZksxx3{ZO}Q@%1#$^x12lVRD*04 z>TG34n`kcT$`C%Sl%bGIMQu4~H^y%zJ#f0&rZ87BkNa$Z!;jNX(BJgIzY#((oe+Yz z`0y*n_?o(#?Uv4?Y4~B?HKbGOrW_vIkj-mG!5bVIrQvvURK#AY>Dzc@c!&NE@y}}} zb9w)#ltc5o_+^aL(7?T29=0tT1&7LT{kQbA@j$SN3tP|3c^S9MX*&X&DztVzrPef> zhbum(YBFL*og<74@^$!f+obJpy((qC&CXgmTrcK6MEY^|OGdY9FO~po{Q&x;jfzkaHradZ+Y`-^RKDF1yYoRa~QjLkbBWX?atTmPu zt|sw|gWAE4#L=bb>XWPC=9$hlfAvVwlyZ*83JZCF9PS$heBTKYvtcCQhd5r6K5~=Z#8$p!IvM+NZ;h>DK^+?R zsi?SsI5%iU6U5lfdmI;IBqvcwO@0KclQ}mRIS;C|JMfwKeT`1oNV=qYoxcM!`{)?i z6Io5_@w;lw3Y+yygPuR9$sJ}F^J#O1!wFPNRa@0{8*2$6?qF?%nrmN12fFYoE)KhE zCtU}o81jvL|27~5y)oR-aP2VX#7bqkYmK?Wl5^*t-pzUJ+IVxTs=fD*}x|s@veu>=23@J~^_%&@EeR|1MvxpMBi_0@f z56tRP;jQk>HaJpv4!&?ZKQre4yZ^QiqK>~+jem2M17^IoKTB!2ll@YaSrT9!riH(v z#tXzjPArAbkzH%EEE4ve>b;O^!fxz3I8l7r*(9yI^Kz(N{`%jW(}3aQ>n+|Jq2=pc zN?_L^e1Ddius)_2^3nct_|Zn+@U4vW|3EUkM3@nwOT@&7os>Hc-;`d>B{f>r9jyvf-L!UU7Oe-VNB-}V##PyGK! e@qaZchVZ-!Rw?FyWTP_xVd!caY1FDYzW5)=b;4l) literal 0 HcmV?d00001 diff --git a/twisted/twisted_site/static/icons/pathways.png b/twisted/twisted_site/static/icons/pathways.png new file mode 100644 index 0000000000000000000000000000000000000000..df51426e0784b250dec9b1abaeef048f4cb487af GIT binary patch literal 198287 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]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 {% if user.profile %}
{% if user.profile.is_staff %} - Staff + {{ user.profile.staff_permissions.superuser|yesno:"Admin,Staff" }} {% endif %} {% if login_maybe %} {{ user.profile.is_allowed|yesno:"Login allowed,Login disallowed" }} @@ -121,6 +121,47 @@

{% endif %}

+
+

Adminproceed with caution!

+ {% if user.profile.referrals.all %} + + + + + Permission + Value + Override Value + Save + + + + + + {% with user.profile.staff_permissions.superuser as val %} + Superuser + + + {{ val }} + + + + + {% endwith %} + + + + + {% else %} + +

+ No referrals found :( +

+

+ This user hasn't referred anyone yet! +

+
+ {% endif %} +
{% if login_maybe %}
diff --git a/twisted/twisted_site/templates/client/dashboard.html b/twisted/twisted_site/templates/client/dashboard.html index 8dbf98e..01daecd 100644 --- a/twisted/twisted_site/templates/client/dashboard.html +++ b/twisted/twisted_site/templates/client/dashboard.html @@ -21,20 +21,26 @@ Projects
-
🛣️
+ onclick="newWindow('Pathways', this.dataset.url)"> +
+ + + +
Pathways
-
👥
+
+ +
Referrals
-
+ {% comment %}
🧭
Discover -
+
{% endcomment %}
@@ -570,6 +576,17 @@ } } drawSpectrum(); + + setTimeout(() => { + console.log( + '%cConsole?', + 'color: #B7AFBC; background: #160D1E; font-size: 1.5rem; padding: 0.15rem 0.25rem; margin: 1rem; border: 2px solid #A79FAC;' + ); + console.log('WELCOME TO TWISTED!!!') + console.log('shh....') + + console.log('{{ request.scheme }}://{{ request.get_host }}{% url 'dashboard' %}?discover') + }, 500) {% if startup_windows %} diff --git a/twisted/twisted_site/templates/cotton/project_ship_mark.html b/twisted/twisted_site/templates/cotton/project_ship_mark.html index d32f965..533f23f 100644 --- a/twisted/twisted_site/templates/cotton/project_ship_mark.html +++ b/twisted/twisted_site/templates/cotton/project_ship_mark.html @@ -9,7 +9,9 @@ {% elif status == 'unavailable' %} -
?
+
+ ? +
{% else %}
No status found!
{% endif %} diff --git a/twisted/twisted_site/views/admin/admin.py b/twisted/twisted_site/views/admin/admin.py index 9616a34..709a8ca 100644 --- a/twisted/twisted_site/views/admin/admin.py +++ b/twisted/twisted_site/views/admin/admin.py @@ -1,10 +1,10 @@ -from dataclasses import dataclass - -from django.shortcuts import redirect, resolve_url +from django.shortcuts import resolve_url from django.views import View - -from ...models import AuditLog - +from dataclasses import dataclass +import json +from typing import Literal +from django_htmx.http import trigger_client_event +from ...models import AuditLog, ProfileStaffPermissions @dataclass class SidebarLink: @@ -81,6 +81,14 @@ def dispatch(self, request, *args, **kwargs): post=(request.method.lower() == "post"), additional_context={}, ) + + perms = self.request.user.profile.staff_permissions + if perms is None: + profile = self.request.user.profile + profile.staff_permissions = ProfileStaffPermissions.objects.create() + profile.save() + + self.perms = perms response = super().dispatch(request, *args, **kwargs) self.audit_log.save() return response diff --git a/twisted/twisted_site/views/client/auth.py b/twisted/twisted_site/views/client/auth.py index ed3d5da..bdf51a1 100644 --- a/twisted/twisted_site/views/client/auth.py +++ b/twisted/twisted_site/views/client/auth.py @@ -9,12 +9,14 @@ from django.http import JsonResponse from django.shortcuts import redirect from django.views import View +import secrets +import hmac +from django.conf import settings from ... import hackatime from ...models import Profile -from ...slack import slack_bot - -logger = logging.getLogger(__name__) +from ... import hackatime +from ...slack import slack_bot, SLACK_LOG_CHANNEL, log_to_channel oauth = OAuth() @@ -131,6 +133,8 @@ def get(self, request): f"https://hackatime.hackclub.com/oauth/authorize?client_id={HACKATIME_CLIENT_ID}&redirect_uri={HACKATIME_REDIRECT_URI}&response_type=code&scope={scopes}&state={profile.hackatime_state}" ) + log_to_channel(f":ms-arrow-up-right: *{profile.slack_username}* just logged in!") + return redirect("dashboard") diff --git a/twisted/twisted_site/views/client/dashboard.py b/twisted/twisted_site/views/client/dashboard.py index 6823095..25eb8d4 100644 --- a/twisted/twisted_site/views/client/dashboard.py +++ b/twisted/twisted_site/views/client/dashboard.py @@ -19,13 +19,11 @@ def get(self, request): if project_id: project = get_object_or_404(Project, id=project_id) - startup_windows.append( - { - "href": resolve_url("fr.projects.detail", project.id), - "title": project.project_name, - } - ) - - context["startup_windows"] = startup_windows - + startup_windows.append({"href": resolve_url('fr.projects.detail', project.id), "title": project.project_name}) + + if request.GET.get('discover') is not None: + startup_windows.append({"href": resolve_url('fr.discover'), "title": "discover"}) + + context['startup_windows'] = startup_windows + return render(request, "client/dashboard.html", context) diff --git a/twisted/twisted_site/views/client/journal.py b/twisted/twisted_site/views/client/journal.py index d029549..9c7d8dc 100644 --- a/twisted/twisted_site/views/client/journal.py +++ b/twisted/twisted_site/views/client/journal.py @@ -3,8 +3,11 @@ from django.shortcuts import get_object_or_404, redirect, render from django.views import View - -from ...models import Journal, Project +from django.shortcuts import render, redirect, get_object_or_404, resolve_url +from ...models import Profile, Project, Journal +from ... import hackatime +import re +import math HACKATIME_MAX_LOGGABLE_MINUTES = 6 * 60 IMAGE_REGEX = r"!\[([^\]]*)\]\([^)]+\)" diff --git a/twisted/twisted_site/views/client/project.py b/twisted/twisted_site/views/client/project.py index a3faf5d..2623d1f 100644 --- a/twisted/twisted_site/views/client/project.py +++ b/twisted/twisted_site/views/client/project.py @@ -3,11 +3,12 @@ from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.views import View -from requests import HTTPError, RequestException - -from ... import ari, hackatime -from ...models import PROJECT_TYPE_CHOICES, Profile, Project, ProjectShip +from django.shortcuts import render, redirect, get_object_or_404, resolve_url +from ...slack import log_to_channel +from ...models import Profile, Project, Journal, ProjectShip, PROJECT_TYPE_CHOICES +from ... import hackatime +from ... import ari # Create your views here. class ProjectDetail(View): @@ -31,6 +32,7 @@ def get(self, request, id): context["first_pass_status"] = "pending" context["second_pass_status"] = "pending" + if project.latest_ship() is not None: try: status = ari.get_project_status(project) @@ -108,6 +110,11 @@ def post(self, request, id): project.playable_url = request.POST.get("playable_url", "") project.screenshot_url = request.POST.get("screenshot_url", "") project.save() + + project_url = f"{self.request.scheme}://{self.request.get_host()}{resolve_url('dashboard')}?project={project.id}" + log_to_channel(f":settings: Updated settings for *<{project_url}|{project.project_name}>*!\n- *Description*: {project.project_description}\n- *Type*: {project_type}\n- *Hackatime*: {project.hackatime_project_name or 'None'}\n- *Repo*: {project.repo_url or 'None'}\n- *Demo*: {project.playable_url or 'None'}\n- *Screenshot*: {project.screenshot_url}") + + return redirect("fr.projects.detail", project.id) @@ -161,6 +168,7 @@ def post(self, request, id, context=None): if not project.user.profile.ysws_eligible: return self.get(request, id) + ship = ProjectShip(project=project) ship.save() @@ -169,4 +177,8 @@ def post(self, request, id, context=None): except Exception: ship.delete() raise - return redirect("fr.projects.detail", project.id) + + project_url = f"{self.request.scheme}://{self.request.get_host()}{resolve_url('dashboard')}?project={project.id}" + log_to_channel(f":shipitparrot: Project *<{project_url}|{project.name}> shipped with *{project.time_logged} minutes*") + + return redirect('fr.projects.detail', project.id) diff --git a/twisted/twisted_site/views/client/projects.py b/twisted/twisted_site/views/client/projects.py index e9ae01f..fd206e7 100644 --- a/twisted/twisted_site/views/client/projects.py +++ b/twisted/twisted_site/views/client/projects.py @@ -1,9 +1,9 @@ from django.http import HttpResponse from django.shortcuts import redirect, render from django.views import View - -from ...models import PROJECT_TYPE_CHOICES, Project - +from django.shortcuts import render, redirect, resolve_url +from ...models import Project, PROJECT_TYPE_CHOICES +from ...slack import log_to_channel # Create your views here. class ListProjects(View): @@ -40,11 +40,16 @@ def post(self, request): if project_type not in PROJECT_TYPE_CHOICES: return HttpResponse("naughty! you arent supposed to do this!") - Project.objects.create( + + project = Project.objects.create( user=request.user, project_name=project_name, project_description=project_description, project_type=project_type, ) + + project_url = f"{self.request.scheme}://{self.request.get_host()}{resolve_url('dashboard')}?project={project.id}" + + log_to_channel(f"*{request.user.profile.slack_username}* created a <{project_url}|new project>!\n- *Name*: {project_name}\n- *Description*: {project_description}\n- {project_type.title()}") - return redirect("fr.projects") + return redirect('fr.projects.detail', project.id) From db36a0bab690493eb660084df7d5ba24b5530d07 Mon Sep 17 00:00:00 2001 From: KavyanshKhaitan2 Date: Tue, 8 Sep 2026 22:54:55 +0530 Subject: [PATCH 16/16] Fix conflicts --- twisted/mysite/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/twisted/mysite/settings.py b/twisted/mysite/settings.py index 7879fe9..21e2b0a 100644 --- a/twisted/mysite/settings.py +++ b/twisted/mysite/settings.py @@ -207,6 +207,7 @@ # not requests we send to Ari. ARI_WEBHOOK_SECRET = os.environ.get('ARI_WEBHOOK_SECRET') -# Slack (bot) + +# Slack SLACK_TOKEN = os.environ.get('SLACK_TOKEN') SLACK_LOG_CHANNEL = os.environ.get('SLACK_LOG_CHANNEL')