Changeset - 0045d8d03205
[Not reviewed]
0 2 0
Brett Smith - 4 years ago 2021-01-09 15:09:08
brettcsmith@brettcsmith.org
fields: Add FormField.add_kid() method.
2 files changed with 14 insertions and 0 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/pdfforms/fields.py
Show inline comments
...
 
@@ -126,16 +126,22 @@ class FormField:
 
            yield self.by_type(resolve1(source))
 

	
 
    def parent(self) -> Optional['FormField']:
 
        try:
 
            return self.by_type(self._get_value('Parent'))
 
        except KeyError:
 
            return None
 

	
 
    def add_kid(self, kid: 'FormField') -> None:
 
        if kid.parent() is not None:
 
            raise ValueError("given kid field already has a parent")
 
        kid._source['Parent'] = self._source
 
        self._source.setdefault('Kids', []).append(kid._source)
 

	
 
    def is_terminal(self) -> bool:
 
        return not self._get_value('Kids', None)
 

	
 
    def flags(self) -> int:
 
        return self._get_value('Ff', 0)  # type:ignore[no-any-return]
 

	
 
    def is_readonly(self) -> bool:
 
        return bool(self.flags() & FieldFlags.ReadOnly)
tests/test_pdfforms_fields.py
Show inline comments
...
 
@@ -363,8 +363,16 @@ def test_recursive_as_mapping():
 
            'root.buttons.btn1',
 
            'root.buttons.btn2',
 
    ]:
 
        key, field = next(actual)
 
        assert key == expected_key
 
        _, _, expected_name = expected_key.rpartition('.')
 
        assert field.name() == expected_name
 
    assert next(actual, None) is None
 

	
 
def test_add_kid():
 
    parent = fieldsmod.FormField(field_source('parent'))
 
    kid = fieldsmod.FormField(field_source('kid'))
 
    parent.add_kid(kid)
 
    actual, = parent.kids()
 
    assert actual.name() == 'kid'
 
    assert actual.parent().name() == 'parent'
0 comments (0 inline, 0 general)