diff options
author | Magnus Hagander | 2019-01-04 14:21:00 +0000 |
---|---|---|
committer | Magnus Hagander | 2019-01-04 14:21:00 +0000 |
commit | 40493ac75d12dba360658f8bd6ee03b66a70b81d (patch) | |
tree | c6c6010c71a4c109d5ef0548392ba58d026491c0 /postgresqleu | |
parent | 6d44349af29bcd83e477a48e2a555c1314bce7eb (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-x | postgresqleu/confreg/jinjapdf.py | 4 | ||||
-rw-r--r-- | postgresqleu/confreg/mobileviews.py | 2 | ||||
-rw-r--r-- | postgresqleu/confreg/pdfschedule.py | 12 | ||||
-rw-r--r-- | postgresqleu/confreg/reporting.py | 2 | ||||
-rw-r--r-- | postgresqleu/confreg/util.py | 4 | ||||
-rw-r--r-- | postgresqleu/confreg/views.py | 10 | ||||
-rw-r--r-- | postgresqleu/elections/views.py | 2 | ||||
-rwxr-xr-x | postgresqleu/util/misc/baseinvoice.py | 12 |
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"))) |