Don't save svg, return rendering at api endpoint.
One less layer of needless indirection is nice, but I did this so that I could use this app on heroku, which does not allow saving files to the file-system.
This commit is contained in:
parent
09cb0a311c
commit
0175764b17
@ -33,21 +33,26 @@ def get_num_machines_per_status(status, records):
|
|||||||
len(filter(lambda r: r.machine.type == DRYER and
|
len(filter(lambda r: r.machine.type == DRYER and
|
||||||
r.availability == status, records))]
|
r.availability == status, records))]
|
||||||
|
|
||||||
def generate_current_chart(filepath, records, hall):
|
def generate_current_chart(records, hall, filepath=None):
|
||||||
"""
|
"""
|
||||||
Generate stacked bar chart of current laundry usage for specified hall and
|
Generate stacked bar chart of current laundry usage for specified hall and
|
||||||
save svg at filepath.
|
save svg at filepath.
|
||||||
"""
|
"""
|
||||||
custom_style = Style(colors=('#B6E354', '#FF5995', '#FEED6C', '#E41B17'))
|
custom_style = Style(colors=('#B6E354', '#FF5995', '#FEED6C', '#E41B17'))
|
||||||
chart = pygal.StackedBar(style=custom_style, width=800, height=512, explicit_size=True)
|
chart = pygal.StackedBar(style=custom_style, width=800, height=512,
|
||||||
|
explicit_size=True)
|
||||||
chart.title = 'Current laundry machine usage in ' + hall.name
|
chart.title = 'Current laundry machine usage in ' + hall.name
|
||||||
chart.x_labels = ['Washers', 'Dryers']
|
chart.x_labels = ['Washers', 'Dryers']
|
||||||
|
print records
|
||||||
chart.add('Available', get_num_machines_per_status(AVAILABLE, records))
|
chart.add('Available', get_num_machines_per_status(AVAILABLE, records))
|
||||||
chart.add('In Use', get_num_machines_per_status(IN_USE, records))
|
chart.add('In Use', get_num_machines_per_status(IN_USE, records))
|
||||||
chart.add('Cycle Complete', get_num_machines_per_status(CYCLE_COMPLETE, records))
|
chart.add('Cycle Complete', get_num_machines_per_status(CYCLE_COMPLETE, records))
|
||||||
chart.add('Unavailable', get_num_machines_per_status(UNAVAILABLE, records))
|
chart.add('Unavailable', get_num_machines_per_status(UNAVAILABLE, records))
|
||||||
chart.range = [0, 11]
|
chart.range = [0, 11]
|
||||||
chart.render_to_file(filepath)
|
if filepath:
|
||||||
|
chart.render_to_file(filepath)
|
||||||
|
else:
|
||||||
|
return chart.render()
|
||||||
|
|
||||||
# NOTE: Abandoning generating the weekly chart via mysql and Django for now.
|
# NOTE: Abandoning generating the weekly chart via mysql and Django for now.
|
||||||
# (cron script and csv file is just easier) Sorry if there are a lot of
|
# (cron script and csv file is just easier) Sorry if there are a lot of
|
||||||
@ -112,9 +117,8 @@ def update(hall, filepath=None):
|
|||||||
machine = LaundryMachine.objects.get(number=number, hall=hall)
|
machine = LaundryMachine.objects.get(number=number, hall=hall)
|
||||||
record = LaundryRecord(machine=machine, availability=availability,
|
record = LaundryRecord(machine=machine, availability=availability,
|
||||||
time_remaining=time_remaining)
|
time_remaining=time_remaining)
|
||||||
if filepath:
|
records.append(record)
|
||||||
records.append(record)
|
|
||||||
else:
|
|
||||||
record.save()
|
|
||||||
if filepath:
|
if filepath:
|
||||||
generate_current_chart(filepath, records, hall)
|
generate_current_chart(records, hall, filepath=filepath)
|
||||||
|
else:
|
||||||
|
return generate_current_chart(records, hall)
|
||||||
|
@ -27,7 +27,7 @@ function update_charts(selected) {
|
|||||||
request = $.ajax({
|
request = $.ajax({
|
||||||
url: '/ajax/current/' + halls[selected]
|
url: '/ajax/current/' + halls[selected]
|
||||||
}).done(function (result) {
|
}).done(function (result) {
|
||||||
svg.attr('src', result);
|
svg.attr('src', '/ajax/current/' + halls[selected]);
|
||||||
$('#loading').remove();
|
$('#loading').remove();
|
||||||
console.log(svg);
|
console.log(svg);
|
||||||
$('.current-chart').append(svg);
|
$('.current-chart').append(svg);
|
||||||
|
@ -23,7 +23,6 @@ def ajax_get_current(request, hall):
|
|||||||
hall_obj = get_object_or_404(Hall, pk=hall)
|
hall_obj = get_object_or_404(Hall, pk=hall)
|
||||||
filename = str(hall_obj.id) + '_current.svg'
|
filename = str(hall_obj.id) + '_current.svg'
|
||||||
try:
|
try:
|
||||||
laundry.update(hall_obj, filepath=join(SVG_DIR, filename))
|
return HttpResponse(laundry.update(hall_obj), content_type='image/svg+xml')
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
return HttpResponse(status=500);
|
return HttpResponse(status=500);
|
||||||
return HttpResponse(join(SVG_URL, filename))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user