Skip to content

Commit 67cfed6

Browse files
author
Steve Canny
committed
style: add BaseStyle.locked setter
1 parent e8f3ad3 commit 67cfed6

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

docx/oxml/styles.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ def locked_val(self):
105105
return False
106106
return locked.val
107107

108+
@locked_val.setter
109+
def locked_val(self, value):
110+
self._remove_locked()
111+
if bool(value) is True:
112+
locked = self._add_locked()
113+
locked.val = value
114+
108115
@property
109116
def name_val(self):
110117
"""

docx/styles/style.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ def locked(self):
8484
"""
8585
return self._element.locked_val
8686

87+
@locked.setter
88+
def locked(self, value):
89+
self._element.locked_val = value
90+
8791
@property
8892
def name(self):
8993
"""

features/sty-style-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ Feature: Get and set style properties
5959
| no setting | False |
6060

6161

62-
@wip
6362
Scenario Outline: Set locked value
6463
Given a style having locked set <setting>
6564
When I assign <new-value> to style.locked

tests/styles/test_style.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,11 @@ def it_knows_whether_its_locked(self, locked_get_fixture):
163163
style, expected_value = locked_get_fixture
164164
assert style.locked == expected_value
165165

166+
def it_can_change_whether_its_locked(self, locked_set_fixture):
167+
style, value, expected_xml = locked_set_fixture
168+
style.locked = value
169+
assert style._element.xml == expected_xml
170+
166171
def it_can_delete_itself_from_the_document(self, delete_fixture):
167172
style, styles, expected_xml = delete_fixture
168173
style.delete()
@@ -245,6 +250,20 @@ def locked_get_fixture(self, request):
245250
style = BaseStyle(element(style_cxml))
246251
return style, expected_value
247252

253+
@pytest.fixture(params=[
254+
('w:style', True, 'w:style/w:locked'),
255+
('w:style/w:locked{w:val=0}', True, 'w:style/w:locked'),
256+
('w:style/w:locked{w:val=1}', True, 'w:style/w:locked'),
257+
('w:style', False, 'w:style'),
258+
('w:style/w:locked', False, 'w:style'),
259+
('w:style/w:locked{w:val=1}', False, 'w:style'),
260+
])
261+
def locked_set_fixture(self, request):
262+
style_cxml, value, expected_cxml = request.param
263+
style = BaseStyle(element(style_cxml))
264+
expected_xml = xml(expected_cxml)
265+
return style, value, expected_xml
266+
248267
@pytest.fixture(params=[
249268
('w:style{w:type=table}', None),
250269
('w:style{w:type=table}/w:name{w:val=Boofar}', 'Boofar'),

0 commit comments

Comments
 (0)