Changeset - b41a7a99af17
[Not reviewed]
0 4 0
Brett Smith - 6 years ago 2017-12-19 14:13:44
brettcsmith@brettcsmith.org
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.
4 files changed with 6 insertions and 4 deletions:
0 comments (0 inline, 0 general)
CODE.rst
Show inline comments
...
 
@@ -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
 
~~~~~~~~~
import2ledger/__main__.py
Show inline comments
...
 
@@ -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):
import2ledger/hooks/filter_by_date.py
Show inline comments
...
 
@@ -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
tests/test_hooks.py
Show inline comments
...
 
@@ -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)
0 comments (0 inline, 0 general)