Skip to content

Commit 7ba456e

Browse files
committed
Merge branch 'dev'
2 parents 2736289 + dde288c commit 7ba456e

File tree

7 files changed

+34
-31
lines changed

7 files changed

+34
-31
lines changed

.pre-commit-config.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ repos:
4545
# files: .pre-commit-config.yaml
4646

4747
- repo: https://github.com/pre-commit/mirrors-mypy
48-
rev: v1.14.1
48+
rev: v1.15.0
4949
hooks:
5050
- id: mypy
5151
name: mypy
@@ -61,7 +61,7 @@ repos:
6161
# files: ^(src/|tests/)
6262

6363
- repo: https://github.com/PyCQA/isort
64-
rev: 6.0.0
64+
rev: 6.0.1
6565
hooks:
6666
- id: isort
6767
args: ["--profile", "black", "--filter-files", "--combine-as", "honor--noqa"]
@@ -133,7 +133,7 @@ repos:
133133
# C901 function is too complex # for iter_at_depth
134134
# PLR0912 too many branches # for iter_at_depth
135135
#
136-
rev: 'v0.9.4'
136+
rev: 'v0.11.9'
137137
hooks:
138138
- id: ruff
139139
exclude: "tests"
@@ -145,6 +145,6 @@ repos:
145145

146146
# reads pyproject.toml for additional config
147147
- repo: https://github.com/RobertCraigie/pyright-python
148-
rev: v1.1.393
148+
rev: v1.1.400
149149
hooks:
150150
- id: pyright

docx2python/attribute_register.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ def get_localname(elem: EtreeElement) -> str:
5252
in `etree.QName`, this function will return a random string, and docx2python will
5353
silently ignore the element with the bad tag.
5454
"""
55+
tag = elem.tag
56+
if isinstance(tag, bytearray): # just for type checking
57+
tag = tag.decode("utf-8")
5558
try:
56-
qname = etree.QName(elem.tag)
59+
qname = etree.QName(tag)
5760
except ValueError:
5861
warnings.warn(f"skipping invalid tag name '{elem.tag}'", stacklevel=2)
5962
return f"FAILED-{uuid.uuid4()}"

docx2python/depth_collector.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ def _runs_so_far(self) -> Iterator[str]:
189189
"""
190190
for run_text in enum_at_depth(self.tree_text, 5):
191191
if run_text:
192-
yield cast(str, run_text)
192+
yield cast("str", run_text)
193193
for par in self._open_pars:
194194
yield from par.run_strings
195195

@@ -291,7 +291,7 @@ def caret_depth(self) -> Literal[1, 2, 3, 4]:
291291
:return: from 0 to _par_depth, the depth of the last-closed element in the
292292
tree.
293293
"""
294-
return cast(Literal[1, 2, 3, 4], len(self._rightmost_branches))
294+
return cast("Literal[1, 2, 3, 4]", len(self._rightmost_branches))
295295

296296
@property
297297
def _open_runs(self) -> list[Run]:

docx2python/docx_context.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,11 @@ def collect_rels(zipf: zipfile.ZipFile) -> dict[str, list[dict[str, str]]]:
174174
path2rels[rels] = [
175175
{str(y): str(z) for y, z in x.attrib.items()} for x in rels_elem
176176
]
177+
tag = rels_elem.tag
178+
if isinstance(tag, bytearray): # for type checkers
179+
tag = tag.decode("utf-8")
177180
path2rels[rels].append(
178-
{
179-
"Id": "none",
180-
"Type": etree.QName(rels_elem.tag).namespace or "",
181-
"Target": rels,
182-
}
181+
{"Id": "none", "Type": etree.QName(tag).namespace or "", "Target": rels}
183182
)
184183

185184
return path2rels

docx2python/docx_output.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,11 @@ def _join_runs(tables: TextTable) -> list[list[list[list[str]]]]:
100100
"""
101101
result: list[list[list[list[str]]]] = []
102102
for tbl in tables:
103-
result.append(cast(list[list[list[str]]], []))
103+
result.append(cast("list[list[list[str]]]", []))
104104
for row in tbl:
105-
result[-1].append(cast(list[list[str]], []))
105+
result[-1].append(cast("list[list[str]]", []))
106106
for cell in row:
107-
result[-1][-1].append(cast(list[str], []))
107+
result[-1][-1].append(cast("list[str]", []))
108108
for par in cell:
109109
result[-1][-1][-1].append("".join(par))
110110
return result

docx2python/docx_text.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def search_at_depth(tree_: Sequence[EtreeElement], _depth: int = 0) -> int | Non
9292
grandchildren = [list(x) for x in tree_]
9393
return search_at_depth([x for y in grandchildren for x in y], _depth + 1)
9494

95-
return cast(Literal[1, 2, 3, 4], search_at_depth([tree]))
95+
return cast("Literal[1, 2, 3, 4]", search_at_depth([tree]))
9696

9797

9898
def _get_text_below(file: File, root: EtreeElement) -> str:

docx2python/iterators.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
from __future__ import annotations
2323

2424
import copy
25-
from collections.abc import Iterable, Iterator
2625
from contextlib import suppress
2726
from typing import TYPE_CHECKING, Literal, TypeVar, cast, overload
2827

2928
if TYPE_CHECKING:
29+
from collections.abc import Iterable, Iterator
30+
3031
from docx2python.depth_collector import Par
3132

3233
TextTable = list[list[list[list[list[str]]]]]
@@ -129,26 +130,26 @@ def enum_at_depth(
129130
((1, 0, 1, 1), 'h')
130131
"""
131132
if depth == 1:
132-
nested = cast(Iterable[_T], nested)
133+
nested = cast("Iterable[_T]", nested)
133134
yield from (((i,), x_1) for i, x_1 in enumerate(nested))
134135
return
135136
if depth == 2:
136-
nested = cast(Iterable[Iterable[_T]], nested)
137+
nested = cast("Iterable[Iterable[_T]]", nested)
137138
for i, x_2 in enumerate(nested):
138139
for j_2, y_2 in enum_at_depth(x_2, 1):
139140
yield ((i, *j_2), y_2)
140141
elif depth == 3:
141-
nested = cast(Iterable[Iterable[Iterable[_T]]], nested)
142+
nested = cast("Iterable[Iterable[Iterable[_T]]]", nested)
142143
for i, x_3 in enumerate(nested):
143144
for j_3, y_3 in enum_at_depth(x_3, 2):
144145
yield ((i, *j_3), y_3)
145146
elif depth == 4:
146-
nested = cast(Iterable[Iterable[Iterable[Iterable[_T]]]], nested)
147+
nested = cast("Iterable[Iterable[Iterable[Iterable[_T]]]]", nested)
147148
for i, x_4 in enumerate(nested):
148149
for j_4, y_4 in enum_at_depth(x_4, 3):
149150
yield ((i, *j_4), y_4)
150151
elif depth == 5:
151-
nested = cast(Iterable[Iterable[Iterable[Iterable[Iterable[_T]]]]], nested)
152+
nested = cast("Iterable[Iterable[Iterable[Iterable[Iterable[_T]]]]]", nested)
152153
for i, x_5 in enumerate(nested):
153154
for j_5, y_5 in enum_at_depth(x_5, 4):
154155
yield ((i, *j_5), y_5)
@@ -233,19 +234,19 @@ def iter_at_depth(
233234
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
234235
"""
235236
if depth == 1:
236-
nested = cast(list[_T], nested)
237+
nested = cast("list[_T]", nested)
237238
return (x for _, x in enum_at_depth(nested, depth))
238239
if depth == 2:
239-
nested = cast(list[list[_T]], nested)
240+
nested = cast("list[list[_T]]", nested)
240241
return (x for _, x in enum_at_depth(nested, depth))
241242
if depth == 3:
242-
nested = cast(list[list[list[_T]]], nested)
243+
nested = cast("list[list[list[_T]]]", nested)
243244
return (x for _, x in enum_at_depth(nested, depth))
244245
if depth == 4:
245-
nested = cast(list[list[list[list[_T]]]], nested)
246+
nested = cast("list[list[list[list[_T]]]]", nested)
246247
return (x for _, x in enum_at_depth(nested, depth))
247248
if depth == 5:
248-
nested = cast(list[list[list[list[list[_T]]]]], nested)
249+
nested = cast("list[list[list[list[list[_T]]]]]", nested)
249250
return (x for _, x in enum_at_depth(nested, depth))
250251
msg = "depth argument must be 1, 2, 3, 4, or 5"
251252
raise ValueError(msg)
@@ -385,24 +386,24 @@ def get_html_map(tables: TextTable) -> str:
385386
``(0, 0, 0, 0) text``.
386387
"""
387388
# prepend index tuple to each paragraph
388-
tables_4deep = cast(list[list[list[list[str]]]], copy.deepcopy(tables))
389+
tables_4deep = cast("list[list[list[list[str]]]]", copy.deepcopy(tables))
389390
for (i, j, k, m), paragraph in enum_at_depth(tables, 4):
390391
par_text = "".join(paragraph)
391392
tables_4deep[i][j][k][m] = " ".join([str((i, j, k, m)), par_text])
392393

393394
# wrap each paragraph in <pre> tags
394-
tables_3deep = cast(list[list[list[str]]], tables_4deep)
395+
tables_3deep = cast("list[list[list[str]]]", tables_4deep)
395396
for (i, j, k), cell in enum_at_depth(tables_4deep, 3):
396397
cell_strs = (str(x) for x in cell)
397398
tables_3deep[i][j][k] = "".join([f"<pre>{x}</pre>" for x in cell_strs])
398399

399400
# wrap each cell in <td> tags
400-
tables_2deep = cast(list[list[str]], tables_3deep)
401+
tables_2deep = cast("list[list[str]]", tables_3deep)
401402
for (i, j), row in enum_at_depth(tables_3deep, 2):
402403
tables_2deep[i][j] = "".join([f"<td>{x}</td>" for x in row])
403404

404405
# wrap each row in <tr> tags
405-
tables_1deep = cast(list[str], tables_2deep)
406+
tables_1deep = cast("list[str]", tables_2deep)
406407
for (i,), table in enum_at_depth(tables_2deep, 1):
407408
tables_1deep[i] = "".join(f"<tr>{x}</tr>" for x in table)
408409

0 commit comments

Comments
 (0)