data.PostingMeta: Add date property.
This is something reporting tools will want a lot. This will make it easier for them to look at just postings without worrying about the parent transaction.
This commit is contained in:
parent
a156617b4d
commit
eb7f73e644
2 changed files with 23 additions and 0 deletions
|
@ -20,6 +20,7 @@ throughout Conservancy tools.
|
||||||
# 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 collections
|
import collections
|
||||||
|
import datetime
|
||||||
import decimal
|
import decimal
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
|
@ -231,6 +232,14 @@ class PostingMeta(Metadata):
|
||||||
else:
|
else:
|
||||||
super().__delitem__(key)
|
super().__delitem__(key)
|
||||||
|
|
||||||
|
# This is arguably cheating a litttle bit, but I'd argue the date of
|
||||||
|
# the parent transaction still qualifies as posting metadata, and
|
||||||
|
# it's something we want to access so often it's good to have it
|
||||||
|
# within easy reach.
|
||||||
|
@property
|
||||||
|
def date(self) -> datetime.date:
|
||||||
|
return self.txn.date
|
||||||
|
|
||||||
|
|
||||||
class Posting(BasePosting):
|
class Posting(BasePosting):
|
||||||
"""Enhanced Posting objects
|
"""Enhanced Posting objects
|
||||||
|
|
|
@ -112,6 +112,20 @@ def test_keyerror_when_no_entity_or_payee(simple_txn):
|
||||||
with pytest.raises(KeyError):
|
with pytest.raises(KeyError):
|
||||||
meta['entity']
|
meta['entity']
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('date', [
|
||||||
|
testutil.FUTURE_DATE,
|
||||||
|
testutil.FY_START_DATE,
|
||||||
|
testutil.FY_MID_DATE,
|
||||||
|
testutil.PAST_DATE,
|
||||||
|
])
|
||||||
|
def test_date(date):
|
||||||
|
txn = testutil.Transaction(date=date, postings=[
|
||||||
|
('Income:Donations', -15),
|
||||||
|
('Assets:Cash', 15),
|
||||||
|
])
|
||||||
|
for index, post in enumerate(txn.postings):
|
||||||
|
assert data.PostingMeta(txn, index, post).date == date
|
||||||
|
|
||||||
# The .get() tests are arguably testing the stdlib, but they're short and
|
# The .get() tests are arguably testing the stdlib, but they're short and
|
||||||
# they confirm that we're using the stdlib as we intend.
|
# they confirm that we're using the stdlib as we intend.
|
||||||
def test_get_with_meta_value(simple_txn):
|
def test_get_with_meta_value(simple_txn):
|
||||||
|
|
Loading…
Reference in a new issue