def add_week_form(self): """Displays a form for adding lucky numbers for one week (at most).""" today = datetime.date.today() weekday = datetime.date.weekday(today) # If it is Saturday or Sunday today, go to the next Monday if weekday > 4: monday = self._closest_working_day(today) else: monday = today - datetime.timedelta(weekday) # Find the first date a lucky number can be drown for last = LuckyNumber.last() if last.date < monday: c.first_date = monday else: c.first_date = self._closest_working_day(last.date) # Find the count of remaining days c.count = 5 - datetime.date.weekday(c.first_date) # Draw lucky numbers c.numbers = LuckyNumber.draw() # Not enough numbers to fill entire week if len(c.numbers) < c.count: c.count = len(c.numbers) return render('lucky/add_form.xml')
def left(self): """ Render left lucky numbers. """ c.numbers = LuckyNumber.left() return render('lucky/left.xml')
def current_week(self): """ Lucky numbers for current or next week. """ change_hour = 15 c.numbers = LuckyNumber.current_week(change_hour) return render('lucky/week.xml')
def current_week_pdf(self): """Lucky numbers for current or next week in pdf format.""" change_hour = 15 numbers = LuckyNumber.current_week(change_hour) if len(numbers) == 0: return redirect(url('lucky_week')) # Register fonts ubuntu_r = resource_filename(Requirement.parse("SIS"), "resources/Ubuntu-R.ttf") ubuntu_b = resource_filename(Requirement.parse("SIS"), "resources/Ubuntu-B.ttf") pdfmetrics.registerFont(TTFont('Ubuntu', ubuntu_r)) pdfmetrics.registerFont(TTFont('Ubuntu Bold', ubuntu_b)) numbers_pdf = StringIO.StringIO() doc = SimpleDocTemplate(numbers_pdf, pagesize=A4, topMargin=A4[1]*0.26) doc.author = 'SIS' doc.title = 'Szczęśliwy numerek' data = [] for number in numbers: date = number.date.strftime("%d.%m.%y") data.append(('{0} -'.format(date), str(number.number))) table = Table(data) table.setStyle(TableStyle([ ('FONT', (0, 0), (0, -1), 'Ubuntu', 80), ('FONT', (1, 0), (1, -1), 'Ubuntu Bold', 80), ])) def header_and_footer(canvas, document): canvas.saveState() size = document.pagesize center = size[0] / 2 canvas.setFont('Ubuntu', 80) canvas.drawCentredString(center, size[1] - document.topMargin / 2, "SZCZĘŚLIWY") canvas.drawCentredString(center, size[1] - document.topMargin + 20, 'NUMEREK') canvas.setFont('Ubuntu', 15) canvas.drawRightString(size[0] - document.rightMargin, document.bottomMargin - 20, "Samorząd Uczniowski") canvas.restoreState() doc.build([table], onFirstPage=header_and_footer, onLaterPages=header_and_footer) response.headers['Content-type'] = 'application/pdf' return numbers_pdf.getvalue()
def parse_line(self, lnr, line): """Parse single line.""" m = self.pattern.match(line) if not m: raise LineError(lnr, line, "Doesn't match the format") raw_date, raw_number = m.groups() if raw_date in self.dates: raise LineError(lnr, line, "Date '%s' occured more than once" \ % raw_date) self.dates.append(raw_date) date = datetime.datetime.strptime(raw_date, '%Y-%m-%d').date() number = int(raw_number) return LuckyNumber(date, number)
def current(self): # TODO This could be set in the settings file change_hour = 15 c.lucky = LuckyNumber.current(change_hour) return render('lucky/current.xml')
def index(self): change_hour = 15 c.current = LuckyNumber.current(change_hour) c.week = LuckyNumber.current_week(change_hour) c.left = LuckyNumber.left() return render('lucky/index.xml')
def draw(self): c.numbers = LuckyNumber.draw() return render('lucky/draw.xml')