Mercurial > piecrust2
comparison piecrust/templating/pystacheengine.py @ 440:32c7c2d219d2
performance: Refactor how data is managed to reduce copying.
* Make use of `collections.abc.Mapping` to better identify things that are
supposed to look like dictionaries.
* Instead of handling "overlay" of data in a dict tree in each different data
object, make all objects `Mapping`s and handle merging at a higher level
with the new `MergedMapping` object.
* Since this new object is read-only, remove the need for deep-copying of
app and page configurations.
* Split data classes into separate modules.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Sun, 28 Jun 2015 08:22:39 -0700 |
| parents | ca5a3c970263 |
| children | 96d363e2da4b |
comparison
equal
deleted
inserted
replaced
| 439:c0700c6d9545 | 440:32c7c2d219d2 |
|---|---|
| 1 import logging | 1 import logging |
| 2 import collections.abc | |
| 2 import pystache | 3 import pystache |
| 3 import pystache.common | 4 import pystache.common |
| 4 from piecrust.templating.base import ( | 5 from piecrust.templating.base import ( |
| 5 TemplateEngine, TemplateNotFoundError, TemplatingError) | 6 TemplateEngine, TemplateNotFoundError, TemplatingError) |
| 6 | 7 |
| 68 def _workaround(stack, name): | 69 def _workaround(stack, name): |
| 69 # Pystache will treat anything that's not a string or a dict as | 70 # Pystache will treat anything that's not a string or a dict as |
| 70 # a list. This is just plain wrong, but it will take a while before | 71 # a list. This is just plain wrong, but it will take a while before |
| 71 # the project can get patches on Pypi. | 72 # the project can get patches on Pypi. |
| 72 res = mrc(stack, name) | 73 res = mrc(stack, name) |
| 73 if res is not None and res.__class__.__name__ in _knowns: | 74 if res is not None and ( |
| 75 res.__class__.__name__ in _knowns or | |
| 76 isinstance(res, collections.abc.Mapping)): | |
| 74 res = [res] | 77 res = [res] |
| 75 return res | 78 return res |
| 76 | 79 |
| 77 return _workaround | 80 return _workaround |
| 78 | 81 |
