More cleaning up. Eliminate self.year and more.

* src/plugins/WebCal.py


svn: r11286
This commit is contained in:
Kees Bakker 2008-11-10 22:47:48 +00:00
parent 7b6a5144a1
commit 5d35e5d867

View File

@ -47,8 +47,8 @@ TODO list:
- untangle calendar_build, it's too complex the way it is - untangle calendar_build, it's too complex the way it is
- correct surname (prefix missing, or misinterpreted) - correct surname (prefix missing, or misinterpreted)
- add_day_item and self.calendar seem to be adding list entries as list (list of list) - add_day_item and self.calendar seem to be adding list entries as list (list of list)
- get rid of self.year
- daylight saving not just for USA and Europe - daylight saving not just for USA and Europe
- move the close_file() from one_day() to caller
""" """
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -230,8 +230,6 @@ class WebCalReport(Report):
self.partyear = menu.get_option_by_name('partyear').get_value() self.partyear = menu.get_option_by_name('partyear').get_value()
self.multiyear = menu.get_option_by_name('multiyear').get_value() self.multiyear = menu.get_option_by_name('multiyear').get_value()
# self.start_year, and self.year are the same value
self.year = menu.get_option_by_name('start_year').get_value()
self.start_year = menu.get_option_by_name('start_year').get_value() self.start_year = menu.get_option_by_name('start_year').get_value()
self.end_year = menu.get_option_by_name('end_year').get_value() self.end_year = menu.get_option_by_name('end_year').get_value()
@ -333,7 +331,7 @@ class WebCalReport(Report):
month_dict[day] = day_list month_dict[day] = day_list
self.calendar[month] = month_dict self.calendar[month] = month_dict
def get_holidays(self, country="United States"): def get_holidays(self, year, country="United States"):
""" """
Looks in multiple places for holidays.xml file. Looks in multiple places for holidays.xml file.
the holidays file will be used first if it exists in user's plugins, otherwise, the holidays file will be used first if it exists in user's plugins, otherwise,
@ -349,9 +347,9 @@ class WebCalReport(Report):
elif os.path.exists(fname2): elif os.path.exists(fname2):
holiday_full_path = fname2 holiday_full_path = fname2
if holiday_full_path != "": if holiday_full_path != "":
self.process_holiday_file(holiday_full_path, country) self.process_holiday_file(year, holiday_full_path, country)
def process_holiday_file(self, filename, country): def process_holiday_file(self, year, filename, country):
""" """
This will process the holidays file for the selected country. This will process the holidays file for the selected country.
@ -367,20 +365,20 @@ class WebCalReport(Report):
parser = Xml2Obj() parser = Xml2Obj()
element = parser.Parse(filename) element = parser.Parse(filename)
holidays_calendar = Holidays(element, country) holidays_calendar = Holidays(element, country)
date = datetime.date(self.year, 1, 1) date = datetime.date(year, 1, 1)
while date.year == self.year: while date.year == year:
event_date = time.strptime('%d/%d/%d' % (date.year, date.month, date.day), '%Y/%m/%d') event_date = time.strptime('%d/%d/%d' % (date.year, date.month, date.day), '%Y/%m/%d')
holidays = holidays_calendar.check_date(date) holidays = holidays_calendar.check_date(date)
for text in holidays: for text in holidays:
if text == "Easter": # TODO. Verify if this needs translation, and how if text == "Easter": # TODO. Verify if this needs translation, and how
easter = _easter(self.year) easter = _easter(year)
self.add_holiday_item(_("Easter"), easter[0], easter[1], easter[2]) self.add_holiday_item(_("Easter"), easter[0], easter[1], easter[2])
elif text == "Daylight Saving begins": # TODO. Verify if this needs translation, and how elif text == "Daylight Saving begins": # TODO. Verify if this needs translation, and how
# TODO. There is more than USA and Europe. # TODO. There is more than USA and Europe.
if Utils.xml_lang() == "en-US": # DST for United States of America if Utils.xml_lang() == "en-US": # DST for United States of America
dst_start, dst_stop = _get_dst_start_stop(self.year) dst_start, dst_stop = _get_dst_start_stop(year)
else: # DST for Europe else: # DST for Europe
dst_start, dst_stop = _get_dst_start_stop(self.year, "eu") dst_start, dst_stop = _get_dst_start_stop(year, "eu")
self.add_holiday_item(_("Daylight Saving begins"), \ self.add_holiday_item(_("Daylight Saving begins"), \
dst_start[0], dst_start[1], dst_start[2]) dst_start[0], dst_start[1], dst_start[2])
self.add_holiday_item(_("Daylight Saving ends"), \ self.add_holiday_item(_("Daylight Saving ends"), \
@ -405,7 +403,7 @@ class WebCalReport(Report):
def copy_calendar_files(self): def copy_calendar_files(self):
""" """
Copies all the necessary files... Copies all the necessary files
""" """
# Copy the _CALENDARSCREEN stylesheet # Copy the _CALENDARSCREEN stylesheet
if self.css != "": if self.css != "":
@ -429,7 +427,7 @@ class WebCalReport(Report):
from_path = os.path.join(const.IMAGE_DIR, f) from_path = os.path.join(const.IMAGE_DIR, f)
self.copy_file(from_path, f, "images") self.copy_file(from_path, f, "images")
def display_month_navs(self, of, nr_up, currentsection, use_home=False): def display_month_navs(self, of, nr_up, year, currentsection, use_home=False):
""" """
Will create and display the navigation menu bar Will create and display the navigation menu bar
@ -463,7 +461,7 @@ class WebCalReport(Report):
if cond: if cond:
subdirs = ['..'] * nr_up subdirs = ['..'] * nr_up
subdirs.append(str(self.year)) subdirs.append(str(year))
# Note. We use '/' here because it is a URL, not a OS dependent pathname # Note. We use '/' here because it is a URL, not a OS dependent pathname
if type(url_fname) == int: if type(url_fname) == int:
@ -497,7 +495,7 @@ class WebCalReport(Report):
of.write('\t<ul>\n') of.write('\t<ul>\n')
cols = 0 cols = 0
cal_year = self.start_year cal_year = self.start_year
while ((0 <= cols <= 25) and (self.start_year <= cal_year <= self.end_year)): while ((0 <= cols < 25) and (self.start_year <= cal_year <= self.end_year)):
url = '' url = ''
cs = False cs = False
@ -513,11 +511,8 @@ class WebCalReport(Report):
if cal_year == self.today.year: if cal_year == self.today.year:
lng_month = _get_long_month_name(self.today.month) lng_month = _get_long_month_name(self.today.month)
# long month will always need an etension added to it
lng_month += self.ext
# Note. We use '/' here because it is a URL, not a OS dependent pathname # Note. We use '/' here because it is a URL, not a OS dependent pathname
url = '/'.join(subdirs + [lng_month]) url = '/'.join(subdirs + [lng_month]) + self.ext
# determine if we need to highlight??? # determine if we need to highlight???
if str(cal_year) == currentsection: if str(cal_year) == currentsection:
@ -537,7 +532,7 @@ class WebCalReport(Report):
of.write('\t</ul>\n') of.write('\t</ul>\n')
of.write('</div>\n\n') of.write('</div>\n\n')
def calendar_common(self, of, nr_up, currsec1, title, body_id, year, use_home=False, add_print=False): def calendar_common(self, of, nr_up, year, currsec1, title, body_id, use_home=False, add_print=False):
""" """
Will create the common information for each calendar being created Will create the common information for each calendar being created
""" """
@ -570,7 +565,7 @@ class WebCalReport(Report):
# Create Month Navigation Menu # Create Month Navigation Menu
# identify currentsection for proper highlighting # identify currentsection for proper highlighting
self.display_month_navs(of, nr_up, currsec1, use_home) self.display_month_navs(of, nr_up, year, currsec1, use_home)
def calendar_build(self, of, cal, year, month): def calendar_build(self, of, cal, year, month):
""" """
@ -698,7 +693,7 @@ class WebCalReport(Report):
# Year at a Glance # Year at a Glance
if cal == "yg": if cal == "yg":
# Notice the code in one_day(): cal_fname = '%s%d%s' % (shrt_month, day, self.ext) # Notice the code in one_day(): cal_fname = '%s%d%s' % (shrt_month, day, self.ext)
# TODO. Perhaps pass filename to one_day() # TODO. Create file for one_day()
fname = '%s%d%s' % (shrt_month, day, self.ext) fname = '%s%d%s' % (shrt_month, day, self.ext)
of.write('\t\t\t\t<a id="%s%d" href="%s/%s" title="%s%d">\n' of.write('\t\t\t\t<a id="%s%d" href="%s/%s" title="%s%d">\n'
% (shrt_month, day, lng_month, fname, shrt_month, day)) % (shrt_month, day, lng_month, fname, shrt_month, day))
@ -710,7 +705,7 @@ class WebCalReport(Report):
of.write('\t\t\t\t<div class="date">%d</div>\n' % day) of.write('\t\t\t\t<div class="date">%d</div>\n' % day)
# year_glance() and normal_cal() both need this to itemize the list # year_glance() and normal_cal() both need this to itemize the list
self.one_day(of, evt_date, cal, holiday_list, bday_anniv_list) self.one_day(of, year, evt_date, cal, holiday_list, bday_anniv_list)
# no holiday/ bday/ anniversary this day # no holiday/ bday/ anniversary this day
else: else:
@ -831,7 +826,7 @@ class WebCalReport(Report):
def close_file(self, of): def close_file(self, of):
of.close() of.close()
def one_day(self, of, event_date, cal, holiday_list, bday_anniv_list): def one_day(self, of, year, event_date, cal, holiday_list, bday_anniv_list):
""" """
This method creates the One Day page for "Year At A Glance" This method creates the One Day page for "Year At A Glance"
@ -860,12 +855,12 @@ class WebCalReport(Report):
for line in bday_anniv_list: for line in bday_anniv_list:
for date, text, event in line: for date, text, event in line:
# '...' signifies an incomplete date for an event # '...' signifies an incomplete date for an event. See add_day_item()
txt_str = None txt_str = None
if date != '...': if date != '...':
years = self.year - date.year years = year - date.year
# a birthday # a birthday
if event == 'birthday': if event == 'birthday':
if years == 1: if years == 1:
txt_str = _('%(short_name)s, <em>%(age)d</em> year old') % { txt_str = _('%(short_name)s, <em>%(age)d</em> year old') % {
@ -882,7 +877,7 @@ class WebCalReport(Report):
else: else:
txt_str = None txt_str = None
# an anniversary # an anniversary
elif event == 'anniversary': elif event == 'anniversary':
# if married years is less than 76 years # if married years is less than 76 years
@ -933,7 +928,7 @@ class WebCalReport(Report):
my_date = _dd.display(my_date) my_date = _dd.display(my_date)
# create calendar common info for each calendar # create calendar common info for each calendar
self.calendar_common(of, nr_up, lng_month, _('One Day Within A Year'), my_date, year) self.calendar_common(of, nr_up, year, lng_month, _('One Day Within A Year'), my_date)
if self.multiyear: if self.multiyear:
# create Year Navigation menu # create Year Navigation menu
self.display_year_navs(of, nr_up, str(year)) self.display_year_navs(of, nr_up, str(year))
@ -970,7 +965,7 @@ class WebCalReport(Report):
title = _('Blank Calendar') title = _('Blank Calendar')
# create calendar common info for each calendar # create calendar common info for each calendar
self.calendar_common(of, nr_up, 'blankyear', title, 'blankcal', year) self.calendar_common(of, nr_up, year, 'blankyear', title, 'blankcal')
if self.multiyear: if self.multiyear:
# create Year Navigation menu # create Year Navigation menu
self.display_year_navs(of, nr_up, str(year)) self.display_year_navs(of, nr_up, str(year))
@ -1006,10 +1001,10 @@ class WebCalReport(Report):
of = self.create_file(cal_fname, str(year)) of = self.create_file(cal_fname, str(year))
# page title # page title
title = _("%(year)d, At A Glance") % {'year' : self.year} title = _("%(year)d, At A Glance") % {'year' : year}
# create calendar common info for each calendar # create calendar common info for each calendar
self.calendar_common(of, nr_up, 'fullyear', title, 'yearglance', year) self.calendar_common(of, nr_up, year, 'fullyear', title, 'yearglance')
if self.multiyear: if self.multiyear:
# create Year Navigation menu # create Year Navigation menu
self.display_year_navs(of, nr_up, str(year)) self.display_year_navs(of, nr_up, str(year))
@ -1030,7 +1025,7 @@ class WebCalReport(Report):
# build the calendar # build the calendar
self.calendar_build(of, "yg", year, month) self.calendar_build(of, "yg", year, month)
# Note. The week rows are filled up to make them all 6 weeks long. # Note. The week rows are filled up to make them all 6 weeks long.
nweeks = len(calendar.monthcalendar(self.year, month)) nweeks = len(calendar.monthcalendar(year, month))
for i in range(nweeks+1, 7): for i in range(nweeks+1, 7):
of.write('\t\t<tr class="week%d">\n' % i) of.write('\t\t<tr class="week%d">\n' % i)
of.write('\t\t\t<td id="emptyDays" colspan="7">\n') of.write('\t\t\t<td id="emptyDays" colspan="7">\n')
@ -1071,7 +1066,8 @@ class WebCalReport(Report):
self.progress = Utils.ProgressMeter(_("Generate XHTML Calendars"), '') self.progress = Utils.ProgressMeter(_("Generate XHTML Calendars"), '')
# get data from database for birthdays/ anniversaries # get data from database for birthdays/ anniversaries
self.collect_data() # TODO. Verify that we collect correct info based on start_year
self.collect_data(self.start_year)
if self.css == "Web_Mainz.css": if self.css == "Web_Mainz.css":
# Copy Mainz Style Images # Copy Mainz Style Images
@ -1088,8 +1084,8 @@ class WebCalReport(Report):
# navigation bar length will only support twenty-five years at any given time # navigation bar length will only support twenty-five years at any given time
if self.multiyear: if self.multiyear:
# Clip to max 25 years # Clip to max 25 years
if ((self.end_year - self.start_year) > 25): if ((self.end_year - self.start_year + 1) > 25):
self.end_year = (self.start_year + 25) self.end_year = self.start_year + 25 - 1
for cal_year in range(self.start_year, (self.end_year + 1)): for cal_year in range(self.start_year, (self.end_year + 1)):
@ -1101,7 +1097,7 @@ class WebCalReport(Report):
# get the information from holidays for every year being created # get the information from holidays for every year being created
if self.country != 0: # Don't include holidays if self.country != 0: # Don't include holidays
self.get_holidays(_COUNTRIES[self.country]) # _country is currently global self.get_holidays(cal_year, _COUNTRIES[self.country]) # _country is currently global
# adjust the months being created if self.partyear is True, # adjust the months being created if self.partyear is True,
# and if the year is the current year, then start month is current month # and if the year is the current year, then start month is current month
@ -1113,7 +1109,7 @@ class WebCalReport(Report):
# create "WebCal" calendar pages # create "WebCal" calendar pages
self.normal_cal(cal_year) self.normal_cal(cal_year)
# create "Blank Year " calendar page # create "Blank Year" calendar page
if self.blankyear: if self.blankyear:
self.blank_year(cal_year) self.blank_year(cal_year)
@ -1121,18 +1117,15 @@ class WebCalReport(Report):
if self.fullyear: if self.fullyear:
self.year_glance(cal_year) self.year_glance(cal_year)
# increase so that birthdays and anniversaries can be
# re-calculated for each year being created
# TODO. Ugly! Get rid of self.year
self.year += 1
# a single year # a single year
else: else:
cal_year = self.start_year
self.holidays = {} self.holidays = {}
# get the information from holidays for each year being created # get the information from holidays for each year being created
if self.country != 0: # Don't include holidays if self.country != 0: # Don't include holidays
self.get_holidays(_COUNTRIES[self.country]) # _COUNTRIES is currently global self.get_holidays(cal_year, _COUNTRIES[self.country]) # _COUNTRIES is currently global
# generate progress pass for single year # generate progress pass for single year
#self.progress.set_pass(_('Creating calendars'), self.end_month - self.start_month) #self.progress.set_pass(_('Creating calendars'), self.end_month - self.start_month)
@ -1140,20 +1133,20 @@ class WebCalReport(Report):
# adjust the months being created if self.partyear is True, # adjust the months being created if self.partyear is True,
# and if the year is the current year, then start month is current month # and if the year is the current year, then start month is current month
self.start_month = 1 self.start_month = 1
if self.year == self.today.year: if cal_year == self.today.year:
if self.partyear: if self.partyear:
self.start_month = self.today.month self.start_month = self.today.month
# create "WebCal" # create "WebCal" calendar pages
self.normal_cal(self.year) self.normal_cal(cal_year)
# create "Blank Year" # create "Blank Year" calendar page
if self.blankyear: if self.blankyear:
self.blank_year(self.year) self.blank_year(cal_year)
# create "Year At A Glance" # create "Year At A Glance"
if self.fullyear: if self.fullyear:
self.year_glance(self.year) self.year_glance(cal_year)
# Close the progress meter # Close the progress meter
self.progress.close() self.progress.close()
@ -1181,7 +1174,7 @@ class WebCalReport(Report):
of = self.create_file(cal_fname, str(year)) of = self.create_file(cal_fname, str(year))
# create calendar common info for each calendar # create calendar common info for each calendar
self.calendar_common(of, nr_up, cal_fname, self.title_text, 'WebCal', year, use_home=True) self.calendar_common(of, nr_up, year, cal_fname, self.title_text, 'WebCal', use_home=True)
if self.multiyear: if self.multiyear:
# create Year Navigation menu # create Year Navigation menu
self.display_year_navs(of, nr_up, str(year)) self.display_year_navs(of, nr_up, str(year))
@ -1209,7 +1202,7 @@ class WebCalReport(Report):
# increase progress bar # increase progress bar
self.progress.step() self.progress.step()
def collect_data(self): def collect_data(self, year):
""" """
This method runs through the data, and collects the relevant dates This method runs through the data, and collects the relevant dates
and text. and text.
@ -1242,7 +1235,7 @@ class WebCalReport(Report):
# if person is dead, STOP! Nothing further to do # if person is dead, STOP! Nothing further to do
if death_date == None: if death_date == None:
living = probably_alive(person, self.database, _make_date(self.year, 1, 1), 0) living = probably_alive(person, self.database, _make_date(year, 1, 1), 0)
# add birthday if requested # add birthday if requested
if self.birthday and birth_date != None and ((self.alive and living) or not self.alive): if self.birthday and birth_date != None and ((self.alive and living) or not self.alive):
@ -1297,7 +1290,7 @@ class WebCalReport(Report):
spouse_name = _get_short_name(spouse) spouse_name = _get_short_name(spouse)
short_name = _get_short_name(person) short_name = _get_short_name(person)
if self.alive: if self.alive:
if not probably_alive(spouse, self.database, _make_date(self.year, 1, 1), 0): if not probably_alive(spouse, self.database, _make_date(year, 1, 1), 0):
continue continue
are_married = _get_marrital_status(fam, self.database) are_married = _get_marrital_status(fam, self.database)
if are_married is not None: if are_married is not None: