|
#!/usr/bin/env python2.7
# This code is written by Stephen C Phillips.
# It is in the public domain, so you can do what you like with it
# but a link to http://scphillips.com would be nice.
from datetime import date as ddate
class Holiday:
def __init__(self, date, country):
d = ddate(int(date[:4]),
int(date[4:6]),
int(date[6:])
)
self.date = d
self.country = country
def __str__(self):
return self.country + ': ' + str(self.date)
def _get_day(self):
# Monday is 0, Sunday is 6
return self.date.weekday()
day = property(_get_day)
#http://euroalert.net/dl/docs/open-data/euroalert-Public-Holidays-EU-2012.ics
cal_file = file('c:/tmp/euroalert-Public-Holidays-EU-2012.ics')
holidays = []
ignore_weekends = 1
for line in cal_file:
line = line[:-1]
if line.startswith('DTSTART'):
date = line[-8:]
if line.startswith('SUMMARY'):
country = line[8:]
if '/' in country:
country = country[:country.index('/')]
hol = Holiday(date, country)
if ignore_weekends and hol.day >= 5:
pass
else:
holidays.append(hol)
holidays_by_country = {}
for h in holidays:
holidays_by_country.setdefault(h.country, [])
holidays_by_country[h.country].append(h)
countries = holidays_by_country.keys()
countries_by_holidays = {}
for c, h in holidays_by_country.items():
num = len(h)
countries_by_holidays.setdefault(num, [])
countries_by_holidays[num].append(c)
print "*** LEADERBOARD ***"
for n in sorted(countries_by_holidays.keys(), reverse=True):
print n, ':', countries_by_holidays[n]
print "*******************"
def get_days(countries):
"Return the number of times not all partners will be on a call for each day of the week."
holidays_by_date = {}
for c in countries:
for h in holidays_by_country[c]:
holidays_by_date.setdefault(h.date, [])
holidays_by_date[h.date].append(h)
dates = holidays_by_date.keys()
days = [0,0,0,0,0,0,0]
for date in dates:
day = date.weekday()
#days[day] += len(holidays_by_date[date]) # this would tell you how many partners would be missing in total
days[day] += 1 # this is how many times not all partners are present
return days
project_countries = ['Austria', 'Belgium', 'France', 'Greece', 'Spain', 'Sweden', 'Wales and England']
days = get_days(project_countries)
print
print project_countries
print days
|