changeset 832:61878590bf96

Refactored Assetor into Assetor and AssetorBase
author Ben Artin <ben@artins.org>
date Wed, 11 Jan 2017 23:58:41 -0500
parents 18978cf6d1ac
children cb39c0dbe5f0
files piecrust/data/assetor.py
diffstat 1 files changed, 21 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/data/assetor.py	Wed Jan 11 23:58:12 2017 -0500
+++ b/piecrust/data/assetor.py	Wed Jan 11 23:58:41 2017 -0500
@@ -32,12 +32,7 @@
     return base_url.rstrip('/') + '/'
 
 
-class Assetor(object):
-    debug_render_doc = """Helps render URLs to files in the current page's
-                          asset folder."""
-    debug_render = []
-    debug_render_dynamic = ['_debugRenderAssetNames']
-
+class AssetorBase(object):
     def __init__(self, page, uri):
         self._page = page
         self._uri = uri
@@ -69,8 +64,23 @@
     def _cacheAssets(self):
         if self._cache is not None:
             return
+            
+        self._cache = dict(self.findAssets())
+        
+    def findAssets(self):
+        raise NotImplementedError()
 
-        self._cache = {}
+    def copyAssets(self, dest_dir):
+        raise NotImplementedError()
+
+class Assetor(AssetorBase):
+    debug_render_doc = """Helps render URLs to files in the current page's
+                          asset folder."""
+    debug_render = []
+    debug_render_dynamic = ['_debugRenderAssetNames']
+
+    def findAssets(self):
+        assets = {}
         name, ext = os.path.splitext(self._page.path)
         assets_dir = name + ASSET_DIR_SUFFIX
         if not os.path.isdir(assets_dir):
@@ -85,14 +95,16 @@
                 continue
 
             name, ext = os.path.splitext(fn)
-            if name in self._cache:
+            if name in assets:
                 raise UnsupportedAssetsError(
                         "Multiple asset files are named '%s'." % name)
-            self._cache[name] = (base_url + fn, full_fn)
+            assets[name] = (base_url + fn, full_fn)
 
         cpi = self._page.app.env.exec_info_stack.current_page_info
         if cpi is not None:
             cpi.render_ctx.current_pass_info.used_assets = True
+        
+        return assets
             
     def copyAssets(self, dest_dir):
         page_pathname, _ = os.path.splitext(self._page.path)