entry.tags is supposed to be a set.
If not set, an empty set.
I reuse a constant in the codebase (see EMPTY_SET).

TBH I'm not 100% sure what your question is.




On Sat, Feb 18, 2017 at 5:04 AM, <stalbansrfctreasu...@gmail.com> wrote:

> Now it works.
> This can flag cash accounts, but is now configurable to flag any
> transaction what contains any of the listed accounts.
>
> I still don't understand how this works, or what type an empty tag set
> is.... (tagset or set()) | set((tagged,))
>
> Sample header in journal file:
>
> plugin "beancount.plugins.auto_accounts"
> plugin "tagaccount" "{
>         'accounts': {
>               'Assets:Cash:RBS',
>               'Assets:Cash:MinisFloat',
>               'Assets:Cash:NatWest' },
>         'tag': 'cash'
>   }"
>
> Code:
>
> """
>
> For example, a possible configuration could be:
>
> plugin "tagaccount`" "{
>
> 'accounts': {
>
> 'Assets:Cash:Bank',
>
> 'Assets:Cash:Float' },
>
> 'tag': 'CASH'
>
> }"
>
> """
>
> __author__ = 'Paul Hamshere'
>
> from beancount.core import data
>
> from beancount.core import account_types
>
> __plugins__ = ['tagaccount']
>
> def tagaccount(entries, options_map, config):
>
> """
>
> Args:
>
> entries: a list of entry instances
>
> options_map: a dict of options parsed from the file
>
> config: A configuration string, which is intended to be a Python dict
>
> Returns:
>
> A tuple of entries and errors.
>
> """
>
> # Parse and extract configuration values.
>
> config_obj = eval(config, {}, {})
>
> if not isinstance(config_obj, dict):
>
>      raise RuntimeError("Invalid plugin configuration: should be a single
> dict.")
>
> accounts = config_obj.pop('accounts', {})
>
> tagged = config_obj.pop('tag',{})
>
> new_entries = []
>
> for entry in entries:
>
>      if isinstance(entry, data.Transaction):
>
>          orig_entry = entry
>
>          for posting in entry.postings:
>
>               if (posting.account in accounts):
>
>                     tagset = entry.tags
>
>                     tagset = (tagset or set()) | set((tagged,))
>
>                     entry = entry._replace(tags=tagset)
>
>       new_entries.append(entry)
>
> return new_entries, []
>
> Code completely adapted from the example plugin.
> Regards
> Paul
>
> On Friday, 17 February 2017 19:12:41 UTC, p.w.ha...@gmail.com wrote:
>
>> Oops my error should have put
>>
>> entries = entries._replace.....
>>
>> Paul
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beancount+unsubscr...@googlegroups.com.
> To post to this group, send email to beancount@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/beancount/68c72034-53d7-4f1c-91f2-3a66ec32aaab%40googlegroups.com
> <https://groups.google.com/d/msgid/beancount/68c72034-53d7-4f1c-91f2-3a66ec32aaab%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhMKO4mZus_9u1F_svSBc_PV2-oNeW5e4u%2BnGTW%2BjypcAA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to