Changeset - 391fde5447de
[Not reviewed]
0 2 0
Brett Smith - 3 years ago 2021-01-09 15:09:08
brettcsmith@brettcsmith.org
fields: TextField.set_value() accepts numeric types.
2 files changed with 28 insertions and 1 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/pdfforms/fields.py
Show inline comments
...
 
@@ -10,2 +10,6 @@ import functools
 

	
 
from decimal import Decimal
 

	
 
import babel.numbers  # type:ignore[import]
 

	
 
from pdfminer.pdftypes import resolve1  # type:ignore[import]
...
 
@@ -24,2 +28,3 @@ from typing import (
 
    Union,
 
    cast,
 
)
...
 
@@ -240,3 +245,5 @@ class TextField(FormField):
 

	
 
    def set_value(self, value: Optional[str]) -> None:
 
    def set_value(self, value: Union[str, Decimal, float, int, None]) -> None:
 
        if isinstance(value, (Decimal, float, int)):
 
            value = cast(str, babel.numbers.format_decimal(value))
 
        super().set_value(None if value is None else pdfutils.encode_text(value))
tests/test_pdfforms_fields.py
Show inline comments
...
 
@@ -12,2 +12,4 @@ import pytest
 

	
 
from decimal import Decimal
 

	
 
from pdfminer.psparser import PSLiteral
...
 
@@ -251,2 +253,20 @@ def test_text_set_value(text, bprefix):
 

	
 
@pytest.mark.parametrize('expected', [
 
    '0',
 
    '32',
 
    '32.45',
 
    '32,768',
 
    '32,768.95',
 
])
 
def test_text_set_value_numeric(expected):
 
    num_s = expected.replace(',', '')
 
    field = fieldsmod.TextField({})
 
    num_types = [Decimal, float]
 
    if '.' not in expected:
 
        num_types.append(int)
 
    for num_type in num_types:
 
        field.set_value(num_type(num_s))
 
        assert field.value() == expected
 
        field.set_value(None)
 

	
 
def test_text_set_value_none():
0 comments (0 inline, 0 general)