comparison piecrust/data/assetor.py @ 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 ad8f48a31c62
comparison
equal deleted inserted replaced
831:18978cf6d1ac 832:61878590bf96
30 '%uri%': uri}) 30 '%uri%': uri})
31 31
32 return base_url.rstrip('/') + '/' 32 return base_url.rstrip('/') + '/'
33 33
34 34
35 class Assetor(object): 35 class AssetorBase(object):
36 debug_render_doc = """Helps render URLs to files in the current page's
37 asset folder."""
38 debug_render = []
39 debug_render_dynamic = ['_debugRenderAssetNames']
40
41 def __init__(self, page, uri): 36 def __init__(self, page, uri):
42 self._page = page 37 self._page = page
43 self._uri = uri 38 self._uri = uri
44 self._cache = None 39 self._cache = None
45 40
67 return list(self._cache.keys()) 62 return list(self._cache.keys())
68 63
69 def _cacheAssets(self): 64 def _cacheAssets(self):
70 if self._cache is not None: 65 if self._cache is not None:
71 return 66 return
67
68 self._cache = dict(self.findAssets())
69
70 def findAssets(self):
71 raise NotImplementedError()
72 72
73 self._cache = {} 73 def copyAssets(self, dest_dir):
74 raise NotImplementedError()
75
76 class Assetor(AssetorBase):
77 debug_render_doc = """Helps render URLs to files in the current page's
78 asset folder."""
79 debug_render = []
80 debug_render_dynamic = ['_debugRenderAssetNames']
81
82 def findAssets(self):
83 assets = {}
74 name, ext = os.path.splitext(self._page.path) 84 name, ext = os.path.splitext(self._page.path)
75 assets_dir = name + ASSET_DIR_SUFFIX 85 assets_dir = name + ASSET_DIR_SUFFIX
76 if not os.path.isdir(assets_dir): 86 if not os.path.isdir(assets_dir):
77 return 87 return
78 88
83 if not os.path.isfile(full_fn): 93 if not os.path.isfile(full_fn):
84 raise Exception("Skipping: %s" % full_fn) 94 raise Exception("Skipping: %s" % full_fn)
85 continue 95 continue
86 96
87 name, ext = os.path.splitext(fn) 97 name, ext = os.path.splitext(fn)
88 if name in self._cache: 98 if name in assets:
89 raise UnsupportedAssetsError( 99 raise UnsupportedAssetsError(
90 "Multiple asset files are named '%s'." % name) 100 "Multiple asset files are named '%s'." % name)
91 self._cache[name] = (base_url + fn, full_fn) 101 assets[name] = (base_url + fn, full_fn)
92 102
93 cpi = self._page.app.env.exec_info_stack.current_page_info 103 cpi = self._page.app.env.exec_info_stack.current_page_info
94 if cpi is not None: 104 if cpi is not None:
95 cpi.render_ctx.current_pass_info.used_assets = True 105 cpi.render_ctx.current_pass_info.used_assets = True
106
107 return assets
96 108
97 def copyAssets(self, dest_dir): 109 def copyAssets(self, dest_dir):
98 page_pathname, _ = os.path.splitext(self._page.path) 110 page_pathname, _ = os.path.splitext(self._page.path)
99 in_assets_dir = page_pathname + ASSET_DIR_SUFFIX 111 in_assets_dir = page_pathname + ASSET_DIR_SUFFIX
100 for fn in os.listdir(in_assets_dir): 112 for fn in os.listdir(in_assets_dir):