Changeset - df0c3546fd5c
[Not reviewed]
0 2 0
Brett Smith - 4 years ago 2020-07-16 14:39:31
brettcsmith@brettcsmith.org
data: Add Account.load_from_books convenience classmethod.
2 files changed with 25 insertions and 0 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/data.py
Show inline comments
...
 
@@ -187,16 +187,21 @@ class Account(str):
 
    def load_openings_and_closings(cls, entries: Iterable[Directive]) -> None:
 
        for entry in entries:
 
            # type ignores because Beancount's directives aren't type-checkable.
 
            if isinstance(entry, bc_data.Open):
 
                cls.load_opening(entry)  # type:ignore[arg-type]
 
            elif isinstance(entry, bc_data.Close):
 
                cls.load_closing(entry)  # type:ignore[arg-type]
 

	
 
    @classmethod
 
    def load_from_books(cls, entries: Iterable[Directive], options_map: OptionsMap) -> None:
 
        cls.load_options_map(options_map)
 
        cls.load_openings_and_closings(entries)
 

	
 
    @classmethod
 
    def is_account(cls, s: str) -> bool:
 
        return cls.ACCOUNT_RE.fullmatch(s) is not None
 

	
 
    @property
 
    def meta(self) -> AccountMeta:
 
        return self._meta_map[self]
 

	
tests/test_data_account.py
Show inline comments
...
 
@@ -308,8 +308,28 @@ def test_is_not_account(clean_account_meta, account_s):
 
    ('Expenses:Other', False),
 
])
 
def test_is_account_respects_configured_roots(clean_account_meta, account_s, expected):
 
    config = bc_options.OPTIONS_DEFAULTS.copy()
 
    config['name_expenses'] = 'Costs'
 
    config['name_income'] = 'Revenue'
 
    data.Account.load_options_map(config)
 
    assert data.Account.is_account(account_s) == expected
 

	
 
def test_load_from_books(clean_account_meta):
 
    entries = [
 
        Open({'lineno': 310}, Date(2001, 1, 1), 'Assets:Bank:Checking', ['USD'], None),
 
        Open({'lineno': 315}, Date(2001, 2, 1), 'Revenue:Donations', None, Booking.STRICT),
 
        testutil.Transaction(date=Date(2001, 2, 10), postings=[
 
            ('Revenue:Donations', -10),
 
            ('Assets:Bank:Checking', 10),
 
        ]),
 
        Close({'lineno': 320}, Date(2001, 3, 1), 'Assets:Bank:Checking'),
 
    ]
 
    config = bc_options.OPTIONS_DEFAULTS.copy()
 
    config['name_expenses'] = 'Costs'
 
    config['name_income'] = 'Revenue'
 
    data.Account.load_from_books(entries, config)
 
    for post in entries[2].postings:
 
        assert data.Account.is_account(post.account)
 
    check_meta = data.Account(entries[0].account).meta
 
    assert check_meta.open_date == entries[0].date
 
    assert check_meta.close_date == entries[-1].date
0 comments (0 inline, 0 general)