I love to see these custom solutions.
Really glad the API's working for you.

BTW, there's a function that will gather a mapping of the open/close
directories here:
https://bitbucket.org/blais/beancount/src/377fdf5891e427f1f6041e7d257915a17e784745/beancount/core/getters.py?at=default&fileviewer=file-view-default#getters.py-264
Might be useful (but it does look like you don't need it).

Cheers,



On Mon, May 1, 2017 at 11:08 AM, <[email protected]> wrote:

> Thank you very much for your answers.
> In the end I took your advice and defined metadata on the account's Open
> directive:
>
> 2017-03-01      open
> *Assets:Credits:CLIENT*   name: "Client's Company Name"
>    address: "1234 somewhere, someplace 0000 USA"
>    e-mail: "[email protected]"
>
> And accessed the metadata in Python directly:
>
> #!/usr/bin/env python3
> from beancount.core import data
> import re
>
> def get_open_meta(entries, acct_regex):
>     """
>     Return a dictionary formed from combining the metadata dictionaries
>         of all 'Open' statements for accounts matching 'acct_regex'.
>
>     Will return an empty dicionary if no accounts matched.
>
>     Done this say so that metadata from multiple related accounts can be
> gathered
>         into one set, which can then be queried.
>     """
>     meta = {}
>     for ent in entries:
>         if type(ent) == data.Open and re.match(acct_regex, ent.account):
>             meta.update(ent.meta)
>     return meta
>
>
> # MAIN
> if __name__ == "__main__" :
>     from beancount import loader
>     entries, errors, options = loader.load_file("somefile.beancount")
>     meta = get_open_meta(entries, '.*CLIENT') #client metadata
>
>     print("""
> {0}
> {1}
> {2}""".format(meta['name'], #will error if 'name' not defined
>               ' \n'.join(meta['address'].split('; ')), #allows multiple
> lines as 'line1; line2'
>               meta.get('e-mail')) #doesn't barf if e-mail isn't specified
>     )
>
>
>
> On Wednesday, April 26, 2017 at 5:07:14 PM UTC+2, [email protected] wrote:
>>
>> Hello All,
>>
>> Is there a way to query directives which are not transactions?
>> Currently I'm seeing this:
>>
>> beancount> select * where type != "transaction"
>>
>> (empty)
>>
>> beancount>
>>
>>
>>
>> The problem I'm trying to solve is invoice generation: want to store
>> client-specific metadata (e.g.: address) in the ledger somewhere; then
>> query them and have the results be the various fields of the generated
>> invoice.
>>
>> An example might be:
>>
>> 2017-03-01      note    *Assets:Credits:CLIENT*      "Via Lungolago 13,
>> CH-6900 Lugano"      #address
>>
>> And an example query might be:
>>
>> SELECT last(narration) FROM (type = "note") AND ("address" in tags)
>> WHERE account = "*Assets:Credits:CLIENT*"
>> ... assuming that a note's text field is referred to as "narration".
>>
>> This would have the advantage of being able to declare new addresses if
>> the client moves.
>> The #address tag is so that other notes may exist without breaking this
>> query.
>>
>>
>>
>> I'm not sure if this is the way this problem should be solved, maybe a
>> different approach is best?
>>
>> Thank you very much,
>>
>> Sirio
>>
> --
> 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 [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/beancount/fd6fd747-fc78-48f1-a86e-5e282a8676d2%40googlegroups.com
> <https://groups.google.com/d/msgid/beancount/fd6fd747-fc78-48f1-a86e-5e282a8676d2%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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhO41YhPW%2BLhcBdVV36epGWNAj5eyUP6jzUHpnMhcJKj8A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to