Skip to content

Commit bc296cf

Browse files
author
Steve Canny
committed
parfmt: add ParagraphFormat.space_before setter
1 parent ee719a9 commit bc296cf

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

docx/oxml/text/paragraph.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ def spacing_before(self):
149149
return None
150150
return spacing.before
151151

152+
@spacing_before.setter
153+
def spacing_before(self, value):
154+
if value is None and self.spacing is None:
155+
return
156+
self.get_or_add_spacing().before = value
157+
152158
@property
153159
def style(self):
154160
"""

docx/text/paragraph.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,7 @@ def space_before(self):
184184
if pPr is None:
185185
return None
186186
return pPr.spacing_before
187+
188+
@space_before.setter
189+
def space_before(self, value):
190+
self._element.get_or_add_pPr().spacing_before = value

tests/text/test_paragraph.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,11 @@ def it_knows_its_space_before(self, space_before_get_fixture):
301301
paragraph_format, expected_value = space_before_get_fixture
302302
assert paragraph_format.space_before == expected_value
303303

304+
def it_can_change_its_space_before(self, space_before_set_fixture):
305+
paragraph_format, value, expected_xml = space_before_set_fixture
306+
paragraph_format.space_before = value
307+
assert paragraph_format._element.xml == expected_xml
308+
304309
def it_knows_its_space_after(self, space_after_get_fixture):
305310
paragraph_format, expected_value = space_after_get_fixture
306311
assert paragraph_format.space_after == expected_value
@@ -356,3 +361,21 @@ def space_before_get_fixture(self, request):
356361
p_cxml, expected_value = request.param
357362
paragraph_format = ParagraphFormat(element(p_cxml))
358363
return paragraph_format, expected_value
364+
365+
@pytest.fixture(params=[
366+
('w:p', Pt(12), 'w:p/w:pPr/w:spacing{w:before=240}'),
367+
('w:p', None, 'w:p/w:pPr'),
368+
('w:p/w:pPr', Pt(12), 'w:p/w:pPr/w:spacing{w:before=240}'),
369+
('w:p/w:pPr', None, 'w:p/w:pPr'),
370+
('w:p/w:pPr/w:spacing', Pt(12), 'w:p/w:pPr/w:spacing{w:before=240}'),
371+
('w:p/w:pPr/w:spacing', None, 'w:p/w:pPr/w:spacing'),
372+
('w:p/w:pPr/w:spacing{w:before=240}', Pt(42),
373+
'w:p/w:pPr/w:spacing{w:before=840}'),
374+
('w:p/w:pPr/w:spacing{w:before=840}', None,
375+
'w:p/w:pPr/w:spacing'),
376+
])
377+
def space_before_set_fixture(self, request):
378+
p_cxml, value, expected_p_cxml = request.param
379+
paragraph_format = ParagraphFormat(element(p_cxml))
380+
expected_xml = xml(expected_p_cxml)
381+
return paragraph_format, value, expected_xml

0 commit comments

Comments
 (0)