Changeset - 2b23eba549ad
[Not reviewed]
0 2 0
Brett Smith - 4 years ago 2020-10-26 18:52:41
brettcsmith@brettcsmith.org
data: PostingMeta.detached() can be chain-called.
2 files changed with 21 insertions and 1 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/data.py
Show inline comments
...
 
@@ -564,13 +564,13 @@ class PostingMeta(Metadata):
 

	
 
        Changes you make to the detached copy will not propagate to the
 
        underlying data structures. This is mostly useful for reporting code
 
        that may want to "split" and manipulate the metadata multiple times.
 
        """
 
        retval = type(self)(self.txn, self.index, self.post)
 
        retval.meta = retval.meta.new_child()
 
        retval.meta = self.meta.new_child()
 
        return retval
 

	
 

	
 
class Posting(BasePosting):
 
    """Enhanced Posting objects
 

	
tests/test_data_posting_meta.py
Show inline comments
...
 
@@ -141,12 +141,32 @@ def test_mutable_copy():
 
        'layerkey': 'two',
 
    }
 
    assert 'layerkey' not in txn.meta
 
    assert all(post.meta is None for post in txn.postings)
 
    assert meta.date == txn.date
 

	
 
def test_double_detached():
 
    txn = testutil.Transaction(filename='f', lineno=140, postings=[
 
        ('Income:Donations', -19),
 
    ])
 
    meta1 = data.PostingMeta(txn, 0).detached()
 
    meta1['metakey'] = 'meta'
 
    meta1['layerkey'] = 'one'
 
    meta2 = meta1.detached()
 
    meta2['layerkey'] = 'two'
 
    expected = {
 
        'filename': 'f',
 
        'lineno': 140,
 
        'metakey': 'meta',
 
        'layerkey': 'two',
 
    }
 
    assert dict(meta2) == expected
 
    expected['layerkey'] = 'one'
 
    assert dict(meta1) == expected
 
    assert not any(post.meta for post in txn.postings)
 

	
 
# The .get() tests are arguably testing the stdlib, but they're short and
 
# they confirm that we're using the stdlib as we intend.
 
def test_get_with_meta_value(simple_txn):
 
    assert data.PostingMeta(simple_txn, 1).get('note') == 'donation love'
 

	
 
def test_get_with_txn_value(simple_txn):
0 comments (0 inline, 0 general)