comparison piecrust/page.py @ 90:e293f08d954e

PyYAML supports sexagesimal notation, so handle that for page times.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 05 Sep 2014 00:40:45 -0700
parents 563ce5dd02af
children 0445a2232de7
comparison
equal deleted inserted replaced
89:e771c202583a 90:e293f08d954e
73 if self._datetime is None: 73 if self._datetime is None:
74 if 'datetime' in self.source_metadata: 74 if 'datetime' in self.source_metadata:
75 self._datetime = self.source_metadata['datetime'] 75 self._datetime = self.source_metadata['datetime']
76 elif 'date' in self.source_metadata: 76 elif 'date' in self.source_metadata:
77 page_date = self.source_metadata['date'] 77 page_date = self.source_metadata['date']
78 timestr = self.config.get('time') 78 page_time = self.config.get('time')
79 if timestr is not None: 79 if page_time is not None:
80 if isinstance(page_time, str):
81 # Need to parse it...
82 try:
83 parsed_t = dateutil.parser.parse(page_time)
84 except Exception as ex:
85 raise ConfigurationError(
86 "Invalid time '%s' in page: %s" %
87 (page_time, self.path)) from ex
88 page_time = datetime.time(parsed_t.hour,
89 parsed_t.minute, parsed_t.second)
90
91 elif isinstance(page_time, int):
92 # Total seconds... convert to a time struct.
93 delta = datetime.timedelta(seconds=page_time)
94 dummy = datetime.datetime(1970, 1, 1)
95 dummy += delta
96 page_time = dummy.time()
97
80 try: 98 try:
81 time_dt = dateutil.parser.parse(timestr) 99 self._datetime = datetime.datetime.combine(
82 except Exception as e: 100 page_date, page_time)
101 except Exception as ex:
83 raise ConfigurationError( 102 raise ConfigurationError(
84 "Invalid time '%s' in page: %s" % 103 "Invalid page time '%s' for: %s" % (
85 (timestr, self.path), e) 104 page_time, self.path)) from ex
86 page_time = datetime.time(time_dt.hour, time_dt.minute, time_dt.second)
87 else: 105 else:
88 page_time = datetime.time(0, 0, 0) 106 self._datetime = datetime.datetime(
89 self._datetime = datetime.datetime.combine(page_date, page_time) 107 page_date.year, page_date.month, page_date.day)
90 else: 108 else:
91 self._datetime = datetime.datetime.fromtimestamp(self.path_mtime) 109 self._datetime = datetime.datetime.fromtimestamp(
110 self.path_mtime)
111 if self._datetime is None:
112 raise Exception("Got null datetime from path! %s" % self.path)
92 return self._datetime 113 return self._datetime
93 114
94 @datetime.setter 115 @datetime.setter
95 def datetime(self, value): 116 def datetime(self, value):
96 self._datetime = value 117 self._datetime = value