diff --git a/conservancy_beancount/reports/accrual.py b/conservancy_beancount/reports/accrual.py index 0298720530b8c4754767433d16aed1a62afb7c5d..259ecae91b80bfd639dd9e70ea4c720b654fd66f 100644 --- a/conservancy_beancount/reports/accrual.py +++ b/conservancy_beancount/reports/accrual.py @@ -482,10 +482,7 @@ class OutgoingReport(BaseReport): 'uswire': 'Domestic Wire', 'vendorportal': 'Vendor Portal', } - PAYMENT_METHOD_RE = re.compile( - rf'^([A-Z]{{3}})\s+({"|".join(PAYMENT_METHODS)})$', - re.IGNORECASE, - ) + PAYMENT_METHOD_RE = re.compile(rf'^([a-z]{{3}})\s+({"|".join(PAYMENT_METHODS)})$') def __init__(self, rt_wrapper: rtutil.RT, out_file: TextIO) -> None: super().__init__(out_file) @@ -579,20 +576,26 @@ class OutgoingReport(BaseReport): 'payment-amount': payment_amount, 'payment-to': payment_to, } - payment_methods = posts.meta_values('payment-method') - payment_methods.discard(None) - payment_method_count = len(payment_methods) - if payment_method_count != 1: + payment_methods = filters.iter_unique( + post.meta['payment-method'].lower() + for post in posts + if isinstance(post.meta.get('payment-method'), str) + ) + payment_method: Optional[str] = next(payment_methods, None) + if payment_method is None: + payment_method_count = "no" + elif next(payment_methods, None) is None: + pass + else: + payment_method_count = "multiple" + payment_method = None + if payment_method is None: self.logger.warning( "cannot set payment-method for rt:%s: %s metadata values found", ticket_id, payment_method_count, ) else: - payment_method = payment_methods.pop() - if isinstance(payment_method, str): - match = self.PAYMENT_METHOD_RE.fullmatch(payment_method) - else: - match = None + match = self.PAYMENT_METHOD_RE.fullmatch(payment_method) if match is None: self.logger.warning( "cannot set payment-method for rt:%s: invalid value %r", @@ -601,7 +604,7 @@ class OutgoingReport(BaseReport): else: cf_targets['payment-method'] = '{} {}'.format( match.group(1).upper(), - self.PAYMENT_METHODS[match.group(2).lower()], + self.PAYMENT_METHODS[match.group(2)], ) cf_updates = { diff --git a/setup.py b/setup.py index 850e3f9e1727c33528d8c804027f9339578752cd..f1985e26ac9b7acdaca5429d4754c10dd9e23276 100755 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ from setuptools import setup setup( name='conservancy_beancount', description="Plugin, library, and reports for reading Conservancy's books", - version='1.4.0', + version='1.4.1', author='Software Freedom Conservancy', author_email='info@sfconservancy.org', license='GNU AGPLv3+',