filters: Add audit_date() function.

This commit is contained in:
Brett Smith 2020-06-10 15:35:45 -04:00
parent 944c19da8d
commit 8250f0a8ef
2 changed files with 32 additions and 0 deletions

View file

@ -14,6 +14,7 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
import datetime
import re import re
from beancount.core import data as bc_data from beancount.core import data as bc_data
@ -39,6 +40,13 @@ from .beancount_types import (
Postings = Iterable[data.Posting] Postings = Iterable[data.Posting]
Regexp = Union[str, Pattern] 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: def filter_meta_equal(postings: Postings, key: MetaKey, value: MetaValue) -> Postings:
for post in postings: for post in postings:
try: try:

View file

@ -22,6 +22,8 @@ from . import testutil
from datetime import date from datetime import date
from beancount.core import data as bc_data
from conservancy_beancount import data from conservancy_beancount import data
from conservancy_beancount import filters from conservancy_beancount import filters
@ -159,3 +161,25 @@ def test_remove_opening_balance_txn(opening_txn):
for entry in entries for entry in entries
for post in getattr(entry, 'postings', ()) 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