diff --git a/conservancy_beancount/filters.py b/conservancy_beancount/filters.py new file mode 100644 index 0000000000000000000000000000000000000000..7168eb9e32d07fcedc86e9240413767808426499 --- /dev/null +++ b/conservancy_beancount/filters.py @@ -0,0 +1,35 @@ +"""filters.py - Common filters for postings""" +# Copyright © 2020 Brett Smith +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from . import data + +from typing import ( + Iterable, +) +from .beancount_types import ( + MetaKey, + MetaValue, +) + +Postings = Iterable[data.Posting] + +def filter_meta_equal(postings: Postings, key: MetaKey, value: MetaValue) -> Postings: + for post in postings: + try: + if post.meta[key] == value: + yield post + except KeyError: + pass