Prosty konsolowy kalendarz – cz.2

We wcześniejszym >>wpisie<< konsolowy kalendarz nie wykorzystuje bogactwa modułu calendar. Aby uprościć kod można wykorzystać 'gotowca’ czyli klasę TextCalendar z tego modułu. Dzięki temu można zdefiniować funkcję cal2(), którą można zaimportować z modułu cal2, bądź też wywołać z konsoli. Przy wywołaniu z konsoli musimy nadać plikowi prawa do wykonania (chmod +x cal2.py).

Uruchomienie pliku bez podania argumentów tzn. ./cal2.py spowoduje wyświetlenie w konsoli kalendarza dla bieżącego roku i miesiąca. Alternatywnie możemy uruchomić program z 2 argumentami: rok oraz miesiąc. Podanie innej liczby argumentów wywoła wyjątek TypeError.

#!/usr/bin/env python

import calendar

from datetime import datetime

import sys

def cal2(year=datetime.today().year, month=datetime.today().month):
    '''
    Simple console calendar.
    '''
    c = calendar
    text_calendar = c.TextCalendar(c.firstweekday())
    print(text_calendar.formatmonth(year, month))

if __name__ == '__main__':
    args = sys.argv[1:]
    if len(args) == 0:
        cal2()
    elif len(args) == 2:
        cal2(int(args[0]), int(args[1]))
    else:
        raise TypeError(
            'cal2() takes 2 arguments ({} given)'.format(len(args)))

Zamiast klasy TextCalendar możemy użyć klasy potomnej – LocaleTextCalendar i uzyskać napisy zgodne z lokalnymi ustawieniami językowymi.