summaryrefslogtreecommitdiffstats
path: root/Lib/calendar.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2000-02-02 15:10:15 (GMT)
committerGuido van Rossum <guido@python.org>2000-02-02 15:10:15 (GMT)
commit4acc25bd392216c4f867a10ca8081e7c8a739676 (patch)
treedb4976fa172404339b31aa7485a5316634e4c699 /Lib/calendar.py
parent113e70efa2b932a3ad2662875114133a1edb600c (diff)
downloadcpython-4acc25bd392216c4f867a10ca8081e7c8a739676.zip
cpython-4acc25bd392216c4f867a10ca8081e7c8a739676.tar.gz
cpython-4acc25bd392216c4f867a10ca8081e7c8a739676.tar.bz2
Mass patch by Ka-Ping Yee:
1. Comments at the beginning of the module, before functions, and before classes have been turned into docstrings. 2. Tabs are normalized to four spaces. Also, removed the "remove" function from dircmp.py, which reimplements list.remove() (it must have been very old).
Diffstat (limited to 'Lib/calendar.py')
-rw-r--r--Lib/calendar.py234
1 files changed, 116 insertions, 118 deletions
diff --git a/Lib/calendar.py b/Lib/calendar.py
index c9bc497..fa96278 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -1,6 +1,4 @@
-###############################
-# Calendar printing functions #
-###############################
+"""Calendar printing functions"""
# Revision 2: uses funtions from built-in time module
@@ -22,149 +20,149 @@ February = 2
mdays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Full and abbreviated names of weekdays
-day_name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', \
- 'Friday', 'Saturday', 'Sunday']
+day_name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
+ 'Friday', 'Saturday', 'Sunday']
day_abbr = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
# Full and abbreviated names of months (1-based arrays!!!)
-month_name = ['', 'January', 'February', 'March', 'April', \
- 'May', 'June', 'July', 'August', \
- 'September', 'October', 'November', 'December']
-month_abbr = [' ', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', \
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+month_name = ['', 'January', 'February', 'March', 'April',
+ 'May', 'June', 'July', 'August',
+ 'September', 'October', 'November', 'December']
+month_abbr = [' ', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
-# Return 1 for leap years, 0 for non-leap years
def isleap(year):
- return year % 4 == 0 and (year % 100 <> 0 or year % 400 == 0)
+ """Return 1 for leap years, 0 for non-leap years."""
+ return year % 4 == 0 and (year % 100 <> 0 or year % 400 == 0)
-# Return number of leap years in range [y1, y2)
-# Assume y1 <= y2 and no funny (non-leap century) years
def leapdays(y1, y2):
- return (y2+3)/4 - (y1+3)/4
+ """Return number of leap years in range [y1, y2).
+ Assume y1 <= y2 and no funny (non-leap century) years."""
+ return (y2+3)/4 - (y1+3)/4
-# Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), day (1-31)
def weekday(year, month, day):
- secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0))
- tuple = localtime(secs)
- return tuple[6]
+ """Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), day (1-31)."""
+ secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0))
+ tuple = localtime(secs)
+ return tuple[6]
-# Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month
def monthrange(year, month):
- if not 1 <= month <= 12: raise ValueError, 'bad month number'
- day1 = weekday(year, month, 1)
- ndays = mdays[month] + (month == February and isleap(year))
- return day1, ndays
+ """Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month."""
+ if not 1 <= month <= 12: raise ValueError, 'bad month number'
+ day1 = weekday(year, month, 1)
+ ndays = mdays[month] + (month == February and isleap(year))
+ return day1, ndays
-# Return a matrix representing a month's calendar
-# Each row represents a week; days outside this month are zero
def _monthcalendar(year, month):
- day1, ndays = monthrange(year, month)
- rows = []
- r7 = range(7)
- day = 1 - day1
- while day <= ndays:
- row = [0, 0, 0, 0, 0, 0, 0]
- for i in r7:
- if 1 <= day <= ndays: row[i] = day
- day = day + 1
- rows.append(row)
- return rows
-
-# Caching interface to _monthcalendar
+ """Return a matrix representing a month's calendar.
+ Each row represents a week; days outside this month are zero."""
+ day1, ndays = monthrange(year, month)
+ rows = []
+ r7 = range(7)
+ day = 1 - day1
+ while day <= ndays:
+ row = [0, 0, 0, 0, 0, 0, 0]
+ for i in r7:
+ if 1 <= day <= ndays: row[i] = day
+ day = day + 1
+ rows.append(row)
+ return rows
+
_mc_cache = {}
def monthcalendar(year, month):
- key = (year, month)
- if _mc_cache.has_key(key):
- return _mc_cache[key]
- else:
- _mc_cache[key] = ret = _monthcalendar(year, month)
- return ret
-
-# Center a string in a field
+ """Caching interface to _monthcalendar."""
+ key = (year, month)
+ if _mc_cache.has_key(key):
+ return _mc_cache[key]
+ else:
+ _mc_cache[key] = ret = _monthcalendar(year, month)
+ return ret
+
def _center(str, width):
- n = width - len(str)
- if n <= 0: return str
- return ' '*((n+1)/2) + str + ' '*((n)/2)
+ """Center a string in a field."""
+ n = width - len(str)
+ if n <= 0: return str
+ return ' '*((n+1)/2) + str + ' '*((n)/2)
# XXX The following code knows that print separates items with space!
-# Print a single week (no newline)
def prweek(week, width):
- for day in week:
- if day == 0: s = ''
- else: s = `day`
- print _center(s, width),
+ """Print a single week (no newline)."""
+ for day in week:
+ if day == 0: s = ''
+ else: s = `day`
+ print _center(s, width),
-# Return a header for a week
def weekheader(width):
- str = ''
- if width >= 9: names = day_name
- else: names = day_abbr
- for i in range(7):
- if str: str = str + ' '
- str = str + _center(names[i%7][:width], width)
- return str
-
-# Print a month's calendar
+ """Return a header for a week."""
+ str = ''
+ if width >= 9: names = day_name
+ else: names = day_abbr
+ for i in range(7):
+ if str: str = str + ' '
+ str = str + _center(names[i%7][:width], width)
+ return str
+
def prmonth(year, month, w = 0, l = 0):
- w = max(2, w)
- l = max(1, l)
- print _center(month_name[month] + ' ' + `year`, 7*(w+1) - 1),
- print '\n'*l,
- print weekheader(w),
- print '\n'*l,
- for week in monthcalendar(year, month):
- prweek(week, w)
- print '\n'*l,
+ """Print a month's calendar."""
+ w = max(2, w)
+ l = max(1, l)
+ print _center(month_name[month] + ' ' + `year`, 7*(w+1) - 1),
+ print '\n'*l,
+ print weekheader(w),
+ print '\n'*l,
+ for week in monthcalendar(year, month):
+ prweek(week, w)
+ print '\n'*l,
# Spacing of month columns
-_colwidth = 7*3 - 1 # Amount printed by prweek()
-_spacing = ' '*4 # Spaces between columns
+_colwidth = 7*3 - 1 # Amount printed by prweek()
+_spacing = ' '*4 # Spaces between columns
-# 3-column formatting for year calendars
def format3c(a, b, c):
- print _center(a, _colwidth),
- print _spacing,
- print _center(b, _colwidth),
- print _spacing,
- print _center(c, _colwidth)
+ """3-column formatting for year calendars"""
+ print _center(a, _colwidth),
+ print _spacing,
+ print _center(b, _colwidth),
+ print _spacing,
+ print _center(c, _colwidth)
-# Print a year's calendar
def prcal(year):
- header = weekheader(2)
- format3c('', `year`, '')
- for q in range(January, January+12, 3):
- print
- format3c(month_name[q], month_name[q+1], month_name[q+2])
- format3c(header, header, header)
- data = []
- height = 0
- for month in range(q, q+3):
- cal = monthcalendar(year, month)
- if len(cal) > height: height = len(cal)
- data.append(cal)
- for i in range(height):
- for cal in data:
- if i >= len(cal):
- print ' '*_colwidth,
- else:
- prweek(cal[i], 2)
- print _spacing,
- print
-
-# Unrelated but handy function to calculate Unix timestamp from GMT
+ """Print a year's calendar."""
+ header = weekheader(2)
+ format3c('', `year`, '')
+ for q in range(January, January+12, 3):
+ print
+ format3c(month_name[q], month_name[q+1], month_name[q+2])
+ format3c(header, header, header)
+ data = []
+ height = 0
+ for month in range(q, q+3):
+ cal = monthcalendar(year, month)
+ if len(cal) > height: height = len(cal)
+ data.append(cal)
+ for i in range(height):
+ for cal in data:
+ if i >= len(cal):
+ print ' '*_colwidth,
+ else:
+ prweek(cal[i], 2)
+ print _spacing,
+ print
+
EPOCH = 1970
def timegm(tuple):
- year, month, day, hour, minute, second = tuple[:6]
- assert year >= EPOCH
- assert 1 <= month <= 12
- days = 365*(year-EPOCH) + leapdays(EPOCH, year)
- for i in range(1, month):
- days = days + mdays[i]
- if month > 2 and isleap(year):
- days = days + 1
- days = days + day - 1
- hours = days*24 + hour
- minutes = hours*60 + minute
- seconds = minutes*60 + second
- return seconds
+ """Unrelated but handy function to calculate Unix timestamp from GMT."""
+ year, month, day, hour, minute, second = tuple[:6]
+ assert year >= EPOCH
+ assert 1 <= month <= 12
+ days = 365*(year-EPOCH) + leapdays(EPOCH, year)
+ for i in range(1, month):
+ days = days + mdays[i]
+ if month > 2 and isleap(year):
+ days = days + 1
+ days = days + day - 1
+ hours = days*24 + hour
+ minutes = hours*60 + minute
+ seconds = minutes*60 + second
+ return seconds