Beispiel #1
0
Datei: lucky.py Projekt: kuba/SIS
    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')
Beispiel #2
0
Datei: lucky.py Projekt: kuba/SIS
    def left(self):
        """
        Render left lucky numbers.

        """
        c.numbers = LuckyNumber.left()
        return render('lucky/left.xml')
Beispiel #3
0
Datei: lucky.py Projekt: kuba/SIS
    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')
Beispiel #4
0
Datei: lucky.py Projekt: kuba/SIS
    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()
Beispiel #5
0
    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)
Beispiel #6
0
Datei: lucky.py Projekt: kuba/SIS
 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')
Beispiel #7
0
Datei: lucky.py Projekt: kuba/SIS
 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')
Beispiel #8
0
Datei: lucky.py Projekt: kuba/SIS
 def draw(self):
     c.numbers = LuckyNumber.draw()
     return render('lucky/draw.xml')