Themes are now registered and can have their templates loaded properly
authorChristopher Allan Webber <cwebber@dustycloud.org>
Thu, 5 Jul 2012 17:23:56 +0000 (12:23 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 14 Jul 2012 17:55:13 +0000 (12:55 -0500)
mediagoblin/app.py
mediagoblin/config_spec.ini
mediagoblin/init/__init__.py

index 33acbba033af86572d69ef2199de926652c77764..a10edfaabcf1a45886ddbbc552d52c65950d82fc 100644 (file)
@@ -76,10 +76,17 @@ class MediaGoblinApp(object):
 
         # Register themes
         self.theme_registry = register_themes(app_config)
+        self.current_theme_name = app_config.get('theme')
+        if self.current_theme_name \
+                and self.theme_registry.has_key(self.current_theme_name):
+            self.current_theme = self.theme_registry[self.current_theme_name]
+        else:
+            self.current_theme = None
 
         # Get the template environment
         self.template_loader = get_jinja_loader(
-            app_config.get('local_templates'))
+            app_config.get('local_templates'),
+            self.current_theme)
 
         # Set up storage systems
         self.public_store, self.queue_store = setup_storage()
index ce81b35688207e9f06fde8b423dae5cdb09bcb3b..7fc5fa708d20bed9b5f196f999089793c6d6b280 100644 (file)
@@ -60,6 +60,11 @@ push_urls = string_list(default=list())
 exif_visible = boolean(default=False)
 geolocation_map_visible = boolean(default=False)
 
+# Theming stuff
+theme_install_dir = string(default="%(here)s/user_dev/themes/")
+theme = string()
+
+
 [storage:publicstore]
 storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage")
 base_dir = string(default="%(here)s/user_dev/media/public")
index 1d8115cbec9b4fc6bec8e3b6be3f7ad43278e6a2..7a8858005718d51584aaa83e4907b7b4de6a5c5c 100644 (file)
@@ -71,7 +71,7 @@ def setup_database():
     return connection, db
 
 
-def get_jinja_loader(user_template_path=None):
+def get_jinja_loader(user_template_path=None, current_theme=None):
     """
     Set up the Jinja template loaders, possibly allowing for user
     overridden templates.
@@ -79,10 +79,24 @@ def get_jinja_loader(user_template_path=None):
     (In the future we may have another system for providing theming;
     for now this is good enough.)
     """
-    if user_template_path:
-        return jinja2.ChoiceLoader(
-            [jinja2.FileSystemLoader(user_template_path),
-             jinja2.PackageLoader('mediagoblin', 'templates')])
+    if user_template_path or current_theme:
+        loader_choices = []
+
+        # user template overrides
+        if user_template_path:
+            loader_choices.append(jinja2.FileSystemLoader(user_template_path))
+
+        # Any theme directories in the registry
+        if current_theme and current_theme.get('templates_dir'):
+            loader_choices.append(
+                jinja2.FileSystemLoader(
+                    current_theme['templates_dir']))
+
+        # Add the main mediagoblin templates
+        loader_choices.append(
+            jinja2.PackageLoader('mediagoblin', 'templates'))
+
+        return jinja2.ChoiceLoader(loader_choices)
     else:
         return jinja2.PackageLoader('mediagoblin', 'templates')