Skip to content

Commit 25abe5b

Browse files
author
Steve Canny
committed
para: add Paragraph.alignment setter
1 parent 1375dc9 commit 25abe5b

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

docx/oxml/text.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ def alignment(self):
5959
return None
6060
return pPr.alignment
6161

62+
@alignment.setter
63+
def alignment(self, value):
64+
pPr = self.get_or_add_pPr()
65+
pPr.alignment = value
66+
6267
def clear_content(self):
6368
"""
6469
Remove all child elements, except the ``<w:pPr>`` element if present.
@@ -132,6 +137,14 @@ def alignment(self):
132137
return None
133138
return jc.val
134139

140+
@alignment.setter
141+
def alignment(self, value):
142+
if value is None:
143+
self._remove_jc()
144+
return
145+
jc = self.get_or_add_jc()
146+
jc.val = value
147+
135148
@property
136149
def style(self):
137150
"""

docx/text.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ def alignment(self):
8686
"""
8787
return self._p.alignment
8888

89+
@alignment.setter
90+
def alignment(self, value):
91+
self._p.alignment = value
92+
8993
def clear(self):
9094
"""
9195
Return this same paragraph after removing all its content.

features/par-alignment-prop.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Feature: Get or set paragraph alignment
44
I need a read/write alignment property on paragraph objects
55

66

7-
@wip
87
Scenario Outline: Get paragraph alignment
98
Given a paragraph having <align-type> alignment
109
Then the paragraph alignment property value is <align-value>

tests/test_text.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ def it_knows_its_alignment_value(self, alignment_get_fixture):
4646
paragraph, expected_value = alignment_get_fixture
4747
assert paragraph.alignment == expected_value
4848

49+
def it_can_change_its_alignment_value(self, alignment_set_fixture):
50+
paragraph, value, expected_xml = alignment_set_fixture
51+
paragraph.alignment = value
52+
assert paragraph._p.xml == expected_xml
53+
4954
def it_knows_its_paragraph_style(self):
5055
cases = (
5156
(Mock(name='p_elm', style='foobar'), 'foobar'),
@@ -120,6 +125,31 @@ def alignment_get_fixture(self, request):
120125
paragraph = Paragraph(p)
121126
return paragraph, expected_alignment_value
122127

128+
@pytest.fixture(params=[
129+
('left', WD_ALIGN_PARAGRAPH.CENTER, 'center'),
130+
('left', None, None),
131+
(None, WD_ALIGN_PARAGRAPH.LEFT, 'left'),
132+
(None, None, None),
133+
])
134+
def alignment_set_fixture(self, request):
135+
initial_jc_val, new_alignment_value, expected_jc_val = request.param
136+
# paragraph --------------------
137+
p_bldr = a_p().with_nsdecls()
138+
if initial_jc_val is not None:
139+
p_bldr.with_child(
140+
a_pPr().with_child(
141+
a_jc().with_val(initial_jc_val))
142+
)
143+
p = p_bldr.element
144+
paragraph = Paragraph(p)
145+
# expected_xml -----------------
146+
pPr_bldr = a_pPr()
147+
if expected_jc_val is not None:
148+
pPr_bldr.with_child(a_jc().with_val(expected_jc_val))
149+
p_bldr = a_p().with_nsdecls().with_child(pPr_bldr)
150+
expected_xml = p_bldr.xml()
151+
return paragraph, new_alignment_value, expected_xml
152+
123153
@pytest.fixture
124154
def clear_fixture(self, request):
125155
"""

0 commit comments

Comments
 (0)