hooks: Filter entries by setting entry_data['_hook_cancel'] to True.
The current method only works for plain dicts and other simple mappings. Mapping that may still contain items after .clear(), like ChainMap, can't rely on the old method.
This commit is contained in:
parent
34b71baaf7
commit
b41a7a99af
4 changed files with 6 additions and 4 deletions
2
CODE.rst
2
CODE.rst
|
@ -51,7 +51,7 @@ Hooks make arbitrary transformations to entry data dicts. Every entry data dict
|
|||
Initializes the hook with the user's configuration.
|
||||
|
||||
``run(entry_data)``
|
||||
This method makes the hook's transformations to the entry data dict, if any. If this method clears the entry data dict, that entry will not be output.
|
||||
This method makes the hook's transformations to the entry data dict, if any. If this method sets ``entry_data['_hook_cancel']`` to a truthy value, that entry will not be output.
|
||||
|
||||
Templates
|
||||
~~~~~~~~~
|
||||
|
|
|
@ -41,11 +41,13 @@ class FileImporter:
|
|||
default_date = self.config.get_default_date()
|
||||
in_file.seek(0)
|
||||
for entry_data in importer(in_file):
|
||||
entry_data['_hook_cancel'] = False
|
||||
for hook in self.hooks:
|
||||
hook.run(entry_data)
|
||||
if not entry_data:
|
||||
if entry_data['_hook_cancel']:
|
||||
break
|
||||
else:
|
||||
del entry_data['_hook_cancel']
|
||||
print(template.render(**entry_data), file=out_file, end='')
|
||||
|
||||
def import_path(self, in_path):
|
||||
|
|
|
@ -9,4 +9,4 @@ class FilterByDateHook:
|
|||
pass
|
||||
else:
|
||||
if not self.config.date_in_want_range(date):
|
||||
entry_data.clear()
|
||||
entry_data['_hook_cancel'] = True
|
||||
|
|
|
@ -58,7 +58,7 @@ def test_filter_by_date(entry_date, start_date, end_date, allowed):
|
|||
entry_data = {'date': entry_date}
|
||||
hook = filter_by_date.FilterByDateHook(DateRangeConfig(start_date, end_date))
|
||||
hook.run(entry_data)
|
||||
assert bool(entry_data) == allowed
|
||||
assert entry_data.get('_hook_cancel', False) == (not allowed)
|
||||
|
||||
class DefaultDateConfig:
|
||||
ONE_DAY = datetime.timedelta(days=1)
|
||||
|
|
Loading…
Reference in a new issue