From 8250f0a8ef331cb1795186c7888dd19903622619 2020-06-10 19:59:56 From: Brett Smith Date: 2020-06-10 19:59:56 Subject: [PATCH] filters: Add audit_date() function. --- diff --git a/conservancy_beancount/filters.py b/conservancy_beancount/filters.py index a7a2b2311bcf3bdd79c4152ba816ccb6773296e9..94e082be8c7c19fb3aa600cc11f46fcf254e8372 100644 --- a/conservancy_beancount/filters.py +++ b/conservancy_beancount/filters.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import datetime import re from beancount.core import data as bc_data @@ -39,6 +40,13 @@ from .beancount_types import ( Postings = Iterable[data.Posting] Regexp = Union[str, Pattern] +def audit_date(entries: Entries) -> Optional[datetime.date]: + for entry in entries: + if (isinstance(entry, bc_data.Custom) + and entry.type == 'conservancy_beancount_audit'): # type:ignore[attr-defined] + return entry.date + return None + def filter_meta_equal(postings: Postings, key: MetaKey, value: MetaValue) -> Postings: for post in postings: try: diff --git a/tests/test_filters.py b/tests/test_filters.py index ca83d74749d32f0321a923bce15cbf13e228c16c..f709761d9a84043602a47005d662db9a0cb560e6 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -22,6 +22,8 @@ from . import testutil from datetime import date +from beancount.core import data as bc_data + from conservancy_beancount import data from conservancy_beancount import filters @@ -159,3 +161,25 @@ def test_remove_opening_balance_txn(opening_txn): for entry in entries for post in getattr(entry, 'postings', ()) ) + +@pytest.mark.parametrize('entry', [ + bc_data.Custom({}, testutil.FY_START_DATE, 'conservancy_beancount_audit', []), + None, +]) +def test_audit_date(entry): + dates = testutil.date_seq() + entries = [ + bc_data.Open({}, next(dates), 'Income:Donations', ['USD'], None), + bc_data.Open({}, next(dates), 'Assets:Cash', ['USD'], None), + testutil.Transaction(postings=[ + ('Income:Donations', -10), + ('Assets:Cash', 10), + ]), + ] + if entry is not None: + entries.append(entry) + actual = filters.audit_date(entries) + if entry is None: + assert actual is None + else: + assert actual == entry.date