Skip to content

Commit 70b2cc4

Browse files
authored
Update paragraph.py
1 parent 3171622 commit 70b2cc4

File tree

1 file changed

+78
-84
lines changed

1 file changed

+78
-84
lines changed

app/main/reports/docx_uploader/paragraph.py

Lines changed: 78 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -3,122 +3,114 @@
33
class Paragraph:
44
def __init__(
55
self,
6-
text=None,
6+
paragraph_text=None,
77
paragraph_style_name=None,
8-
runs=None,
9-
alignment=None,
10-
left_indent=None,
11-
right_indent=None,
12-
first_line_indent=None,
13-
space_after=None,
14-
space_before=None,
15-
line_spacing=None,
16-
line_spacing_rule=None,
17-
keep_together=None,
18-
keep_with_next=None,
19-
page_break_before=None,
20-
widow_control=None
8+
paragraph_alignment=None,
9+
paragraph_left_indent=None,
10+
paragraph_right_indent=None,
11+
paragraph_first_line_indent=None,
12+
paragraph_space_after=None,
13+
paragraph_space_before=None,
14+
paragraph_line_spacing=None,
15+
paragraph_line_spacing_rule=None,
16+
paragraph_keep_together=None,
17+
paragraph_keep_with_next=None,
18+
paragraph_page_break_before=None,
19+
paragraph_widow_control=None
2120
):
2221
"""
2322
Конструктор для создания объекта Paragraph.
2423
2524
Args:
26-
text: Текст параграфа (по умолчанию None).
25+
paragraph_text: Текст параграфа (по умолчанию None).
2726
paragraph_style_name: Имя стиля параграфа (по умолчанию None).
28-
runs: Список runs с текстом и стилями (по умолчанию None).
29-
alignment: Выравнивание параграфа (по умолчанию None).
30-
left_indent: Отступ слева в сантиметрах (по умолчанию None).
31-
right_indent: Отступ справа в сантиметрах (по умолчанию None).
32-
first_line_indent: Отступ первой строки в сантиметрах (по умолчанию None).
33-
space_after: Интервал после параграфа в пунктах (по умолчанию None).
34-
space_before: Интервал перед параграфом в пунктах (по умолчанию None).
35-
line_spacing: Межстрочный интервал (по умолчанию None).
36-
line_spacing_rule: Правило межстрочного интервала (по умолчанию None).
37-
keep_together: Сохранять строки вместе (по умолчанию None).
38-
keep_with_next: Сохранять с следующим параграфом (по умолчанию None).
39-
page_break_before: Разрыв страницы перед параграфом (по умолчанию None).
40-
widow_control: Контроль висячих строк (по умолчанию None).
27+
paragraph_alignment: Выравнивание параграфа (по умолчанию None).
28+
paragraph_left_indent: Отступ слева (по умолчанию None).
29+
paragraph_right_indent: Отступ справа (по умолчанию None).
30+
paragraph_first_line_indent: Отступ первой строки (по умолчанию None).
31+
paragraph_space_after: Интервал после параграфа (по умолчанию None).
32+
paragraph_space_before: Интервал перед параграфом (по умолчанию None).
33+
paragraph_line_spacing: Межстрочный интервал (по умолчанию None).
34+
paragraph_line_spacing_rule: Правило межстрочного интервала (по умолчанию None).
35+
paragraph_keep_together: Сохранять строки вместе (по умолчанию None).
36+
paragraph_keep_with_next: Сохранять с следующим параграфом (по умолчанию None).
37+
paragraph_page_break_before: Разрыв страницы перед параграфом (по умолчанию None).
38+
paragraph_widow_control: Контроль висячих строк (по умолчанию None).
4139
"""
42-
self.text = text if text is not None else ""
40+
self.paragraph_text = paragraph_text if paragraph_text is not None else ""
4341
self.paragraph_style_name = paragraph_style_name if paragraph_style_name is not None else "Normal"
44-
self.runs = runs if runs is not None else []
45-
self.alignment = alignment
46-
self.left_indent = left_indent
47-
self.right_indent = right_indent
48-
self.first_line_indent = first_line_indent
49-
self.space_after = space_after
50-
self.space_before = space_before
51-
self.line_spacing = line_spacing
52-
self.line_spacing_rule = line_spacing_rule
53-
self.keep_together = keep_together
54-
self.keep_with_next = keep_with_next
55-
self.page_break_before = page_break_before
56-
self.widow_control = widow_control
42+
self.paragraph_alignment = paragraph_alignment
43+
self.paragraph_left_indent = paragraph_left_indent
44+
self.paragraph_right_indent = paragraph_right_indent
45+
self.paragraph_first_line_indent = paragraph_first_line_indent
46+
self.paragraph_space_after = paragraph_space_after
47+
self.paragraph_space_before = paragraph_space_before
48+
self.paragraph_line_spacing = paragraph_line_spacing
49+
self.paragraph_line_spacing_rule = paragraph_line_spacing_rule
50+
self.paragraph_keep_together = paragraph_keep_together
51+
self.paragraph_keep_with_next = paragraph_keep_with_next
52+
self.paragraph_page_break_before = paragraph_page_break_before
53+
self.paragraph_widow_control = paragraph_widow_control
5754
self.modify()
5855

5956
def modify(self):
6057
"""
6158
Преобразует отступы из пунктов в сантиметры и интервалы в пункты, если они не None.
6259
"""
63-
if self.left_indent is not None:
64-
self.left_indent = self.left_indent / 28.3464566929 # Конвертация пунктов в см
65-
if self.right_indent is not None:
66-
self.right_indent = self.right_indent / 28.3464566929
67-
if self.first_line_indent is not None:
68-
self.first_line_indent = self.first_line_indent / 28.3464566929
69-
if self.space_after is not None:
70-
self.space_after = self.space_after
71-
if self.space_before is not None:
72-
self.space_before = self.space_before
60+
if self.paragraph_left_indent is not None:
61+
self.paragraph_left_indent = self.paragraph_left_indent.cm
62+
if self.paragraph_right_indent is not None:
63+
self.paragraph_right_indent = self.paragraph_right_indent.cm
64+
if self.paragraph_first_line_indent is not None:
65+
self.paragraph_first_line_indent = self.paragraph_first_line_indent.cm
66+
if self.paragraph_space_after is not None:
67+
self.paragraph_space_after = self.paragraph_space_after.pt
68+
if self.paragraph_space_before is not None:
69+
self.paragraph_space_before = self.paragraph_space_before.pt
7370

7471
@staticmethod
7572
def from_doc_paragraph(doc_paragraph):
7673
"""
77-
Создает объект Paragraph из объекта docx.paragraphs или словаря styled_paragraphs.
74+
Создает объект Paragraph из объекта docx.paragraphs.
7875
7976
Args:
8077
doc_paragraph: Объект docx.paragraphs (для DocxUploader) или словарь (для LatexUploader).
8178
8279
Returns:
8380
Paragraph: Новый объект Paragraph с заполненными полями.
8481
"""
85-
from .style import Style # Импортируем Style внутри метода для избежания циклического импорта
86-
8782
if isinstance(doc_paragraph, dict):
8883
# Для LatexUploader: обработка словаря из styled_paragraphs
8984
paragraph = Paragraph(
90-
text=doc_paragraph.get("text", ""),
91-
runs=doc_paragraph.get("runs", [])
85+
paragraph_text=doc_paragraph.get("text", "")
9286
)
93-
# Установка стиля на основе runs, как в оригинальном __make_tmp_paragraphs
94-
if paragraph.runs:
95-
styles = set(style for run in paragraph.runs for style in run.get("style", []))
87+
# Установка стиля на основе runs, если они есть
88+
if doc_paragraph.get("runs"):
89+
styles = set(style for run in doc_paragraph.get("runs", []) for style in run.get("style", []))
9690
paragraph.paragraph_style_name = " ".join(styles) if styles else "Normal"
9791
return paragraph
9892
else:
9993
# Для DocxUploader: обработка объекта docx.paragraphs
10094
return Paragraph(
101-
text=doc_paragraph.text if doc_paragraph.text else "",
95+
paragraph_text=doc_paragraph.text if doc_paragraph.text else "",
10296
paragraph_style_name=(doc_paragraph.style.name if doc_paragraph.style else "Normal"),
103-
runs=[{"text": run.text, "style": Style(run, doc_paragraph)}
104-
for run in doc_paragraph.runs if run.text.strip()] if doc_paragraph.runs else [],
105-
alignment=doc_paragraph.paragraph_format.alignment,
106-
left_indent=(doc_paragraph.paragraph_format.left_indent
107-
if doc_paragraph.paragraph_format.left_indent else None),
108-
right_indent=(doc_paragraph.paragraph_format.right_indent
109-
if doc_paragraph.paragraph_format.right_indent else None),
110-
first_line_indent=(doc_paragraph.paragraph_format.first_line_indent
111-
if doc_paragraph.paragraph_format.first_line_indent else None),
112-
space_after=(doc_paragraph.paragraph_format.space_after
113-
if doc_paragraph.paragraph_format.space_after else None),
114-
space_before=(doc_paragraph.paragraph_format.space_before
115-
if doc_paragraph.paragraph_format.space_before else None),
116-
line_spacing=doc_paragraph.paragraph_format.line_spacing,
117-
line_spacing_rule=doc_paragraph.paragraph_format.line_spacing_rule,
118-
keep_together=doc_paragraph.paragraph_format.keep_together,
119-
keep_with_next=doc_paragraph.paragraph_format.keep_with_next,
120-
page_break_before=doc_paragraph.paragraph_format.page_break_before,
121-
widow_control=doc_paragraph.paragraph_format.widow_control
97+
paragraph_alignment=doc_paragraph.paragraph_format.alignment,
98+
paragraph_left_indent=(doc_paragraph.paragraph_format.left_indent
99+
if doc_paragraph.paragraph_format.left_indent else None),
100+
paragraph_right_indent=(doc_paragraph.paragraph_format.right_indent
101+
if doc_paragraph.paragraph_format.right_indent else None),
102+
paragraph_first_line_indent=(doc_paragraph.paragraph_format.first_line_indent
103+
if doc_paragraph.paragraph_format.first_line_indent else None),
104+
paragraph_space_after=(doc_paragraph.paragraph_format.space_after
105+
if doc_paragraph.paragraph_format.space_after else None),
106+
paragraph_space_before=(doc_paragraph.paragraph_format.space_before
107+
if doc_paragraph.paragraph_format.space_before else None),
108+
paragraph_line_spacing=doc_paragraph.paragraph_format.line_spacing,
109+
paragraph_line_spacing_rule=doc_paragraph.paragraph_format.line_spacing_rule,
110+
paragraph_keep_together=doc_paragraph.paragraph_format.keep_together,
111+
paragraph_keep_with_next=doc_paragraph.paragraph_format.keep_with_next,
112+
paragraph_page_break_before=doc_paragraph.paragraph_format.page_break_before,
113+
paragraph_widow_control=doc_paragraph.paragraph_format.widow_control
122114
)
123115

124116
def to_string(self):
@@ -127,10 +119,12 @@ def to_string(self):
127119
"""
128120
df = pandas.DataFrame({
129121
'Values': [
130-
self.text, self.alignment, self.left_indent, self.right_indent,
131-
self.first_line_indent, self.space_after, self.space_before,
132-
self.line_spacing, self.line_spacing_rule, self.keep_together,
133-
self.keep_with_next, self.page_break_before, self.widow_control
122+
self.paragraph_text, self.paragraph_alignment, self.paragraph_left_indent,
123+
self.paragraph_right_indent, self.paragraph_first_line_indent,
124+
self.paragraph_space_after, self.paragraph_space_before,
125+
self.paragraph_line_spacing, self.paragraph_line_spacing_rule,
126+
self.paragraph_keep_together, self.paragraph_keep_with_next,
127+
self.paragraph_page_break_before, self.paragraph_widow_control
134128
]
135129
})
136130
df.index = [

0 commit comments

Comments
 (0)