Skip to content

Commit e4bb705

Browse files
Steve Singermhagander
authored andcommitted
Add CSV exporter for the sessions list to token options
This way a static site (for example) can pull down all sessions and their data.
1 parent e8a9f54 commit e4bb705

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

postgresqleu/confreg/backendviews.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from django.conf import settings
1010

1111
import csv
12+
import io
1213
import json
1314
from collections import OrderedDict
1415

@@ -25,7 +26,7 @@
2526
from .jinjapdf import render_jinja_ticket, render_jinja_badges
2627
from .util import send_conference_mail, get_conference_or_404, send_conference_notification
2728

28-
from .models import Conference, ConferenceSeries
29+
from .models import Conference, ConferenceSeries, ConferenceSession
2930
from .models import ConferenceRegistration
3031
from .models import Speaker
3132
from .models import PrepaidBatch
@@ -976,12 +977,53 @@ def tokendata(request, urlname, token, datatype, dataformat, subrequest=None):
976977
return sponsorclaimsfile(conference, subrequest.lstrip('/'))
977978
else:
978979
return _structured_tokendata(sponsorclaimsdata(conference), dataformat)
980+
elif datatype == 'sessions':
981+
sessiondata(conference, writer)
979982
else:
980983
raise Http404()
981984

982985
return writer.response
983986

984987

988+
def csvembed(iter):
989+
f = io.StringIO()
990+
writer = csv.writer(f, lineterminator='', delimiter=';')
991+
writer.writerow(iter)
992+
return f.getvalue()
993+
994+
995+
def sessiondata(conference, writer):
996+
result = []
997+
status_filter = []
998+
sessions = ConferenceSession.objects.filter(conference=conference)
999+
header = ['id', 'title', 'shorttitle', 'abstract', 'status', 'speaker', 'company',
1000+
'email', 'track', 'starttime', 'endtime', 'recordingconsent', 'room', 'submissionnote']
1001+
writer.columns(header)
1002+
writer.grouping = False
1003+
for s in sessions:
1004+
speaker_names = csvembed(map(lambda spk: spk.name, s.speaker.all()))
1005+
speaker_emails = csvembed(map(lambda spk: spk.email, s.speaker.all()))
1006+
speaker_companies = csvembed(map(lambda spk: spk.company, s.speaker.all()))
1007+
row = [
1008+
s.id,
1009+
s.title,
1010+
s.shorttitle,
1011+
s.abstract,
1012+
s.status_string,
1013+
speaker_names,
1014+
speaker_companies,
1015+
speaker_emails,
1016+
None if s.track is None else s.track.trackname,
1017+
s.starttime,
1018+
s.endtime,
1019+
s.recordingconsent,
1020+
None if s.room is None else s.room.roomname,
1021+
s.submissionnote,
1022+
]
1023+
result.append(row)
1024+
writer.write_rows(result)
1025+
1026+
9851027
def registration_dashboard_send_email(request, urlname):
9861028
conference = get_authenticated_conference(request, urlname)
9871029

postgresqleu/confreg/migrations/0023_accesstokens.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class Migration(migrations.Migration):
1818
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
1919
('token', models.CharField(max_length=200)),
2020
('description', models.TextField()),
21-
('permissions', postgresqleu.util.forms.ChoiceArrayField(base_field=models.CharField(max_length=32, choices=[('regtypes', 'Registration types and counters'), ('discounts', 'Discount codes'), ('discountspublic', 'Public discount codes'), ('vouchers', 'Voucher codes'), ('sponsors', 'Sponsors and counts'), ('addopts', 'Additional options and counts'), ('schedule', 'Schedule JSON'), ('sponsorlevels', 'Sponsor level metadata'), ('sponsorclaims', 'Sponsor claimed benefits')]), size=None)),
21+
('permissions', postgresqleu.util.forms.ChoiceArrayField(base_field=models.CharField(max_length=32, choices=[('regtypes', 'Registration types and counters'), ('discounts', 'Discount codes'), ('discountspublic', 'Public discount codes'), ('vouchers', 'Voucher codes'), ('sponsors', 'Sponsors and counts'), ('addopts', 'Additional options and counts'), ('schedule', 'Schedule JSON'), ('sponsorlevels', 'Sponsor level metadata'), ('sponsorclaims', 'Sponsor claimed benefits'), ('sessions', 'Sessions')]), size=None)),
2222
('conference', models.ForeignKey(to='confreg.Conference', on_delete=models.CASCADE)),
2323
],
2424
),

postgresqleu/confreg/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,6 +1556,7 @@ class Meta:
15561556
('schedule', 'Schedule JSON'),
15571557
('sponsorlevels', 'Sponsor level metadata'),
15581558
('sponsorclaims', 'Sponsor claimed benefits'),
1559+
('sessions', 'Sessions')
15591560
)
15601561

15611562

0 commit comments

Comments
 (0)