Changeset - 51eee8ec8fd8
[Not reviewed]
0 3 0
Brett Smith - 4 years ago 2020-11-04 18:43:54
brettcsmith@brettcsmith.org
meta_entity: Don't set transaction metadata when payee is None. RT#12913
3 files changed with 12 insertions and 2 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/plugin/meta_entity.py
Show inline comments
...
 
@@ -59,31 +59,31 @@ class MetaEntity(core.TransactionHook):
 
            return None, None
 
        elif not isinstance(entity, str):
 
            return None, False
 
        elif self.ANONYMOUS_RE.match(entity):
 
            entity = 'Anonymous'
 
            meta[self.METADATA_KEY] = entity
 
            return entity, True
 
        else:
 
            return entity, self.ENTITY_RE.match(entity) is not None
 

	
 
    def run(self, txn: Transaction) -> errormod.Iter:
 
        if not self._run_on_txn(txn):
 
            return
 
        txn_entity, txn_entity_ok = self._check_entity(txn.meta, txn.payee)
 
        if txn_entity_ok is False:
 
            yield errormod.InvalidMetadataError(txn, self.METADATA_KEY, txn_entity)
 
        if txn_entity is txn.payee:
 
        if txn_entity is txn.payee and txn_entity is not None:
 
            txn.meta[self.METADATA_KEY] = txn.payee
 
        for post in data.Posting.from_txn(txn):
 
            if not post.account.is_under(
 
                    'Assets:Receivable',
 
                    'Expenses',
 
                    'Income',
 
                    'Liabilities:Payable',
 
            ):
 
                continue
 
            entity, entity_ok = self._check_entity(post.meta, txn_entity)
 
            if entity is txn_entity and entity is not None:
 
                pass
 
            elif not entity_ok:
 
                yield errormod.InvalidMetadataError(txn, self.METADATA_KEY, entity, post)
setup.py
Show inline comments
 
#!/usr/bin/env python3
 

	
 
from setuptools import setup
 

	
 
setup(
 
    name='conservancy_beancount',
 
    description="Plugin, library, and reports for reading Conservancy's books",
 
    version='1.13.0',
 
    version='1.13.1',
 
    author='Software Freedom Conservancy',
 
    author_email='info@sfconservancy.org',
 
    license='GNU AGPLv3+',
 

	
 
    install_requires=[
 
        'babel>=2.6',  # Debian:python3-babel
 
        'beancount>=2.2',  # Debian:beancount
 
        'GitPython>=2.0',  # Debian:python3-git
 
        # 1.4.1 crashes when trying to save some documents.
 
        'odfpy>=1.4.0,!=1.4.1',  # Debian:python3-odf
 
        'PyYAML>=3.0',  # Debian:python3-yaml
 
        'regex',  # Debian:python3-regex
 
        'rt>=2.0',
 
    ],
 
    setup_requires=[
 
        'pytest-mypy',
tests/test_meta_entity.py
Show inline comments
...
 
@@ -201,32 +201,42 @@ def test_invalid_payee_but_valid_metadata(hook, payee, src_value):
 
    ('Liabilities:Payable:Vacation', True),
 
    ('Liabilities:UnearnedIncome:Donations', False),
 
])
 
def test_which_accounts_required_on(hook, account, required):
 
    txn = testutil.Transaction(postings=[
 
        ('Assets:Checking', -25),
 
        (account, 25),
 
    ])
 
    errors = list(hook.run(txn))
 
    if not required:
 
        assert not errors
 
    else:
 
        assert errors
 
        assert any(error.message == "{} missing entity".format(account)
 
                   for error in errors)
 

	
 
def test_dont_set_entity_none(hook):
 
    txn = testutil.Transaction(postings=[
 
        ('Expenses:Other', 5),
 
        ('Assets:Cash', -5),
 
    ])
 
    assert any(hook.run(txn))
 
    assert 'entity' not in txn.meta
 
    for post in txn.postings:
 
        assert post.meta is None or 'entity' not in post.meta
 

	
 
def test_not_required_on_opening(hook):
 
    txn = testutil.OpeningBalance()
 
    assert not list(hook.run(txn))
 

	
 
@pytest.mark.parametrize('date,need_value', [
 
    (testutil.EXTREME_FUTURE_DATE, False),
 
    (testutil.FUTURE_DATE, True),
 
    (testutil.FY_START_DATE, True),
 
    (testutil.FY_MID_DATE, True),
 
    (testutil.PAST_DATE, False),
 
])
 
def test_required_by_date(hook, date, need_value):
 
    txn = testutil.Transaction(date=date, postings=[
 
        ('Income:Donations', -10),
 
        ('Assets:Checking', 10),
 
    ])
0 comments (0 inline, 0 general)