summaryrefslogtreecommitdiff
path: root/postgresqleu
diff options
context:
space:
mode:
authorMagnus Hagander2019-01-04 14:21:00 +0000
committerMagnus Hagander2019-01-04 14:21:00 +0000
commit40493ac75d12dba360658f8bd6ee03b66a70b81d (patch)
treec6c6010c71a4c109d5ef0548392ba58d026491c0 /postgresqleu
parent6d44349af29bcd83e477a48e2a555c1314bce7eb (diff)
Use proper floor division operator
py3 changes the / operator from current integer division (floor division) to instead be true division (float division). The // operator exists in both py3 and py2 and always performs floor division. Most of our important calculations already use Decimal with explicit number of decimal points which is safe against this. But for some cases like calculating pixels in pdfs and reports make sure that we explicitly use the // so we don't risk a change in behaviour when we eventually switch to py3.
Diffstat (limited to 'postgresqleu')
-rwxr-xr-xpostgresqleu/confreg/jinjapdf.py4
-rw-r--r--postgresqleu/confreg/mobileviews.py2
-rw-r--r--postgresqleu/confreg/pdfschedule.py12
-rw-r--r--postgresqleu/confreg/reporting.py2
-rw-r--r--postgresqleu/confreg/util.py4
-rw-r--r--postgresqleu/confreg/views.py10
-rw-r--r--postgresqleu/elections/views.py2
-rwxr-xr-xpostgresqleu/util/misc/baseinvoice.py12
8 files changed, 25 insertions, 23 deletions
diff --git a/postgresqleu/confreg/jinjapdf.py b/postgresqleu/confreg/jinjapdf.py
index b8f0fc42..423d8132 100755
--- a/postgresqleu/confreg/jinjapdf.py
+++ b/postgresqleu/confreg/jinjapdf.py
@@ -151,7 +151,7 @@ class JinjaFlowable(Flowable):
# Max height is total height divided by lines divided by 1.2 since
# we multiply the leading value with 1.2 later
maxsize = o.get('maxsize', None)
- maxfont_height = int((getmm(o, 'height') / len(lines)) / 1.2)
+ maxfont_height = int((getmm(o, 'height') // len(lines)) / 1.2)
if maxsize:
maxfontsize = min(maxsize, maxfont_height)
else:
@@ -163,7 +163,7 @@ class JinjaFlowable(Flowable):
break
if o.get('verticalcenter', False):
- yoffset = (getmm(o, 'height') - (len(lines) * fontsize)) / 2
+ yoffset = (getmm(o, 'height') - (len(lines) * fontsize)) // 2
else:
yoffset = 0
diff --git a/postgresqleu/confreg/mobileviews.py b/postgresqleu/confreg/mobileviews.py
index 1d468fb0..9d1be66d 100644
--- a/postgresqleu/confreg/mobileviews.py
+++ b/postgresqleu/confreg/mobileviews.py
@@ -59,7 +59,7 @@ def conferencedata(request, confname, since):
conference = get_object_or_404(Conference, urlname=confname)
if since:
- datefilter = datetime.fromtimestamp(int(since) / 1000)
+ datefilter = datetime.fromtimestamp(int(since) // 1000)
else:
# Yes this is ugly, but i'm too lazy to rewrite the query
datefilter = datetime.fromtimestamp(0)
diff --git a/postgresqleu/confreg/pdfschedule.py b/postgresqleu/confreg/pdfschedule.py
index 0f56e43a..e3de40cd 100644
--- a/postgresqleu/confreg/pdfschedule.py
+++ b/postgresqleu/confreg/pdfschedule.py
@@ -89,7 +89,7 @@ def build_linear_pdf_schedule(conference, room, tracks, day, colored, pagesize,
def _finalize_page():
canvas.setFont("DejaVu Serif", 20)
- canvas.drawCentredString(width / 2, height - cm(2), "%s - %s" % (room.roomname, lastdate.strftime(titledatefmt)))
+ canvas.drawCentredString(width // 2, height - cm(2), "%s - %s" % (room.roomname, lastdate.strftime(titledatefmt)))
t = Table(tbldata, colWidths=[cm(3), width - cm(3) - 2 * table_horiz_margin])
t.setStyle(TableStyle(tblstyle))
@@ -168,7 +168,7 @@ def build_complete_pdf_schedule(conference, tracks, day, colored, pagesize, orie
# >1 page per day, so we try to find the breakpoints. We do this by locating
# cross-schedule sessions at appropriate times, and including those both on
# the previous and the current schedule.
- secondsperpage = dd['length'].seconds / pagesperday
+ secondsperpage = dd['length'].seconds // pagesperday
cross_sessions = [s for s in dd['sessions'] if s.cross_schedule]
@@ -202,10 +202,10 @@ def build_complete_pdf_schedule(conference, tracks, day, colored, pagesize, orie
# Only on the first page in multipage schedules
canvas.setFont("DejaVu Serif", 20)
- canvas.drawCentredString(width / 2, height - cm(2), d.strftime(titledatefmt))
+ canvas.drawCentredString(width // 2, height - cm(2), d.strftime(titledatefmt))
roomcount = len(dd['rooms'])
- roomwidth = usablewidth / roomcount
+ roomwidth = usablewidth // roomcount
# Figure out font size for the room title. Use the biggest one that will still
# fit within the boxes.
@@ -223,8 +223,8 @@ def build_complete_pdf_schedule(conference, tracks, day, colored, pagesize, orie
roompos = {}
for r in sorted(dd['rooms'], key=lambda x: (x.sortkey, x.roomname)):
canvas.rect(cm(2) + len(roompos) * roomwidth, height - cm(4), roomwidth, cm(1), stroke=1)
- canvas.drawCentredString(cm(2) + len(roompos) * roomwidth + roomwidth / 2,
- height - cm(4) + (cm(1) - roomtitlefontsize) / 2,
+ canvas.drawCentredString(cm(2) + len(roompos) * roomwidth + roomwidth // 2,
+ height - cm(4) + (cm(1) - roomtitlefontsize) // 2,
r.roomname)
roompos[r] = len(roompos)
diff --git a/postgresqleu/confreg/reporting.py b/postgresqleu/confreg/reporting.py
index c338e04f..4bd255e5 100644
--- a/postgresqleu/confreg/reporting.py
+++ b/postgresqleu/confreg/reporting.py
@@ -92,7 +92,7 @@ class MultiConferenceReport(object):
maxseen = max(max(myvals), maxseen)
if maxday - minday:
- maxpred = float(maxseen) * maxday / (maxday - minday)
+ maxpred = float(maxseen) * maxday // (maxday - minday)
else:
maxpred = 10
self.graphdata = zip(*allvals)
diff --git a/postgresqleu/confreg/util.py b/postgresqleu/confreg/util.py
index 656da520..d3a79daa 100644
--- a/postgresqleu/confreg/util.py
+++ b/postgresqleu/confreg/util.py
@@ -3,6 +3,7 @@ from django.shortcuts import get_object_or_404
from django.conf import settings
from django.core.exceptions import PermissionDenied
+from decimal import Decimal
from datetime import datetime, date, timedelta
import urllib
from io import BytesIO
@@ -88,9 +89,10 @@ def invoicerows_for_registration(reg, update_used_vouchers):
else:
# Percentage discount. Can be either off the total or just the reg
if d.regonly:
+ # regtype.cost is Decimal
discount = reg.regtype.cost * d.discountpercentage / 100
else:
- discount = current_total * d.discountpercentage / 100
+ discount = Decimal(current_total) * d.discountpercentage / 100
if discount > 0:
r.append([' Discount code %s' % d.code, 1, -discount, reg.conference.vat_registrations])
except DiscountCode.DoesNotExist:
diff --git a/postgresqleu/confreg/views.py b/postgresqleu/confreg/views.py
index 376e4358..cbf12422 100644
--- a/postgresqleu/confreg/views.py
+++ b/postgresqleu/confreg/views.py
@@ -994,12 +994,12 @@ class SessionSet(object):
def roomwidth(self):
if len(self.rooms):
- return int(self.totalwidth / len(self.rooms))
+ return int(self.totalwidth // len(self.rooms))
else:
return 0
def timediff_to_y_pixels(self, t, compareto):
- return ((t - compareto).seconds / 60) * self.pixelsperminute
+ return ((t - compareto).seconds // 60) * self.pixelsperminute
def allrooms(self):
return [{
@@ -1017,7 +1017,7 @@ class SessionSet(object):
if s['cross_schedule'] or s['room_id'] == roomid:
if roomprevsess and roomprevsess['endtime'] < s['starttime']:
yield {'empty': True,
- 'length': (s['starttime'] - roomprevsess['endtime']).total_seconds() / 60,
+ 'length': (s['starttime'] - roomprevsess['endtime']).total_seconds() // 60,
}
roomprevsess = s
yield s
@@ -2442,7 +2442,7 @@ def createschedule(request, confname):
sm = re_slot.match(k)
if not sm:
raise Exception("Could not find slot, invalid data in POST")
- roomid = int(int(sm.group(1)) / 1000000)
+ roomid = int(int(sm.group(1)) // 1000000)
slotid = int(sm.group(1)) % 1000000
if sess.tentativeroom is None or sess.tentativeroom.id != roomid or sess.tentativescheduleslot is None or sess.tentativescheduleslot.id != slotid:
sess.tentativeroom = Room.objects.get(pk=roomid)
@@ -2496,7 +2496,7 @@ def createschedule(request, confname):
'days': days,
'sessions': sessions,
'tracks': tracks,
- 'sesswidth': min(600 / len(allrooms), 150),
+ 'sesswidth': min(600 // len(allrooms), 150),
'availableheight': len(sessions) * 75,
'helplink': 'schedule',
})
diff --git a/postgresqleu/elections/views.py b/postgresqleu/elections/views.py
index 37684590..a82b202f 100644
--- a/postgresqleu/elections/views.py
+++ b/postgresqleu/elections/views.py
@@ -49,7 +49,7 @@ def election(request, electionid):
return render(request, 'elections/results.html', {
'election': election,
'topscore': res[0][1],
- 'scores': [{'name': r[0], 'score': r[1], 'width': 300 * r[1] / res[0][1]} for r in res],
+ 'scores': [{'name': r[0], 'score': r[1], 'width': 300 * r[1] // res[0][1]} for r in res],
})
if len(election.candidate_set.all()) <= 0:
diff --git a/postgresqleu/util/misc/baseinvoice.py b/postgresqleu/util/misc/baseinvoice.py
index 149fc576..406559eb 100755
--- a/postgresqleu/util/misc/baseinvoice.py
+++ b/postgresqleu/util/misc/baseinvoice.py
@@ -134,12 +134,12 @@ class BaseInvoice(PDFBase):
# We can fit ROWS_PER_PAGE rows on one page. We might want to do something
# cute to avoid a single row on it's own page in the future, but
# for now, just split it evenly.
- for pagenum in range(0, (len(self.rows) - 1) / self.ROWS_PER_PAGE + 1):
+ for pagenum in range(0, (len(self.rows) - 1) // self.ROWS_PER_PAGE + 1):
self.draw_header()
- islastpage = (pagenum == (len(self.rows) - 1) / self.ROWS_PER_PAGE)
+ islastpage = (pagenum == (len(self.rows) - 1) // self.ROWS_PER_PAGE)
if len(self.rows) > self.ROWS_PER_PAGE:
- suffix = " (page %s/%s)" % (pagenum + 1, len(self.rows) / self.ROWS_PER_PAGE + 1)
+ suffix = " (page %s/%s)" % (pagenum + 1, len(self.rows) // self.ROWS_PER_PAGE + 1)
else:
suffix = ''
@@ -387,13 +387,13 @@ class BaseRefund(PDFBase):
t = Table(tblpaid, [cm(10.5), cm(2.5), cm(1.5), cm(2.5)])
t.setStyle(TableStyle(style))
w, h = t.wrapOn(self.canvas, cm(10), cm(10))
- t.drawOn(self.canvas, (self.canvas._pagesize[0] - w) / 2, cm(17) - h)
+ t.drawOn(self.canvas, (self.canvas._pagesize[0] - w) // 2, cm(17) - h)
if self.previousamount:
t = Table(tblprevious, [cm(10.5), cm(2.5), cm(1.5), cm(2.5)])
t.setStyle(TableStyle(style))
w, h = t.wrapOn(self.canvas, cm(10), cm(10))
- t.drawOn(self.canvas, (self.canvas._pagesize[0] - w) / 2, cm(17) - h * 2 - cm(1))
+ t.drawOn(self.canvas, (self.canvas._pagesize[0] - w) // 2, cm(17) - h * 2 - cm(1))
extraofs = h + cm(1)
else:
extraofs = 0
@@ -401,7 +401,7 @@ class BaseRefund(PDFBase):
t = Table(tblrefunded, [cm(10.5), cm(2.5), cm(1.5), cm(2.5)])
t.setStyle(TableStyle(style))
w, h = t.wrapOn(self.canvas, cm(10), cm(10))
- t.drawOn(self.canvas, (self.canvas._pagesize[0] - w) / 2, cm(17) - h * 2 - cm(1) - extraofs)
+ t.drawOn(self.canvas, (self.canvas._pagesize[0] - w) // 2, cm(17) - h * 2 - cm(1) - extraofs)
self.canvas.drawCentredString(cm(10.5), cm(16.3) - h * 2 - cm(2) - extraofs, "This refund was issued {0}".format(self.refunddate.strftime("%B %d, %Y")))