changeset 83:f9f67086415c

Allow adding to the default content model instead of replacing it. Allow dot and slash notation for data endpoints.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 01 Sep 2014 22:49:56 -0700
parents ae90caf26224
children 2fb6501ed668
files piecrust/app.py piecrust/data/builder.py
diffstat 2 files changed, 27 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/app.py	Mon Sep 01 14:54:34 2014 -0700
+++ b/piecrust/app.py	Mon Sep 01 22:49:56 2014 -0700
@@ -122,7 +122,8 @@
                 'themes_sources': [DEFAULT_THEME_SOURCE],
                 'cache_time': 28800,
                 'display_errors': True,
-                'enable_debug_info': True
+                'enable_debug_info': True,
+                'use_default_content': True
                 }
         sitec = values.get('site')
         if sitec is None:
@@ -168,7 +169,14 @@
 
         # Figure out if we need to validate sources/routes, or auto-generate
         # them from simple blog settings.
-        if 'sources' not in sitec:
+        orig_sources = sitec.get('sources')
+        orig_routes = sitec.get('routes')
+        orig_taxonomies = sitec.get('taxonomies')
+        use_default_content = sitec.get('use_default_content')
+        if (orig_sources is None or orig_routes is None or
+                orig_taxonomies is None or use_default_content):
+
+            # Setup defaults for various settings.
             posts_fs = sitec.setdefault('posts_fs', DEFAULT_POSTS_FS)
             blogsc = sitec.setdefault('blogs', ['posts'])
 
@@ -179,10 +187,11 @@
             g_posts_filters = sitec.get('items_filters')
             g_date_format = sitec.get('date_format', DEFAULT_DATE_FORMAT)
 
+            # The normal pages and tags/categories.
             sourcesc = {}
             sourcesc['pages'] = {
                     'type': 'default',
-                    'data_endpoint': 'site/pages',
+                    'data_endpoint': 'site.pages',
                     'item_name': 'page'}
             sitec['sources'] = sourcesc
 
@@ -201,6 +210,7 @@
                     'term': 'category'}
             sitec['taxonomies'] = taxonomiesc
 
+            # Setup sources/routes/taxonomies for each blog.
             for blog_name in blogsc:
                 blogc = values.get(blog_name, {})
                 url_prefix = blog_name + '/'
@@ -248,6 +258,15 @@
                         'taxonomy': 'categories',
                         'func': 'pccaturl(category)'})
 
+            # If the user defined some additional sources/routes/taxonomies,
+            # append them to the default ones.
+            if orig_sources:
+                sourcesc += orig_sources
+            if orig_routes:
+                routesc + orig_routes
+            if orig_taxonomies:
+                taxonomiesc += orig_taxonomies
+
         # Validate sources/routes.
         sourcesc = sitec.get('sources')
         routesc = sitec.get('routes')
--- a/piecrust/data/builder.py	Mon Sep 01 14:54:34 2014 -0700
+++ b/piecrust/data/builder.py	Mon Sep 01 22:49:56 2014 -0700
@@ -1,3 +1,4 @@
+import re
 import time
 import logging
 from piecrust import APP_VERSION
@@ -103,11 +104,14 @@
         return "The very thing you're looking at!"
 
 
+re_endpoint_sep = re.compile(r'[\/\.]')
+
+
 def build_site_data(page):
     app = page.app
     data = dict(app.config.get())
     for source in app.sources:
-        endpoint_bits = source.data_endpoint.split('/')
+        endpoint_bits = re_endpoint_sep.split(source.data_endpoint)
         endpoint = data
         for e in endpoint_bits[:-1]:
             if e not in endpoint: