MCPcopy Index your code
hub / github.com/python/cpython / _include

Function _include

Lib/xml/etree/ElementInclude.py:132–186  ·  view source on GitHub ↗
(elem, loader, base_url, max_depth, _parent_hrefs)

Source from the content-addressed store, hash-verified

130
131
132def _include(elem, loader, base_url, max_depth, _parent_hrefs):
133 # look for xinclude elements
134 i = 0
135 while i < len(elem):
136 e = elem[i]
137 if e.tag == XINCLUDE_INCLUDE:
138 # process xinclude directive
139 href = e.get("href")
140 if base_url:
141 href = urljoin(base_url, href)
142 parse = e.get("parse", "xml")
143 if parse == "xml":
144 if href in _parent_hrefs:
145 raise FatalIncludeError("recursive include of %s" % href)
146 if max_depth == 0:
147 raise LimitedRecursiveIncludeError(
148 "maximum xinclude depth reached when including file %s" % href)
149 _parent_hrefs.add(href)
150 node = loader(href, parse)
151 if node is None:
152 raise FatalIncludeError(
153 "cannot load %r as %r" % (href, parse)
154 )
155 node = copy.copy(node) # FIXME: this makes little sense with recursive includes
156 _include(node, loader, href, max_depth - 1, _parent_hrefs)
157 _parent_hrefs.remove(href)
158 if e.tail:
159 node.tail = (node.tail or "") + e.tail
160 elem[i] = node
161 elif parse == "text":
162 text = loader(href, parse, e.get("encoding"))
163 if text is None:
164 raise FatalIncludeError(
165 "cannot load %r as %r" % (href, parse)
166 )
167 if e.tail:
168 text += e.tail
169 if i:
170 node = elem[i-1]
171 node.tail = (node.tail or "") + text
172 else:
173 elem.text = (elem.text or "") + text
174 del elem[i]
175 continue
176 else:
177 raise FatalIncludeError(
178 "unknown parse type in xi:include tag (%r)" % parse
179 )
180 elif e.tag == XINCLUDE_FALLBACK:
181 raise FatalIncludeError(
182 "xi:fallback tag must be child of xi:include (%r)" % e.tag
183 )
184 else:
185 _include(e, loader, base_url, max_depth, _parent_hrefs)
186 i += 1

Callers 1

includeFunction · 0.85

Calls 7

urljoinFunction · 0.90
FatalIncludeErrorClass · 0.85
getMethod · 0.45
addMethod · 0.45
copyMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…