Edit:
Updated the link from from novapost's github repo.
I recently came across https://github.com/peopledoc/workalendar.
I use it for France and it works like a charm.
"""
>>> from datetime import date
>>> from workalendar.europe import France
>>> cal = France()
>>> cal.holidays(2013)
[(datetime.date(2013, 1, 1), 'New year'),
(datetime.date(2013, 4, 1), 'Easter Monday'),
(datetime.date(2013, 5, 1), 'Labour Day'),
(datetime.date(2013, 5, 8), 'Victory in Europe Day'),
(datetime.date(2013, 5, 9), 'Ascension Thursday'),
(datetime.date(2013, 5, 20), 'Whit Monday'),
(datetime.date(2013, 5, 30), 'Corpus Christi'),
(datetime.date(2013, 7, 14), 'Bastille Day'),
(datetime.date(2013, 8, 15), 'Assumption of Mary to Heaven'),
(datetime.date(2013, 11, 1), 'All Saints Day'),
(datetime.date(2013, 11, 11), 'Armistice Day'),
(datetime.date(2013, 12, 25), 'Christmas Day')]
>>> cal.is_working_day(date(2013, 12, 25)) # it's Christmas
False
>>> cal.is_working_day(date(2013, 12, 29)) # it's Sunday
False
>>> cal.is_working_day(date(2013, 12, 26))
True