comparison piecrust/sources/posts.py @ 892:c445a3d5d950

internal: Make `createContent` use a dictionary-like object.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 02 Jul 2017 22:20:32 -0700
parents d9059257743c
children 86b684cc0551
comparison
equal deleted inserted replaced
891:f13d618cfec6 892:c445a3d5d950
152 "in `year/month/day` format (defaults to today).") 152 "in `year/month/day` format (defaults to today).")
153 parser.add_argument('slug', help="The URL slug for the new post.") 153 parser.add_argument('slug', help="The URL slug for the new post.")
154 154
155 def createContent(self, args): 155 def createContent(self, args):
156 dt = datetime.date.today() 156 dt = datetime.date.today()
157 if args.date: 157 date = args.get('date')
158 if args.date == 'today': 158 if isinstance(date, str):
159 if date == 'today':
159 pass # Keep the default we had. 160 pass # Keep the default we had.
160 elif args.date == 'tomorrow': 161 elif date == 'tomorrow':
161 dt += datetime.timedelta(days=1) 162 dt += datetime.timedelta(days=1)
162 elif args.date.startswith('+'): 163 elif date.startswith('+'):
163 try: 164 try:
164 dt += datetime.timedelta(days=int(args.date.lstrip('+'))) 165 dt += datetime.timedelta(days=int(date.lstrip('+')))
165 except ValueError: 166 except ValueError:
166 raise Exception("Date offsets must be numbers.") 167 raise Exception("Date offsets must be numbers.")
167 else: 168 else:
168 try: 169 try:
169 year, month, day = [int(s) for s in args.date.split('/')] 170 year, month, day = [int(s) for s in date.split('/')]
170 except ValueError: 171 except ValueError:
171 raise Exception("Dates must be of the form: " 172 raise Exception("Dates must be of the form: "
172 "YEAR/MONTH/DAY.") 173 "YEAR/MONTH/DAY.")
173 dt = datetime.date(year, month, day) 174 dt = datetime.date(year, month, day)
174 175 elif isinstance(date, datetime.datetime):
175 slug, ext = os.path.splitext(args.slug) 176 year = date.year
177 month = date.month
178 day = date.day
179 else:
180 raise Exception("Unknown date: %s" % date)
181
182 slug, ext = os.path.splitext(args.get('slug'))
176 if not ext: 183 if not ext:
177 ext = self.default_auto_format 184 ext = self.default_auto_format
178 year, month, day = dt.year, dt.month, dt.day 185 year, month, day = dt.year, dt.month, dt.day
179 tokens = { 186 tokens = {
180 'slug': args.slug, 187 'slug': args.get('slug'),
181 'ext': ext, 188 'ext': ext,
182 'year': '%04d' % year, 189 'year': '%04d' % year,
183 'month': '%02d' % month, 190 'month': '%02d' % month,
184 'day': '%02d' % day 191 'day': '%02d' % day
185 } 192 }
186 rel_path = self.path_format % tokens 193 rel_path = self.path_format % tokens
187 path = os.path.join(self.fs_endpoint_path, rel_path) 194 path = os.path.join(self.fs_endpoint_path, rel_path)
188 metadata = { 195 metadata = self._parseMetadataFromPath(path)
189 'config': {'title': uri_to_title(slug)} 196 metadata['config'] = {'title': uri_to_title(slug)}
190 }
191 return ContentItem(path, metadata) 197 return ContentItem(path, metadata)
192 198
193 def getInteractiveFields(self): 199 def getInteractiveFields(self):
194 dt = datetime.date.today() 200 dt = datetime.date.today()
195 return [ 201 return [