8000 xml: BaseOxmlElement subclasses etree.ElementBase · python-openxml/python-docx@a1c6b4f · GitHub
[go: up one dir, main page]

Skip to content

Commit a1c6b4f

Browse files
committed
xml: BaseOxmlElement subclasses etree.ElementBase
BaseOxmlElement inherits fine from `etree.ElementBase`, it's just the lxml stubs that says it doesn't, so ignore that error and we've got full access to `lxml` methods and properties on all `BaseOxmlElement` instances.
1 parent e441969 commit a1c6b4f

File tree

1 file changed

+5
-21
lines changed

1 file changed

+5
-21
lines changed

src/docx/oxml/xmlchemy.py

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import annotations
44

55
import re
6-
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Tuple, Type, TypeVar
6+
from typing import TYPE_CHECKING, Any, Callable, Dict, Tuple, Type, TypeVar
77

88
from lxml import etree
99
from lxml.etree import ElementBase
@@ -91,12 +91,6 @@ def _parse_line(cls, line):
9191
class MetaOxmlElement(type):
9292
"""Metaclass for BaseOxmlElement."""
9393

94-
def __new__(
95-
cls: Type[_T], clsname: str, bases: Tuple[type, ...], namespace: Dict[str, Any]
96-
) -> _T:
97-
bases = (*bases, etree.ElementBase)
98-
return super().__new__(cls, clsname, bases, namespace)
99-
10094
def __init__(cls, clsname: str, bases: Tuple[type, ...], namespace: Dict[str, Any]):
10195
dispatchable = (
10296
OneAndOnlyOne,
@@ -647,25 +641,15 @@ def _remove_choice_group_method_name(self):
647641
return "_remove_%s" % self._prop_name
648642

649643

650-
class BaseOxmlElement(metaclass=MetaOxmlElement):
644+
# -- lxml typing isn't quite right here, just ignore this error on _Element --
645+
class BaseOxmlElement( # pyright: ignore[reportGeneralTypeIssues]
646+
etree.ElementBase, metaclass=MetaOxmlElement
647+
):
651648
"""Effective base class for all custom element classes.
652649
653650
Adds standardized behavior to all classes in one place.
654651
"""
655652

656-
addprevious: Callable[[BaseOxmlElement], None]
657-
attrib: Dict[str, str]
658-
append: Callable[[BaseOxmlElement], None]
659-
find: Callable[[str], ElementBase | None]
660-
findall: Callable[[str], List[ElementBase]]
661-
get: Callable[[str], str | None]
662-
getparent: Callable[[], BaseOxmlElement]
663-
insert: Callable[[int, BaseOxmlElement], None]
664-
remove: Callable[[BaseOxmlElement], None]
665-
set: Callable[[str, str], None]
666-
tag: str
667-
text: str | None
668-
669653
def __repr__(self):
670654
return "<%s '<%s>' at 0x%0x>" % (
671655
self.__class__.__name__,

0 commit comments

Comments
 (0)
0