Beispiel #1
0
def daterange_from_path(path):
	'''Determine the calendar dates mapped by a specific page
	@param path: a L{Path} object
	@returns: a 3-tuple of:
	  - the page type (one of "C{day}", "C{week}", "C{month}", or "C{year}")
	  - a C{datetime.date} object for the start date
	  - a C{datetime.date} object for the end date
	or C{None} when the page does not map a date
	'''
	if date_path_re.match(path.name):
		type = 'day'
		year, month, day = map(int, path.name.rsplit(':', 3)[-3:])
		date = datetime.date(year, month, day)
		end_date = date
	elif week_path_re.match(path.name):
		type = 'week'
		year, week = path.name.rsplit(':', 2)[-2:]
		year, week = map(int, (year, week[5:])) # Assumes "Week XX" string
		date, end_date = dates_for_week(year, week)
	elif month_path_re.match(path.name):
		type = 'month'
		year, month = map(int, path.name.rsplit(':', 2)[-2:])
		date = datetime.date(year, month, 1)
		if month == 12:
			end_date = datetime.date(year, 12, 31)
		else:
			end_date = datetime.date(year, month+1, 1) + datetime.timedelta(-1)
	elif year_path_re.match(path.name):
		type = 'year'
		year = int(path.name.rsplit(':', 1)[-1])
		date = datetime.date(year, 1, 1)
		end_date = datetime.date(year, 12, 31)
	else:
		return None # Not a calendar path
	return type, date, end_date
Beispiel #2
0
    def new_from_weeknumber(cls, year, week, weekday):
        assert isinstance(weekday, int) and 0 <= weekday <= 7

        start, end = dates_for_week(year, week)
        if start.isoweekday() == 1:  # monday
            offset = weekday - 1
        else:  # sunday
            offset = weekday

        if offset != 0:
            start = start + datetime.timedelta(days=offset)
        return cls(start.year, start.month, start.day)
Beispiel #3
0
	def new_from_weeknumber(cls, year, week, weekday):
		if not (isinstance(weekday, int) and 0 <= weekday <= 7):
			raise ValueError('Not a weekday: %i (must be between 0 and 7)' % weekday)

		start, end = dates_for_week(year, week)
		if start.isoweekday() == 1: # monday
			offset = weekday - 1
		else: # sunday
			offset = weekday

		if offset != 0:
			start = start + datetime.timedelta(days=offset)
		return cls(start.year, start.month, start.day)
Beispiel #4
0
    def runTest(self):
        # now()
        dt = datetime.now()
        s = dt.isoformat()
        self.assertTrue(isinstance(s, str) and len(s) > 0)

        s = dt.strftime("%z")
        self.assertTrue(isinstance(s, str) and len(s) > 0)

        s = dt.strftime("%Z")
        self.assertTrue(isinstance(s, str) and len(s) > 0)

        # strftime
        s = datetime.strftime('%a', dt)
        self.assertTrue(isinstance(s, str) and len(s) > 0)

        s = datetime.strftime('%%', dt)
        self.assertEqual(s, '%')

        # Failed under msys python3.7.2
        #s = datetime.strftime('%u', dt)
        #self.assertTrue(isinstance(s, str) and len(s) > 0)

        #s = datetime.strftime('%V', dt)
        #self.assertTrue(isinstance(s, str) and len(s) > 0)

        # strfcal
        s = datetime.strfcal('%w', dt)
        self.assertTrue(isinstance(s, str) and len(s) > 0)

        s = datetime.strfcal('%W', dt)
        self.assertTrue(isinstance(s, str) and len(s) > 0)

        s = datetime.strfcal('%Y', dt)
        self.assertTrue(isinstance(s, str) and len(s) > 0)

        s = datetime.strfcal('%%', dt)
        self.assertEqual(s, '%')

        # weekcalendar
        year, week, weekday = datetime.weekcalendar(dt)
        self.assertTrue(isinstance(year, int) and 1900 < year and 3000 > year)
        self.assertTrue(isinstance(week, int) and 1 <= week and 53 >= week)
        self.assertTrue(
            isinstance(weekday, int) and 1 <= weekday and 7 >= weekday)

        # dates_for_week
        start, end = datetime.dates_for_week(year, week)
        self.assertTrue(isinstance(start, datetime.date))
        self.assertTrue(isinstance(end, datetime.date))
        self.assertTrue(start <= dt.date() and end >= dt.date())
Beispiel #5
0
	def runTest(self):
		# now()
		dt = datetime.now()
		s = dt.isoformat()
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		s = dt.strftime("%z")
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		s = dt.strftime("%Z")
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		# strftime
		s = datetime.strftime('%a', dt)
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		s = datetime.strftime('%%', dt)
		self.assertEqual(s, '%')

		s = datetime.strftime('%u', dt)
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		s = datetime.strftime('%V', dt)
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		# strfcal
		s = datetime.strfcal('%w', dt)
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		s = datetime.strfcal('%W', dt)
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		s = datetime.strfcal('%Y', dt)
		self.assertTrue(isinstance(s, basestring) and len(s) > 0)

		s = datetime.strfcal('%%', dt)
		self.assertEqual(s, '%')

		# weekcalendar
		year, week, weekday = datetime.weekcalendar(dt)
		self.assertTrue(isinstance(year, int) and 1900 < year and 3000 > year)
		self.assertTrue(isinstance(week, int) and 1 <= week and 53 >= week)
		self.assertTrue(isinstance(weekday, int) and 1 <= weekday and 7 >= weekday)

		# dates_for_week
		start, end = datetime.dates_for_week(year, week)
		self.assertTrue(isinstance(start, datetime.date))
		self.assertTrue(isinstance(end, datetime.date))
		self.assertTrue(start <= dt.date() and end >= dt.date())
Beispiel #6
0
	def __init__(self, year, week):
		self.year = year
		self.week = week
		self.first_day, self.last_day = dates_for_week(year, week)