def fill_site(self): import datetime from nikola.utils import current_time self.init_command.copy_sample_site(self.target_dir) self.init_command.create_configuration(self.target_dir) # Change COMMENT_SYSTEM_ID to not wait for 5 seconds with io.open(os.path.join(self.target_dir, 'conf.py'), "a+", encoding="utf8") as outf: outf.write('\nCOMMENT_SYSTEM_ID = "nikolatest"\n') with io.open(os.path.join(self.target_dir, 'posts', 'empty1.txt'), "w+", encoding="utf8") as outf: outf.write(".. title: foo\n" ".. slug: foo\n" ".. date: %s\n" % (current_time() + datetime.timedelta(-1)).strftime('%Y-%m-%d %H:%M:%S')) with io.open(os.path.join(self.target_dir, 'posts', 'empty2.txt'), "w+", encoding="utf8") as outf: outf.write(".. title: bar\n" ".. slug: bar\n" ".. date: %s\n" % (current_time() + datetime.timedelta(1)).strftime('%Y-%m-%d %H:%M:%S'))
def build(target_dir): """Build the site.""" init_command = nikola.plugins.command.init.CommandInit() init_command.create_empty_site(target_dir) init_command.create_configuration(target_dir) # Change COMMENT_SYSTEM_ID to not wait for 5 seconds append_config(target_dir, '\nCOMMENT_SYSTEM_ID = "nikolatest"\n') def format_datetime(datetime): return datetime.strftime("%Y-%m-%d %H:%M:%S") past_datetime = format_datetime(current_time() + timedelta(days=-1)) with io.open(os.path.join(target_dir, "posts", "empty1.txt"), "w+", encoding="utf8") as past_post: past_post.write("""\ .. title: foo .. slug: foo .. date: %s """ % past_datetime) future_datetime = format_datetime(current_time() + timedelta(days=1)) with io.open(os.path.join(target_dir, "posts", "empty2.txt"), "w+", encoding="utf8") as future_post: future_post.write("""\ .. title: bar .. slug: bar .. date: %s """ % future_datetime) with cd(target_dir): __main__.main(["build"])
def fill_site(self): import datetime from nikola.utils import current_time self.init_command.copy_sample_site(self.target_dir) self.init_command.create_configuration(self.target_dir) # Change COMMENT_SYSTEM_ID to not wait for 5 seconds with io.open(os.path.join(self.target_dir, 'conf.py'), "a+", encoding="utf8") as outf: outf.write('\nCOMMENT_SYSTEM_ID = "nikolatest"\n') with io.open(os.path.join(self.target_dir, 'posts', 'empty1.txt'), "w+", encoding="utf8") as outf: outf.write(".. title: foo\n" ".. slug: foo\n" ".. date: %s\n" % ( current_time() + datetime.timedelta(-1)).strftime('%Y-%m-%d %H:%M:%S')) with io.open(os.path.join(self.target_dir, 'posts', 'empty2.txt'), "w+", encoding="utf8") as outf: outf.write(".. title: bar\n" ".. slug: bar\n" ".. date: %s\n" % ( current_time() + datetime.timedelta(1)).strftime('%Y-%m-%d %H:%M:%S'))
def fill_site(self): import datetime from nikola.utils import current_time self.init_command.copy_sample_site(self.target_dir) self.init_command.create_configuration(self.target_dir) with codecs.open(os.path.join(self.target_dir, 'posts', 'empty1.txt'), "wb+", "utf8") as outf: outf.write( ".. title: foo\n" ".. slug: foo\n" ".. date: %s\n" % (current_time() + datetime.timedelta(-1)).strftime('%Y/%m/%d %T') ) with codecs.open(os.path.join(self.target_dir, 'posts', 'empty2.txt'), "wb+", "utf8") as outf: outf.write( ".. title: bar\n" ".. slug: bar\n" ".. date: %s\n" % (current_time() + datetime.timedelta(1)).strftime('%Y/%m/%d %T') )
def fill_site(self): import datetime from nikola.utils import current_time self.init_command.copy_sample_site(self.target_dir) self.init_command.create_configuration(self.target_dir) with codecs.open(os.path.join(self.target_dir, 'posts', 'empty1.txt'), "wb+", "utf8") as outf: outf.write(".. title: foo\n" ".. slug: foo\n" ".. date: %s\n" % (current_time() + datetime.timedelta(-1)).strftime('%Y/%m/%d %T')) with codecs.open(os.path.join(self.target_dir, 'posts', 'empty2.txt'), "wb+", "utf8") as outf: outf.write(".. title: bar\n" ".. slug: bar\n" ".. date: %s\n" % (current_time() + datetime.timedelta(1)).strftime('%Y/%m/%d %T'))
def fill_site(self): import datetime from nikola.utils import current_time self.init_command.copy_sample_site(self.target_dir) self.init_command.create_configuration(self.target_dir) # Change COMMENT_SYSTEM_ID to not wait for 5 seconds with codecs.open(os.path.join(self.target_dir, "conf.py"), "ab+", "utf8") as outf: outf.write('\nCOMMENT_SYSTEM_ID = "nikolatest"\n') with codecs.open(os.path.join(self.target_dir, "posts", "empty1.txt"), "wb+", "utf8") as outf: outf.write( ".. title: foo\n" ".. slug: foo\n" ".. date: %s\n" % (current_time() + datetime.timedelta(-1)).strftime("%Y/%m/%d %T") ) with codecs.open(os.path.join(self.target_dir, "posts", "empty2.txt"), "wb+", "utf8") as outf: outf.write( ".. title: bar\n" ".. slug: bar\n" ".. date: %s\n" % (current_time() + datetime.timedelta(1)).strftime("%Y/%m/%d %T") )
def handler(self, start=None, stop=None, reverse=False, tags=None, require_all_tags=False, categories=None, sections=None, slugs=None, post_type='post', type=False, lang=None, template='post_list_directive.tmpl', sort=None, id=None, data=None, state=None, site=None, date=None, filename=None, post=None): """Generate HTML for post-list.""" if lang is None: lang = utils.LocaleBorg().current_lang if site.invariant: # for testing purposes post_list_id = id or 'post_list_' + 'fixedvaluethatisnotauuid' else: post_list_id = id or 'post_list_' + uuid.uuid4().hex # Get post from filename if available if filename: self_post = site.post_per_input_file.get(filename) else: self_post = None if self_post: self_post.register_depfile("####MAGIC####TIMELINE", lang=lang) # If we get strings for start/stop, make them integers if start is not None: start = int(start) if stop is not None: stop = int(stop) # Parse tags/categories/sections/slugs (input is strings) categories = [c.strip().lower() for c in categories.split(',')] if categories else [] sections = [s.strip().lower() for s in sections.split(',')] if sections else [] slugs = [s.strip() for s in slugs.split(',')] if slugs else [] filtered_timeline = [] posts = [] step = None if reverse is False else -1 if type is not False: post_type = type if post_type == 'page' or post_type == 'pages': timeline = [p for p in site.timeline if not p.use_in_feeds] elif post_type == 'all': timeline = [p for p in site.timeline] else: # post timeline = [p for p in site.timeline if p.use_in_feeds] # self_post should be removed from timeline because this is redundant timeline = [p for p in timeline if p.source_path != filename] if categories: timeline = [p for p in timeline if p.meta('category', lang=lang).lower() in categories] if sections: timeline = [p for p in timeline if p.section_name(lang).lower() in sections] if tags: tags = {t.strip().lower() for t in tags.split(',')} if require_all_tags: compare = set.issubset else: compare = operator.and_ for post in timeline: post_tags = {t.lower() for t in post.tags} if compare(tags, post_tags): filtered_timeline.append(post) else: filtered_timeline = timeline if sort: filtered_timeline = natsort.natsorted(filtered_timeline, key=lambda post: post.meta[lang][sort], alg=natsort.ns.F | natsort.ns.IC) if date: _now = utils.current_time() filtered_timeline = [p for p in filtered_timeline if date_in_range(utils.html_unescape(date), p.date, now=_now)] for post in filtered_timeline[start:stop:step]: if slugs: cont = True for slug in slugs: if slug == post.meta('slug'): cont = False if cont: continue bp = post.translated_base_path(lang) if os.path.exists(bp) and state: state.document.settings.record_dependencies.add(bp) elif os.path.exists(bp) and self_post: self_post.register_depfile(bp, lang=lang) posts += [post] if not posts: return '', [] template_deps = site.template_system.template_deps(template) if state: # Register template as a dependency (Issue #2391) for d in template_deps: state.document.settings.record_dependencies.add(d) elif self_post: for d in template_deps: self_post.register_depfile(d, lang=lang) template_data = { 'lang': lang, 'posts': posts, # Need to provide str, not TranslatableSetting (Issue #2104) 'date_format': site.GLOBAL_CONTEXT.get('date_format')[lang], 'post_list_id': post_list_id, 'messages': site.MESSAGES, '_link': site.link, } output = site.template_system.render_template( template, None, template_data) return output, template_deps
def _do_post_list(start=None, stop=None, reverse=False, tags=None, require_all_tags=False, categories=None, sections=None, slugs=None, post_type='post', type=False, lang=None, template='post_list_directive.tmpl', sort=None, id=None, data=None, state=None, site=None, date=None, filename=None, post=None): if lang is None: lang = utils.LocaleBorg().current_lang if site.invariant: # for testing purposes post_list_id = id or 'post_list_' + 'fixedvaluethatisnotauuid' else: post_list_id = id or 'post_list_' + uuid.uuid4().hex # Get post from filename if available if filename: self_post = site.post_per_input_file.get(filename) else: self_post = None if self_post: self_post.register_depfile("####MAGIC####TIMELINE", lang=lang) # If we get strings for start/stop, make them integers if start is not None: start = int(start) if stop is not None: stop = int(stop) # Parse tags/categories/sections/slugs (input is strings) categories = [c.strip().lower() for c in categories.split(',')] if categories else [] sections = [s.strip().lower() for s in sections.split(',')] if sections else [] slugs = [s.strip() for s in slugs.split(',')] if slugs else [] filtered_timeline = [] posts = [] step = -1 if reverse is None else None if type is not False: post_type = type if post_type == 'page' or post_type == 'pages': timeline = [p for p in site.timeline if not p.use_in_feeds] elif post_type == 'all': timeline = [p for p in site.timeline] else: # post timeline = [p for p in site.timeline if p.use_in_feeds] # self_post should be removed from timeline because this is redundant timeline = [p for p in timeline if p.source_path != filename] if categories: timeline = [p for p in timeline if p.meta('category', lang=lang).lower() in categories] if sections: timeline = [p for p in timeline if p.section_name(lang).lower() in sections] if tags: tags = {t.strip().lower() for t in tags.split(',')} if require_all_tags: compare = set.issubset else: compare = operator.and_ for post in timeline: post_tags = {t.lower() for t in post.tags} if compare(tags, post_tags): filtered_timeline.append(post) else: filtered_timeline = timeline if sort: filtered_timeline = natsort.natsorted(filtered_timeline, key=lambda post: post.meta[lang][sort], alg=natsort.ns.F | natsort.ns.IC) if date: _now = utils.current_time() filtered_timeline = [p for p in filtered_timeline if date_in_range(utils.html_unescape(date), p.date, now=_now)] for post in filtered_timeline[start:stop:step]: if slugs: cont = True for slug in slugs: if slug == post.meta('slug'): cont = False if cont: continue bp = post.translated_base_path(lang) if os.path.exists(bp) and state: state.document.settings.record_dependencies.add(bp) elif os.path.exists(bp) and self_post: self_post.register_depfile(bp, lang=lang) posts += [post] if not posts: return '', [] template_deps = site.template_system.template_deps(template) if state: # Register template as a dependency (Issue #2391) for d in template_deps: state.document.settings.record_dependencies.add(d) elif self_post: for d in template_deps: self_post.register_depfile(d, lang=lang) template_data = { 'lang': lang, 'posts': posts, # Need to provide str, not TranslatableSetting (Issue #2104) 'date_format': site.GLOBAL_CONTEXT.get('date_format')[lang], 'post_list_id': post_list_id, 'messages': site.MESSAGES, '_link': site.link, } output = site.template_system.render_template( template, None, template_data) return output, template_deps