Skip to content
This repository was archived by the owner on Apr 29, 2022. It is now read-only.

Commit ec73d1b

Browse files
authored
Remove "expected attendance" functionality. (#1288)
The was relying on a feature in the website, which has long been removed, where users could flag interest in a talk.
1 parent 55d2368 commit ec73d1b

File tree

6 files changed

+19
-166
lines changed

6 files changed

+19
-166
lines changed

conference/admin.py

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,24 @@ class EventInlineAdmin(admin.TabularInline):
550550

551551

552552
class ScheduleAdmin(admin.ModelAdmin):
553-
list_display = ('conference', 'slug', 'date')
553+
list_display = (
554+
"conference",
555+
"slug",
556+
"date",
557+
)
558+
list_filter = (
559+
"conference",
560+
)
561+
search_fields = [
562+
"conference",
563+
"slug",
564+
"date",
565+
]
566+
ordering = (
567+
"conference",
568+
"date",
569+
)
570+
554571
inlines = [
555572
TrackInlineAdmin,
556573
EventInlineAdmin
@@ -560,11 +577,6 @@ def get_urls(self):
560577
urls = super(ScheduleAdmin, self).get_urls()
561578
v = self.admin_site.admin_view
562579
my_urls = [
563-
re_path(
564-
r'^stats/$',
565-
v(self.expected_attendance),
566-
name='conference-schedule-expected_attendance'
567-
),
568580
re_path(
569581
r'^(?P<sid>\d+)/events/$',
570582
v(self.events),
@@ -791,28 +803,6 @@ def tracks(self, request, sid, tid):
791803
}
792804
return TemplateResponse(request, 'conference/admin/schedule_tracks.html', ctx)
793805

794-
def expected_attendance(self, request):
795-
allevents = defaultdict(dict)
796-
for e, info in models.Schedule.objects.expected_attendance(settings.CONFERENCE_CONFERENCE).items():
797-
allevents[e.schedule][e] = info
798-
data = {}
799-
for s, events in allevents.items():
800-
data[s] = entry = {
801-
'morning': [],
802-
'afternoon': [],
803-
}
804-
for e, info in events.items():
805-
item = dict(info)
806-
item['event'] = e
807-
if e.start_time.hour < 13 and e.start_time.minute < 30:
808-
entry['morning'].append(item)
809-
else:
810-
entry['afternoon'].append(item)
811-
ctx = {
812-
'schedules': sorted(list(data.items()), key=lambda x: x[0].date),
813-
}
814-
return TemplateResponse(request, 'conference/admin/schedule_expected_attendance.html', ctx)
815-
816806

817807
class FilterFareByTicketCode(admin.SimpleListFilter):
818808

conference/models.py

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,61 +1006,13 @@ class Meta:
10061006

10071007

10081008
class ScheduleManager(models.Manager):
1009+
10091010
def attendees(self, conference, forecast=False):
10101011
"""
10111012
Returns the number of participants for each of the conference schedule.
10121013
"""
10131014
return settings.CONFERENCE_SCHEDULE_ATTENDEES(conference, forecast)
10141015

1015-
def events_score_by_attendance(self, conference):
1016-
return defaultdict(lambda: 0.0)
1017-
1018-
def expected_attendance(self, conference, factor=0.85):
1019-
"""
1020-
Return for each event prediction of participation based on EventInterest
1021-
"""
1022-
seats_available = defaultdict(lambda: 0)
1023-
qs = EventTrack.objects.filter(event__schedule__conference=conference).values('event', 'track__seats')
1024-
for row in qs:
1025-
seats_available[row['event']] += row['track__seats']
1026-
1027-
scores = self.events_score_by_attendance(conference)
1028-
events = Event.objects.filter(schedule__conference=conference).select_related('schedule')
1029-
1030-
output = {}
1031-
# Now I have to make the forecast of the participants for each event,
1032-
# to make it divide the score of an event by the number of voters who
1033-
# have expressed a vote for an event in the same time band * *; the number
1034-
# I get is a k factor when multiplied by the forecast of people a day gives
1035-
# me an indication of how many people are expected for the event.
1036-
forecasts = self.attendees(conference, forecast=True)
1037-
1038-
# to calculate the score for a time band I have to do a double for the
1039-
# events, to limit the number of internal iterations I group events per day
1040-
event_by_day = defaultdict(set)
1041-
for e in events:
1042-
event_by_day[e.schedule_id].add(e)
1043-
1044-
for event in events:
1045-
score = scores[event.id]
1046-
group = list(Event.objects.group_events_by_times(event_by_day[event.schedule_id], event=event))[0]
1047-
group_score = sum([scores[e.id] for e in group])
1048-
1049-
k = 0
1050-
if group_score:
1051-
k = score / group_score
1052-
1053-
expected = k * forecasts[event.schedule_id] * factor
1054-
seats = seats_available.get(event.id, 0)
1055-
output[event.id] = {
1056-
'score': score,
1057-
'seats': seats,
1058-
'expected': expected,
1059-
'overbook': seats and expected > seats,
1060-
}
1061-
1062-
return output
1063-
10641016

10651017
class Schedule(models.Model):
10661018
"""

conference/templatetags/conference.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,6 @@ def fare_blob(fare, field):
4949
return ''
5050

5151

52-
# XXX - remove
53-
@register.simple_tag(takes_context=True)
54-
def get_talk_speakers(context, talk):
55-
c = _request_cache(context['request'], 'talk_speakers_%s' % talk.conference)
56-
if not c:
57-
c['items'] = models.TalkSpeaker.objects.speakers_by_talks(talk.conference)
58-
return c['items'].get(talk.id, [])
59-
60-
6152
@register.simple_tag
6253
def tagged_items(tag):
6354
return dataaccess.tags().get(tag, {})

templates/admin/conference/schedule/change_list.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,5 @@
99
</a>
1010
</li>
1111
{% endif %}
12-
<li>
13-
<a href="{% url "admin:conference-schedule-expected_attendance" %}" class="">expected attendance</a>
14-
</li>
1512
</ul>
1613
{% endblock %}

templates/conference/admin/schedule_expected_attendance.html

Lines changed: 0 additions & 69 deletions
This file was deleted.

tests/test_conference_admin.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,3 @@ def test_conference_schedule_tracks_admin(admin_client):
111111
assert response.status_code == 200
112112

113113

114-
# /admin/conference/schedule/stats/ conference.admin.expected_attendance
115-
@mark.django_db
116-
def test_conference_schedule_expected_attendance_admin(admin_client):
117-
url = reverse('admin:conference-schedule-expected_attendance')
118-
119-
response = admin_client.get(url)
120-
121-
assert response.status_code == 200

0 commit comments

Comments
 (0)