Skip to content

Commit f2213d0

Browse files
author
Steve Canny
committed
style: add LatentStyles on/off property setters
1 parent 6a449d5 commit f2213d0

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

docx/oxml/styles.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ def get_by_name(self, name):
6565
return None
6666
return found[0]
6767

68+
def set_bool_prop(self, attr_name, value):
69+
"""
70+
Set the on/off attribute having *attr_name* to *value*.
71+
"""
72+
setattr(self, attr_name, bool(value))
73+
6874

6975
class CT_Style(BaseOxmlElement):
7076
"""

docx/styles/latent.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ def default_to_hidden(self):
5757
"""
5858
return self._element.bool_prop('defSemiHidden')
5959

60+
@default_to_hidden.setter
61+
def default_to_hidden(self, value):
62+
self._element.set_bool_prop('defSemiHidden', value)
63+
6064
@property
6165
def default_to_locked(self):
6266
"""
@@ -68,6 +72,10 @@ def default_to_locked(self):
6872
"""
6973
return self._element.bool_prop('defLockedState')
7074

75+
@default_to_locked.setter
76+
def default_to_locked(self, value):
77+
self._element.set_bool_prop('defLockedState', value)
78+
7179
@property
7280
def default_to_quick_style(self):
7381
"""
@@ -76,6 +84,10 @@ def default_to_quick_style(self):
7684
"""
7785
return self._element.bool_prop('defQFormat')
7886

87+
@default_to_quick_style.setter
88+
def default_to_quick_style(self, value):
89+
self._element.set_bool_prop('defQFormat', value)
90+
7991
@property
8092
def default_to_unhide_when_used(self):
8193
"""
@@ -84,6 +96,10 @@ def default_to_unhide_when_used(self):
8496
"""
8597
return self._element.bool_prop('defUnhideWhenUsed')
8698

99+
@default_to_unhide_when_used.setter
100+
def default_to_unhide_when_used(self, value):
101+
self._element.set_bool_prop('defUnhideWhenUsed', value)
102+
87103
@property
88104
def load_count(self):
89105
"""

features/sty-latent-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ Feature: Get and set latent style properties
1818
| default_to_unhide_when_used | True |
1919

2020

21-
@wip
2221
Scenario Outline: Set default latent style properties
2322
Given a latent styles object with known defaults
2423
When I assign <new-value> to latent_styles.<prop-name>

tests/styles/test_latent.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ def it_knows_its_boolean_properties(self, bool_prop_get_fixture):
6262
actual_value = getattr(latent_styles, prop_name)
6363
assert actual_value == expected_value
6464

65+
def it_can_change_its_boolean_properties(self, bool_prop_set_fixture):
66+
latent_styles, prop_name, value, expected_xml = bool_prop_set_fixture
67+
setattr(latent_styles, prop_name, value)
68+
assert latent_styles.element.xml == expected_xml
69+
6570
# fixture --------------------------------------------------------
6671

6772
@pytest.fixture(params=[
@@ -83,6 +88,26 @@ def bool_prop_get_fixture(self, request):
8388
latent_styles = LatentStyles(element(latentStyles_cxml))
8489
return latent_styles, prop_name, expected_value
8590

91+
@pytest.fixture(params=[
92+
('w:latentStyles', 'default_to_hidden', True,
93+
'w:latentStyles{w:defSemiHidden=1}'),
94+
('w:latentStyles', 'default_to_locked', False,
95+
'w:latentStyles{w:defLockedState=0}'),
96+
('w:latentStyles', 'default_to_quick_style', True,
97+
'w:latentStyles{w:defQFormat=1}'),
98+
('w:latentStyles', 'default_to_unhide_when_used', False,
99+
'w:latentStyles{w:defUnhideWhenUsed=0}'),
100+
('w:latentStyles{w:defSemiHidden=0}', 'default_to_hidden', 'Foo',
101+
'w:latentStyles{w:defSemiHidden=1}'),
102+
('w:latentStyles{w:defLockedState=1}', 'default_to_locked', None,
103+
'w:latentStyles{w:defLockedState=0}'),
104+
])
105+
def bool_prop_set_fixture(self, request):
106+
latentStyles_cxml, prop_name, value, expected_cxml = request.param
107+
latent_styles = LatentStyles(element(latentStyles_cxml))
108+
expected_xml = xml(expected_cxml)
109+
return latent_styles, prop_name, value, expected_xml
110+
86111
@pytest.fixture(params=[
87112
('w:latentStyles', None),
88113
('w:latentStyles{w:count=42}', 42),

0 commit comments

Comments
 (0)