10000 Elections updates (#1436) · python/pythondotorg@84b9f27 · GitHub
[go: up one dir, main page]

Skip to content

Commit 84b9f27

Browse files
authored
Elections updates (#1436)
* blackify nominations app * nominiations: display times in UTC, add a description field
1 parent 96e79fc commit 84b9f27

File tree

6 files changed

+91
-45
lines changed

6 files changed

+91
-45
lines changed

nominations/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from django.contrib import admin
22

3-
from nominations.models import (Election, Nominee, Nomination)
3+
from nominations.models import Election, Nominee, Nomination
44

55

66
@admin.register(Election)

nominations/forms.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77

88
class NominationForm(forms.ModelForm):
9-
109
class Meta:
1110
model = Nomination
1211
fields = (
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 2.0.13 on 2019-05-14 14:35
2+
3+
from django.db import migrations, models
4+
import markupfield.fields
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('nominations', '0001_initial'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='election',
16+
name='_description_rendered',
17+
field=models.TextField(editable=False, null=True),
18+
),
19+
migrations.AddField(
20+
model_name='election',
21 D7AF +
name='description',
22+
field=markupfield.fields.MarkupField(null=True, rendered_field=True),
23+
),
24+
migrations.AddField(
25+
model_name='election',
26+
name='description_markup_type',
27+
field=models.CharField(choices=[('', '--'), ('html', 'HTML'), ('plain', 'Plain'), ('markdown', 'Markdown'), ('restructuredtext', 'Restructured Text')], default='markdown', editable=False, max_length=30),
28+
),
29+
]

nominations/models.py

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010

1111
class Election(models.Model):
12-
1312
class Meta:
1413
ordering = ["-date"]
1514

@@ -20,15 +19,20 @@ def __str__(self):
2019
date = models.DateField()
2120
nominations_open_at = models.DateTimeField(blank=True, null=True)
2221
nominations_close_at = models.DateTimeField(blank=True, null=True)
22+
description = MarkupField(
23+
escape_html=True, markup_type="markdown", blank=False, null=True
24+
)
2325

2426
slug = models.SlugField(max_length=255, blank=True, null=True)
2527

2628
@property
2729
def nominations_open(self):
2830
if self.nominations_open_at and self.nominations_close_at:
29-
return self.nominations_open_at < datetime.datetime.now(
30-
datetime.timezone.utc
31-
) < self.nominations_close_at
31+
return (
32+
self.nominations_open_at
33+
< datetime.datetime.now(datetime.timezone.utc)
34+
< self.nominations_close_at
35+
)
3236

3337
return False
3438

@@ -57,7 +61,6 @@ def save(self, *args, **kwargs):
5761

5862

5963
class Nominee(models.Model):
60-
6164
class Meta:
6265
unique_together = ("user", "election")
6366

@@ -86,15 +89,19 @@ def name(self):
8689

8790
@property
8891
def nominations_received(self):
89-
return self.nominations.filter(accepted=True, approved=True).exclude(
90-
nominator=self.user
91-
).all()
92+
return (
93+
self.nominations.filter(accepted=True, approved=True)
94+
.exclude(nominator=self.user)
95+
.all()
96+
)
9297

9398
@property
9499
def nominations_pending(self):
95-
return self.nominations.exclude(accepted=False, approved=False).exclude(
96-
nominator=self.user
97-
).all()
100+
return (
101+
self.nominations.exclude(accepted=False, approved=False)
102+
.exclude(nominator=self.user)
103+
.all()
104+
)
98105

99106
@property
100107
def self_nomination(self):
@@ -106,7 +113,10 @@ def display_name(self):
106113

107114
@property
108115
def display_previous_board_service(self):
109-
if self.self_nomination is not None and self.self_nomination.previous_board_service:
116+
if (
117+
self.self_nomination is not None
118+
and self.self_nomination.previous_board_service
119+
):
110120
return self.self_nomination.previous_board_service
111121

112122
return self.nominations.first().previous_board_service
@@ -143,7 +153,6 @@ def save(self, *args, **kwargs):
143153

144154

145155
class Nomination(models.Model):
146-
147156
def __str__(self):
148157
return f"{self.name} <{self.email}>"
149158

@@ -173,12 +182,18 @@ def __str__(self):
173182
approved = models.BooleanField(null=False, default=False)
174183

175184
def editable(self, user=None):
176-
if self.nominee and user == self.nominee.user and self.election.nominations_open:
185+
if (
186+
self.nominee
187+
and user == self.nominee.user
188+
and self.election.nominations_open
189+
):
177190
return True
178191

179-
if user == self.nominator and not (
180-
self.accepted or self.approved
181-
) and self.election.nominations_open:
192+
if (
193+
user == self.nominator
194+
and not (self.accepted or self.approved)
195+
and self.election.nominations_open
196+
):
182197
return True
183198

184199
return False

nominations/views.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ class ElectionsList(ListView):
1414

1515

1616
class NominationMixin:
17-
1817
def get_context_data(self, **kwargs):
1918
context = super().get_context_data(**kwargs)
2019
self.election = Election.objects.get(slug=self.kwargs["election"])
@@ -30,16 +29,13 @@ def get_queryset(self, *args, **kwargs):
3029
if election.nominations_complete or self.request.user.is_superuser:
3130
return Nominee.objects.filter(
3231
accepted=True, approved=True, election=election
33-
).exclude(
34-
user=None
35-
)
32+
).exclude(user=None)
3633

3734
elif self.request.user.is_authenticated:
3835
return Nominee.objects.filter(user=self.request.user)
3936

4037

4138
class NomineeDetail(NominationMixin, DetailView):
42-
4339
def get(self, request, *args, **kwargs):
4440
self.object = self.get_object()
4541
if not self.object.visible(user=request.user):
@@ -126,7 +122,6 @@ def get_context_data(self, **kwargs):
126122

127123

128124
class NominationView(DetailView):
129-
130125
def get(self, request, *args, **kwargs):
131126
self.object = self.get_object()
132127
if not self.object.visible(user=request.user):

templates/nominations/election_list.html

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{% extends "psf/default.html" %}
22
{% load boxes %}
3+
{% load tz %}
34

45
{% block page_title %}Elections | {{ SITE_INFO.site_name }}{% endblock %}
56

@@ -16,26 +17,33 @@ <h2>{{ status }}</h2>
1617
<ul>
1718
{% for election in elections %}
1819
<li>
19-
{{ election.name }} Election
20-
<ul>
21-
{% if election.nominations_open %}
22-
<li>Election begins: {{ election.date }}</li>
23-
<li><a href="{% url 'nominations:nomination_create' election=election.slug %}">Submit a nomination</a></li>
24-
<li>Nominations Opened: {{ election.nominations_open_at }}</li>
25-
<li>Nominations Close: {{ election.nominations_close_at }}</li>
26-
{% else %}
27-
{% if election.nominations_complete %}
28-
<li><a href="{% url 'nominations:nominees_list' election=election.slug %}">View nominations</a></li>
29-
<li>Election began: {{ election.date }}</li>
30-
<li>Nominations Opened: {{ election.nominations_open_at }}</li>
31-
<li>Nominations Closed: {{ election.nominations_close_at }}</li>
32-
{% else %}
33-
<li>Election begins: {{ election.date }}</li>
34-
<li>Nominations Open: {{ election.nominations_open_at }}</li>
35-
<li>Nominations Close: {{ election.nominations_close_at }}</li>
36-
{% endif %}
37-
{% endif %}
38-
</ul>
20+
<div>
21+
{{ election.name }} Election
22+
<br>
23+
<div style="margin-left: 1em;">{{ election.description }}</div>
24+
<br>
25+
<ul>
26+
{% timezone "UTC" %}
27+
{% if election.nominations_open %}
28+
<li>Election begins: {{ election.date }}</li>
29+
<li><a href="{% url 'nominations:nomination_create' election=election.slug %}">Submit a nomination</a></li>
30+
<li>Nominations Opened: {{ election.nominations_open_at|date:"r" }}</li>
31+
<li>Nominations Close: {{ election.nominations_close_at|date:"r" }}</li>
32+
{% else %}
33+
{% if election.nominations_complete %}
34+
<li><a href="{% url 'nominations:nominees_list' election=election.slug %}">View nominations</a></li>
35+
<li>Election began: {{ election.date }}</li>
36+
<li>Nominations Opened: {{ election.nominations_open_at|date:"r" }}</li>
37+
<li>Nominations Closed: {{ election.nominations_close_at|date:"r" }}</li>
38+
{% else %}
39+
<li>Election begins: {{ election.date }}</li>
40+
<li>Nominations Open: {{ election.nominations_open_at|date:"r" }}</li>
41+
<li>Nominations Close: {{ election.nominations_close_at|date:"r" }}</li>
42+
{% endif %}
43+
{% endif %}
44+
{% endtimezone %}
45+
</ul>
46+
</div>
3947
</li>
4048
{% endfor %}
4149
</ul>

0 commit comments

Comments
 (0)
0