Skip to content

Commit c7e6da8

Browse files
committed
Merge branch 'blog-archive'
2 parents c1d4066 + 7a0e904 commit c7e6da8

File tree

16 files changed

+432
-232
lines changed

16 files changed

+432
-232
lines changed

flake.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
nix-output-monitor
117117
nixfmt-rfc-style
118118
nodejs
119+
postgresql.dev
119120
pre-commit
120121
pythonSets.python
121122
tailwindcss

justfile

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,25 @@ bootstrap: venv pre-commit
1010
edit:
1111
pycharm .
1212

13+
# run manage.py with command
14+
manage command:
15+
uv run --no-sync website/manage.py {{ command }}
16+
17+
# create database migrations if needed
18+
makemigrations: (manage "makemigrations")
19+
20+
# migrate the database
21+
migrate: (manage "migrate")
22+
23+
# run the ipython repl
24+
shell: (manage "shell")
25+
1326
# run the development server
1427
run check="none":
1528
uv run python {{ if check != "none" { "-X dev" } else { "" } }} website/manage.py runserver
1629

1730
push:
18-
nix build --json .#website | jq -r '.[].outputs | to_entries[].value' | cachix push strykeforce
31+
nix build --json .#venv | jq -r '.[].outputs | to_entries[].value' | cachix push strykeforce
1932
nix build --json .#static | jq -r '.[].outputs | to_entries[].value' | cachix push strykeforce
2033

2134
# update CSS and download all JS dependencies

website/blog/migrations/0001_initial.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ class Migration(migrations.Migration):
9999
verbose_name="ID",
100100
),
101101
),
102-
("sort_order", models.IntegerField(blank=True, editable=False, null=True)),
102+
(
103+
"sort_order",
104+
models.IntegerField(blank=True, editable=False, null=True),
105+
),
103106
(
104107
"member",
105108
models.ForeignKey(

website/blog/models.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@
22

33
import datetime
44

5+
from django.core.paginator import Paginator
56
from django.db import models
67
from django.db.models import ForeignKey
78
from django.utils import timezone
89
from modelcluster.fields import ParentalKey
9-
from wagtail.admin.panels import FieldPanel
10-
from wagtail.admin.panels import InlinePanel
11-
from wagtail.admin.panels import MultiFieldPanel
12-
from wagtail.contrib.routable_page.models import path
13-
from wagtail.contrib.routable_page.models import RoutablePageMixin
10+
from wagtail.admin.panels import FieldPanel, InlinePanel, MultiFieldPanel
11+
from wagtail.contrib.routable_page.models import RoutablePageMixin, path
1412
from wagtail.fields import RichTextField
15-
from wagtail.models import Orderable
16-
from wagtail.models import Page
13+
from wagtail.models import Orderable, Page
1714
from wagtail.search import index
1815

1916

@@ -28,17 +25,24 @@ def blogs(self):
2825
return BlogPage.objects.live().order_by("-date")
2926

3027
def recent_blogs(self):
31-
return self.blogs().filter(date__gt=datetime.datetime.now() - datetime.timedelta(days=365))
28+
return self.blogs().filter(
29+
date__gt=datetime.datetime.now() - datetime.timedelta(days=365)
30+
)
3231

3332
@path("")
3433
def recent_blogs_view(self, request):
3534
"""View function for recent blog posts."""
3635

36+
query_set = BlogPage.objects.live().order_by("-date")
37+
paginator = Paginator(query_set, 10)
38+
page = request.GET.get("page")
39+
blogs = paginator.get_page(page)
40+
3741
return self.render(
3842
request,
3943
context_overrides={
4044
"title": "Latest News",
41-
"blogs": self.recent_blogs(),
45+
"blogs": blogs,
4246
},
4347
)
4448

@@ -75,7 +79,9 @@ def get_context(self, request, **kwargs):
7579

7680

7781
class BlogMemberAuthorRelation(Orderable, models.Model):
78-
page = ParentalKey("blog.BlogPage", on_delete=models.CASCADE, related_name="authors")
82+
page = ParentalKey(
83+
"blog.BlogPage", on_delete=models.CASCADE, related_name="authors"
84+
)
7985
member = ForeignKey("members.Member", on_delete=models.CASCADE, related_name="+")
8086

8187
class Meta(Orderable.Meta):
@@ -98,7 +104,6 @@ class BlogPage(Page):
98104
help_text="Text to describe the page",
99105
)
100106
body = RichTextField(blank=True)
101-
# noinspection PyUnresolvedReferences
102107
image = models.ForeignKey(
103108
"wagtailimages.Image",
104109
blank=True,

website/events/management/commands/import_events.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ def handle(self, *args, **options):
9090
obj.first_event_id = event.first_event_id
9191
obj.first_event_code = event.first_event_code
9292
obj.webcasts = self.parse_webcasts(event.webcasts)
93-
obj.division_keys = events.division_keys if hasattr(events, "division_keys") else None
93+
obj.division_keys = (
94+
events.division_keys if hasattr(events, "division_keys") else None
95+
)
9496
obj.parent_event_key = event.parent_event_key
9597
obj.playoff_type = event.playoff_type
9698
obj.playoff_type_string = event.playoff_type_string

website/events/migrations/0001_initial.py

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,59 @@ class Migration(migrations.Migration):
3434
("event_type", models.IntegerField(default=-1)),
3535
("district", models.JSONField(blank=True, null=True)),
3636
("city", models.CharField(blank=True, max_length=1000, null=True)),
37-
("state_prov", models.CharField(blank=True, max_length=1000, null=True)),
37+
(
38+
"state_prov",
39+
models.CharField(blank=True, max_length=1000, null=True),
40+
),
3841
("country", models.CharField(blank=True, max_length=1000, null=True)),
3942
("start_date", models.DateField(default=django.utils.timezone.now)),
4043
("end_date", models.DateField(default=django.utils.timezone.now)),
4144
("year", models.IntegerField(default=django.utils.timezone.now)),
42-
("short_name", models.CharField(blank=True, max_length=1000, null=True)),
43-
("event_type_string", models.CharField(blank=True, max_length=1000, null=True)),
45+
(
46+
"short_name",
47+
models.CharField(blank=True, max_length=1000, null=True),
48+
),
49+
(
50+
"event_type_string",
51+
models.CharField(blank=True, max_length=1000, null=True),
52+
),
4453
("week", models.IntegerField(blank=True, null=True)),
4554
("address", models.CharField(blank=True, max_length=1000, null=True)),
46-
("postal_code", models.CharField(blank=True, max_length=1000, null=True)),
47-
("gmaps_place_id", models.CharField(blank=True, max_length=1000, null=True)),
55+
(
56+
"postal_code",
57+
models.CharField(blank=True, max_length=1000, null=True),
58+
),
59+
(
60+
"gmaps_place_id",
61+
models.CharField(blank=True, max_length=1000, null=True),
62+
),
4863
("gmaps_url", models.URLField(blank=True, max_length=1000, null=True)),
4964
("lat", models.FloatField(blank=True, null=True)),
5065
("lng", models.FloatField(blank=True, null=True)),
51-
("location_name", models.CharField(blank=True, max_length=1000, null=True)),
66+
(
67+
"location_name",
68+
models.CharField(blank=True, max_length=1000, null=True),
69+
),
5270
("website", models.URLField(blank=True, max_length=1000, null=True)),
53-
("first_event_id", models.CharField(blank=True, max_length=1000, null=True)),
54-
("first_event_code", models.CharField(blank=True, max_length=1000, null=True)),
71+
(
72+
"first_event_id",
73+
models.CharField(blank=True, max_length=1000, null=True),
74+
),
75+
(
76+
"first_event_code",
77+
models.CharField(blank=True, max_length=1000, null=True),
78+
),
5579
("webcasts", models.JSONField(blank=True, null=True)),
5680
("division_keys", models.JSONField(blank=True, null=True)),
57-
("parent_event_key", models.CharField(blank=True, max_length=1000, null=True)),
81+
(
82+
"parent_event_key",
83+
models.CharField(blank=True, max_length=1000, null=True),
84+
),
5885
("playoff_type", models.IntegerField(blank=True, null=True)),
59-
("playoff_type_string", models.CharField(blank=True, max_length=1000, null=True)),
86+
(
87+
"playoff_type_string",
88+
models.CharField(blank=True, max_length=1000, null=True),
89+
),
6090
("body", wagtail.fields.RichTextField(blank=True)),
6191
],
6292
options={
@@ -97,6 +127,8 @@ class Migration(migrations.Migration):
97127
),
98128
migrations.AddIndex(
99129
model_name="event",
100-
index=models.Index(fields=["start_date"], name="events_even_start_d_d4b514_idx"),
130+
index=models.Index(
131+
fields=["start_date"], name="events_even_start_d_d4b514_idx"
132+
),
101133
),
102134
]

website/home/migrations/0012_sponsor_sponsor_home_sponso_level_ee6564_idx.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ class Migration(migrations.Migration):
6161
),
6262
migrations.AddIndex(
6363
model_name="sponsor",
64-
index=models.Index(fields=["level", "name"], name="home_sponso_level_ee6564_idx"),
64+
index=models.Index(
65+
fields=["level", "name"], name="home_sponso_level_ee6564_idx"
66+
),
6567
),
6668
]

website/home/migrations/0014_formpage_formfield.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,27 @@ class Migration(migrations.Migration):
4242
),
4343
(
4444
"from_address",
45-
models.EmailField(blank=True, max_length=255, verbose_name="from address"),
45+
models.EmailField(
46+
blank=True, max_length=255, verbose_name="from address"
47+
),
48+
),
49+
(
50+
"subject",
51+
models.CharField(
52+
blank=True, max_length=255, verbose_name="subject"
53+
),
4654
),
47-
("subject", models.CharField(blank=True, max_length=255, verbose_name="subject")),
4855
("intro", wagtail.fields.RichTextField(blank=True)),
4956
("thank_you_text", wagtail.fields.RichTextField(blank=True)),
5057
],
5158
options={
5259
"abstract": False,
5360
},
54-
bases=(wagtail.contrib.forms.models.FormMixin, "wagtailcore.page", models.Model),
61+
bases=(
62+
wagtail.contrib.forms.models.FormMixin,
63+
"wagtailcore.page",
64+
models.Model,
65+
),
5566
),
5667
migrations.CreateModel(
5768
name="FormField",
@@ -65,7 +76,10 @@ class Migration(migrations.Migration):
6576
verbose_name="ID",
6677
),
6778
),
68-
("sort_order", models.IntegerField(blank=True, editable=False, null=True)),
79+
(
80+
"sort_order",
81+
models.IntegerField(blank=True, editable=False, null=True),
82+
),
6983
(
7084
"clean_name",
7185
models.CharField(
@@ -106,7 +120,10 @@ class Migration(migrations.Migration):
106120
verbose_name="field type",
107121
),
108122
),
109-
("required", models.BooleanField(default=True, verbose_name="required")),
123+
(
124+
"required",
125+
models.BooleanField(default=True, verbose_name="required"),
126+
),
110127
(
111128
"choices",
112129
models.TextField(
@@ -125,7 +142,9 @@ class Migration(migrations.Migration):
125142
),
126143
(
127144
"help_text",
128-
models.CharField(blank=True, max_length=255, verbose_name="help text"),
145+
models.CharField(
146+
blank=True, max_length=255, verbose_name="help text"
147+
),
129148
),
130149
(
131150
"page",

website/home/models.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,21 +127,39 @@ def sponsors(self):
127127
return Sponsor.objects.filter(active=True).order_by("name")
128128

129129
def diamond_sponsors(self):
130-
return self.sponsors().filter(active=True, level__exact=LevelType.DIAMOND).order_by("name")
130+
return (
131+
self.sponsors()
132+
.filter(active=True, level__exact=LevelType.DIAMOND)
133+
.order_by("name")
134+
)
131135

132136
def platinum_sponsors(self):
133137
return (
134-
self.sponsors().filter(active=True, level__exact=LevelType.PLATINUM).order_by("name")
138+
self.sponsors()
139+
.filter(active=True, level__exact=LevelType.PLATINUM)
140+
.order_by("name")
135141
)
136142

137143
def gold_sponsors(self):
138-
return self.sponsors().filter(active=True, level__exact=LevelType.GOLD).order_by("name")
144+
return (
145+
self.sponsors()
146+
.filter(active=True, level__exact=LevelType.GOLD)
147+
.order_by("name")
148+
)
139149

140150
def silver_sponsors(self):
141-
return self.sponsors().filter(active=True, level__exact=LevelType.SILVER).order_by("name")
151+
return (
152+
self.sponsors()
153+
.filter(active=True, level__exact=LevelType.SILVER)
154+
.order_by("name")
155+
)
142156

143157
def bronze_sponsors(self):
144-
return self.sponsors().filter(active=True, level__exact=LevelType.BRONZE).order_by("name")
158+
return (
159+
self.sponsors()
160+
.filter(active=True, level__exact=LevelType.BRONZE)
161+
.order_by("name")
162+
)
145163

146164
def diamond_or_platinum_sponsors(self):
147165
return self.sponsors().filter(
@@ -177,7 +195,9 @@ class Sponsor(index.Indexed, models.Model):
177195
description = models.TextField(max_length=1000, blank=True)
178196
website = URLField(blank=True)
179197
# noinspection PyUnresolvedReferences
180-
level = CharField(choices=LevelType.choices, default=LevelType.BRONZE, max_length=20) # type: ignore
198+
level = CharField(
199+
choices=LevelType.choices, default=LevelType.BRONZE, max_length=20
200+
) # type: ignore
181201
active = BooleanField(default=True)
182202
# noinspection PyUnresolvedReferences
183203
logo = models.ForeignKey(

website/members/management/commands/seed_schools.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,25 @@ def handle(self, *args, **options):
2323
("Galesburg Jr. Sr. High School", "https://ghs.galesburg205.org"),
2424
("Gull Lake High School", "https://www.gulllakecs.org/glhs"),
2525
("Hackett Catholic Prep", "https://csgk.org/hackett-welcome"),
26-
("Kalamazoo Central High School", "https://www.kalamazoopublicschools.com/Domain/8"),
26+
(
27+
"Kalamazoo Central High School",
28+
"https://www.kalamazoopublicschools.com/Domain/8",
29+
),
2730
("Loy Norrix High School", "https://www.kalamazoopublicschools.com/LNHS"),
2831
("Mattawan High School", "https://www.mattawanschools.org/hs"),
2932
("Parchment High School", "https://www.parchmentschools.org/o/phs"),
3033
("Portage Central High School", "https://portageps.org/chs/"),
3134
("Portage Northern High School", "https://portageps.org/nhs/"),
32-
("Schoolcraft Jr. Sr. High School", "https://www.schoolcraftschools.org/o/shs"),
33-
("Vicksburg High School", "https://www.vicksburgschools.org/schools/high-school/"),
35+
(
36+
"Schoolcraft Jr. Sr. High School",
37+
"https://www.schoolcraftschools.org/o/shs",
38+
),
39+
(
40+
"Vicksburg High School",
41+
"https://www.vicksburgschools.org/schools/high-school/",
42+
),
3443
]
35-
School.objects.bulk_create([School(name=school[0], url=school[1]) for school in schools])
44+
School.objects.bulk_create(
45+
[School(name=school[0], url=school[1]) for school in schools]
46+
)
3647
self.stdout.write("Done.")

0 commit comments

Comments
 (0)