Mercurial > piecrust2
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): |