Mercurial > piecrust2
view piecrust/appconfigdefaults.py @ 1078:a6618fdab37e
sources: Fix some invalid relationship name.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 15 Feb 2018 21:15:13 -0800 |
parents | 45ad976712ec |
children | c8fb7b024faa |
line wrap: on
line source
import collections from piecrust import ( DEFAULT_FORMAT, DEFAULT_TEMPLATE_ENGINE, DEFAULT_POSTS_FS, DEFAULT_DATE_FORMAT, DEFAULT_THEME_SOURCE) from piecrust.configuration import ( get_dict_values, try_get_dict_values) # Default configuration for all websites. # default_configuration = collections.OrderedDict({ 'site': collections.OrderedDict({ 'title': "Untitled PieCrust website", 'root': '/', 'default_format': DEFAULT_FORMAT, 'default_template_engine': DEFAULT_TEMPLATE_ENGINE, 'pretty_urls': False, 'trailing_slash': False, 'date_format': DEFAULT_DATE_FORMAT, 'auto_formats': collections.OrderedDict([ ('html', ''), ('md', 'markdown'), ('textile', 'textile')]), 'default_auto_format': 'md', 'default_pagination_source': None, 'pagination_suffix': '/%num%', 'slugify_mode': 'encode', 'themes_sources': [DEFAULT_THEME_SOURCE], 'use_default_content': True, 'use_default_theme_content': True, 'theme_site': False }), 'baker': collections.OrderedDict({ 'no_bake_setting': 'draft', 'workers': None, 'batch_size': None }), 'server': collections.OrderedDict({ 'enable_gzip': True, 'cache_time': 28800, 'enable_debug_info': True, 'show_debug_info': False }) }) # Default content model for themes. # default_theme_content_model_base = collections.OrderedDict({ 'site': collections.OrderedDict({ 'sources': collections.OrderedDict({ 'theme_pages': { 'fs_endpoint': 'pages', 'ignore_missing_dir': True, 'data_endpoint': 'site.pages', 'item_name': 'page', }, 'theme_assets': { 'fs_endpoint': 'assets', 'ignore_missing_dir': True, 'type': 'fs', 'pipeline': 'asset' } }), 'routes': [ { 'url': '/%slug%', 'source': 'theme_pages', 'func': 'pcurl' } ] }) }) # Additional theme configuration when previewing a theme by itself, # so it can show some "sample/preview" content. # default_theme_preview_content_model = collections.OrderedDict({ 'site': collections.OrderedDict({ 'sources': collections.OrderedDict({ 'theme_preview_pages': { 'fs_endpoint': 'preview/pages', 'ignore_missing_dir': True, 'data_endpoint': 'site.pages', 'item_name': 'page', }, 'theme_preview_posts': { 'fs_endpoint': 'preview/posts', 'ignore_missing_dir': True, 'data_endpoint': 'blog.posts', 'item_name': 'post' } }), 'routes': [ { 'url': '/posts/%year%/%month%/%slug%', 'source': 'theme_preview_posts' }, { 'url': '/%slug%', 'source': 'theme_preview_pages', 'func': 'pcurl' } ] }) }) # Default content model for websites. # default_content_model_base = collections.OrderedDict({ 'site': collections.OrderedDict({ 'posts_fs': DEFAULT_POSTS_FS, 'default_page_layout': 'default', 'default_post_layout': 'post', 'post_url': '/%year%/%month%/%day%/%slug%', 'year_url': '/archives/%year%', 'tag_url': '/tag/%tag%', 'tag_feed_url': '/tag/%tag%.xml', 'category_url': '/%category%', 'category_feed_url': '/%category%.xml', 'posts_per_page': 5, 'sources': { 'assets': { 'fs_endpoint': 'assets', 'ignore_missing_dir': True, 'type': 'fs', 'pipeline': 'asset' } } }) }) def get_default_content_model(site_values, values): default_layout = get_dict_values( (site_values, 'site/default_page_layout'), (values, 'site/default_page_layout')) return collections.OrderedDict({ 'site': collections.OrderedDict({ 'sources': collections.OrderedDict({ 'pages': { 'type': 'default', 'ignore_missing_dir': True, 'data_endpoint': 'site.pages', 'default_layout': default_layout, 'item_name': 'page' } }), 'routes': [ { 'url': '/%slug%', 'source': 'pages', 'func': 'pcurl' } ], 'taxonomies': collections.OrderedDict([ ('tags', { 'multiple': True, 'term': 'tag' }), ('categories', { 'term': 'category', 'func_term_name': 'cat' }) ]) }) }) def get_default_content_model_for_blog(blog_name, is_only_blog, site_values, values, theme_site=False): # Get the global (default) values for various things we're interested in. defs = {} names = ['posts_fs', 'posts_per_page', 'date_format', 'default_post_layout', 'post_url', 'year_url'] for n in names: defs[n] = get_dict_values( (site_values, 'site/%s' % n), (values, 'site/%s' % n)) # More stuff we need. if is_only_blog: url_prefix = '' page_prefix = '' fs_endpoint = 'posts' data_endpoint = 'blog' item_name = 'post' tpl_func_prefix = 'pc' year_archive_tpl = '_year.html' if theme_site: # If this is a theme site, show posts from a `sample` directory # so it's clearer that those won't show up when the theme is # actually applied to a normal site. fs_endpoint = 'sample/posts' else: url_prefix = blog_name + '/' page_prefix = blog_name + '/' data_endpoint = blog_name fs_endpoint = 'posts/%s' % blog_name item_name = try_get_dict_values( (site_values, '%s/item_name' % blog_name), (values, '%s/item_name' % blog_name), default=('%spost' % blog_name)) tpl_func_prefix = try_get_dict_values( (site_values, '%s/func_prefix' % blog_name), (values, '%s/func_prefix' % blog_name), default=('pc%s' % blog_name)) year_archive_tpl = '%s_year.html,_year.html' % page_prefix # Figure out the settings values for this blog, specifically. # The value could be set on the blog config itself, globally, or left at # its default. We already handle the "globally vs. default" with the # `defs` map that we computed above. blog_cfg = values.get(blog_name, {}) blog_values = {} for n in names: blog_values[n] = blog_cfg.get(n, defs[n]) posts_fs = blog_values['posts_fs'] posts_per_page = blog_values['posts_per_page'] date_format = blog_values['date_format'] default_layout = blog_values['default_post_layout'] post_url = '/' + url_prefix + blog_values['post_url'].lstrip('/') year_url = '/' + url_prefix + blog_values['year_url'].lstrip('/') cfg = collections.OrderedDict({ 'site': collections.OrderedDict({ 'sources': collections.OrderedDict({ blog_name: collections.OrderedDict({ 'type': 'posts/%s' % posts_fs, 'fs_endpoint': fs_endpoint, 'data_endpoint': data_endpoint, 'item_name': item_name, 'ignore_missing_dir': True, 'data_type': 'blog', 'items_per_page': posts_per_page, 'date_format': date_format, 'default_layout': default_layout }), '%s_archives' % blog_name: collections.OrderedDict({ 'type': 'blog_archives', 'source': blog_name, 'template': year_archive_tpl }) }), 'routes': [ { 'url': post_url, 'source': blog_name, 'func': ('%sposturl' % tpl_func_prefix) }, { 'url': year_url, 'source': ('%s_archives' % blog_name), 'func': ('%syearurl' % tpl_func_prefix) } ] }) }) # Add a source and a route for each taxonomy. taxonomies_cfg = try_get_dict_values( (site_values, 'site/taxonomies'), (values, 'site/taxonomies'), default={}).copy() for tax_name, tax_cfg in taxonomies_cfg.items(): term = tax_cfg.get('term', tax_name) # Source. term_tpl = '%s_%s.html' % (page_prefix, term) tax_src_name = '%s_%s' % (blog_name, tax_name) tax_src = collections.OrderedDict({ 'type': 'taxonomy', 'source': blog_name, 'taxonomy': tax_name, 'template': term_tpl }) cfg['site']['sources'][tax_src_name] = tax_src # Route. tax_url_cfg_name = '%s_url' % term tax_url = try_get_dict_values( (blog_cfg, tax_url_cfg_name), (site_values, 'site/%s' % tax_url_cfg_name), (values, 'site/%s' % tax_url_cfg_name), default=('%s/%%%s%%' % (term, term))) tax_url = '/' + url_prefix + tax_url.lstrip('/') tax_func_term_name = try_get_dict_values( (site_values, 'site/taxonomies/%s/func_term_name' % tax_name), (values, 'site/taxonomies/%s/func_term_name' % tax_name), default=term) tax_func_name = '%s%surl' % (tpl_func_prefix, tax_func_term_name) tax_route = collections.OrderedDict({ 'url': tax_url, 'pass': 2, 'source': tax_src_name, 'func': tax_func_name }) cfg['site']['routes'].append(tax_route) return cfg