Skip to content

Commit 40d007a

Browse files
committed
Fix the moduleFactoryFactory to cache based on *args and **kwargs.
1 parent e1d9a5b commit 40d007a

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

html5lib/tests/test_parser2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ def test_namespace_html_elements_1_dom(self):
4040
def test_namespace_html_elements_0_etree(self):
4141
parser = html5parser.HTMLParser(namespaceHTMLElements=True)
4242
doc = parser.parse("<html></html>")
43-
self.assertTrue(list(doc)[0].tag == "{%s}html" % (namespaces["html"],))
43+
self.assertTrue(doc.tag == "{%s}html" % (namespaces["html"],))
4444

4545
def test_namespace_html_elements_1_etree(self):
4646
parser = html5parser.HTMLParser(namespaceHTMLElements=False)
4747
doc = parser.parse("<html></html>")
48-
self.assertTrue(list(doc)[0].tag == "html")
48+
self.assertTrue(doc.tag == "html")
4949

5050
def test_unicode_file(self):
5151
parser = html5parser.HTMLParser()

html5lib/tests/test_treewalkers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def PullDOMAdapter(node):
6060
pass
6161
else:
6262
treeTypes['ElementTree'] = \
63-
{"builder": treebuilders.getTreeBuilder("etree", ElementTree),
63+
{"builder": treebuilders.getTreeBuilder("etree", ElementTree, fullTree=True),
6464
"walker": treewalkers.getTreeWalker("etree", ElementTree)}
6565

6666
try:
@@ -69,7 +69,7 @@ def PullDOMAdapter(node):
6969
pass
7070
else:
7171
treeTypes['cElementTree'] = \
72-
{"builder": treebuilders.getTreeBuilder("etree", ElementTree),
72+
{"builder": treebuilders.getTreeBuilder("etree", ElementTree, fullTree=True),
7373
"walker": treewalkers.getTreeWalker("etree", ElementTree)}
7474

7575

html5lib/utils.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,21 @@ def moduleFactory(baseModule, *args, **kwargs):
9191
else:
9292
name = b"_%s_factory" % baseModule.__name__
9393

94-
if name in moduleCache:
95-
return moduleCache[name]
96-
else:
94+
kwargs_tuple = tuple(kwargs.items())
95+
96+
try:
97+
return moduleCache[name][args][kwargs_tuple]
98+
except KeyError:
9799
mod = ModuleType(name)
98100
objs = factory(baseModule, *args, **kwargs)
99101
mod.__dict__.update(objs)
100-
moduleCache[name] = mod
102+
if "name" not in moduleCache:
103+
moduleCache[name] = {}
104+
if "args" not in moduleCache[name]:
105+
moduleCache[name][args] = {}
106+
if "kwargs" not in moduleCache[name][args]:
107+
moduleCache[name][args][kwargs_tuple] = {}
108+
moduleCache[name][args][kwargs_tuple] = mod
101109
return mod
102110

103111
return moduleFactory

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy