Mercurial > piecrust2
view piecrust/themes/base.py @ 1145:e94737572542
serve: Fix an issue where false positive matches were rendered as the requested page.
Now we try to render the page, but also try to detect for the most common "empty" pages.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 05 Jun 2018 22:08:51 -0700 |
parents | 8adc27285d93 |
children | 40a40305c4e1 |
line wrap: on
line source
import sys import os.path import yaml from piecrust import CONFIG_PATH, THEMES_DIR class Theme(object): def getPath(self): mod_name = type(self).__module__ mod_file = sys.modules[mod_name].__file__ return os.path.dirname(mod_file) class ThemeNotFoundError(Exception): pass class ThemeLoader(object): def __init__(self, root_dir): self.root_dir = root_dir def getThemeDir(self): # Pre-load the config quickly to see if we're loading a specific # theme from somehwere. # TODO: make configs and themes load together to speed this up. config_path = os.path.join(self.root_dir, CONFIG_PATH) with open(config_path, 'r', encoding='utf8') as fp: config = yaml.load(fp.read()) if not config: return None site_config = config.get('site', {}) theme = site_config.get('theme', None) if theme is None: return None # Get the list of directories in which themes are installed. dirs = [] themes_dirs = site_config.get('themes_dirs', []) if isinstance(themes_dirs, str): dirs.append(os.path.join(self.root_dir, os.path.expanduser(themes_dirs))) else: dirs += [os.path.join(self.root_dir, os.path.expanduser(p)) for p in themes_dirs] # Add the default `themes` directory. default_themes_dir = os.path.join(self.root_dir, THEMES_DIR) if os.path.isdir(default_themes_dir): dirs.append(default_themes_dir) # Try to find the theme the user wants. for d in dirs: theme_dir = os.path.join(d, theme) if os.path.isdir(theme_dir): return theme_dir raise ThemeNotFoundError( "Can't find theme '%s'. Looked in: %s" % (theme, ', '.join(dirs)))