@@ -15,14 +15,12 @@ py3k = sys.version_info[0] == 3 | |||||
if py3k: | if py3k: | ||||
bytes = bytes | bytes = bytes | ||||
str = str | str = str | ||||
basestring = str | |||||
maxsize = sys.maxsize | maxsize = sys.maxsize | ||||
import html.entities as htmlentities | import html.entities as htmlentities | ||||
else: | else: | ||||
bytes = str | bytes = str | ||||
str = unicode | str = unicode | ||||
basestring = basestring | |||||
maxsize = sys.maxint | maxsize = sys.maxint | ||||
import htmlentitydefs as htmlentities | import htmlentitydefs as htmlentities | ||||
@@ -48,7 +48,7 @@ class Attribute(StringMixIn): | |||||
def __unicode__(self): | def __unicode__(self): | ||||
base = self.pad_first + str(self.name) + self.pad_before_eq | base = self.pad_first + str(self.name) + self.pad_before_eq | ||||
if self.value: | |||||
if self.value is not None: | |||||
if self.quoted: | if self.quoted: | ||||
return base + '="' + self.pad_after_eq + str(self.value) + '"' | return base + '="' + self.pad_after_eq + str(self.value) + '"' | ||||
return base + "=" + self.pad_after_eq + str(self.value) | return base + "=" + self.pad_after_eq + str(self.value) | ||||
@@ -100,7 +100,7 @@ class Attribute(StringMixIn): | |||||
@value.setter | @value.setter | ||||
def value(self, newval): | def value(self, newval): | ||||
self._value = parse_anything(newval) | |||||
self._value = None if newval is None else parse_anything(newval) | |||||
@quoted.setter | @quoted.setter | ||||
def quoted(self, value): | def quoted(self, value): | ||||
@@ -26,7 +26,7 @@ import re | |||||
from . import HTMLEntity, Node, Text | from . import HTMLEntity, Node, Text | ||||
from .extras import Parameter | from .extras import Parameter | ||||
from ..compat import basestring, str | |||||
from ..compat import str | |||||
from ..utils import parse_anything | from ..utils import parse_anything | ||||
__all__ = ["Template"] | __all__ = ["Template"] | ||||
@@ -84,7 +84,7 @@ class Template(Node): | |||||
replacement = str(HTMLEntity(value=ord(char))) | replacement = str(HTMLEntity(value=ord(char))) | ||||
for node in code.filter_text(recursive=False): | for node in code.filter_text(recursive=False): | ||||
if char in node: | if char in node: | ||||
code.replace(node, node.replace(char, replacement)) | |||||
code.replace(node, node.replace(char, replacement), False) | |||||
def _blank_param_value(self, value): | def _blank_param_value(self, value): | ||||
"""Remove the content from *value* while keeping its whitespace. | """Remove the content from *value* while keeping its whitespace. | ||||
@@ -170,9 +170,9 @@ class Template(Node): | |||||
With *ignore_empty*, ``False`` will be returned even if the template | With *ignore_empty*, ``False`` will be returned even if the template | ||||
contains a parameter with the name *name*, if the parameter's value | contains a parameter with the name *name*, if the parameter's value | ||||
is empty. Note that a template may have multiple parameters with the | is empty. Note that a template may have multiple parameters with the | ||||
same name. | |||||
same name, but only the last one is read by the MediaWiki parser. | |||||
""" | """ | ||||
name = name.strip() if isinstance(name, basestring) else str(name) | |||||
name = str(name).strip() | |||||
for param in self.params: | for param in self.params: | ||||
if param.name.strip() == name: | if param.name.strip() == name: | ||||
if ignore_empty and not param.value.strip(): | if ignore_empty and not param.value.strip(): | ||||
@@ -191,7 +191,7 @@ class Template(Node): | |||||
parameters can have the same name, we'll return the last match, since | parameters can have the same name, we'll return the last match, since | ||||
the last parameter is the only one read by the MediaWiki parser. | the last parameter is the only one read by the MediaWiki parser. | ||||
""" | """ | ||||
name = name.strip() if isinstance(name, basestring) else str(name) | |||||
name = str(name).strip() | |||||
for param in reversed(self.params): | for param in reversed(self.params): | ||||
if param.name.strip() == name: | if param.name.strip() == name: | ||||
return param | return param | ||||
@@ -294,7 +294,7 @@ class Template(Node): | |||||
the first instance if none have dependents, otherwise the one with | the first instance if none have dependents, otherwise the one with | ||||
dependents will be kept). | dependents will be kept). | ||||
""" | """ | ||||
name = name.strip() if isinstance(name, basestring) else str(name) | |||||
name = str(name).strip() | |||||
removed = False | removed = False | ||||
to_remove = [] | to_remove = [] | ||||
for i, param in enumerate(self.params): | for i, param in enumerate(self.params): | ||||
@@ -30,7 +30,7 @@ into the :py:class`~.Wikicode` tree by the :py:class:`~.Builder`. | |||||
from __future__ import unicode_literals | from __future__ import unicode_literals | ||||
from ..compat import basestring, py3k | |||||
from ..compat import py3k, str | |||||
__all__ = ["Token"] | __all__ = ["Token"] | ||||
@@ -43,7 +43,7 @@ class Token(object): | |||||
def __repr__(self): | def __repr__(self): | ||||
args = [] | args = [] | ||||
for key, value in self._kwargs.items(): | for key, value in self._kwargs.items(): | ||||
if isinstance(value, basestring) and len(value) > 100: | |||||
if isinstance(value, str) and len(value) > 100: | |||||
args.append(key + "=" + repr(value[:97] + "...")) | args.append(key + "=" + repr(value[:97] + "...")) | ||||
else: | else: | ||||
args.append(key + "=" + repr(value)) | args.append(key + "=" + repr(value)) | ||||
@@ -40,6 +40,8 @@ class TestAttribute(TreeEqualityTestCase): | |||||
self.assertEqual(' foo="bar"', str(node2)) | self.assertEqual(' foo="bar"', str(node2)) | ||||
node3 = Attribute(wraptext("a"), wraptext("b"), False, "", " ", " ") | node3 = Attribute(wraptext("a"), wraptext("b"), False, "", " ", " ") | ||||
self.assertEqual("a = b", str(node3)) | self.assertEqual("a = b", str(node3)) | ||||
node4 = Attribute(wraptext("a"), wrap([]), False, " ", "", " ") | |||||
self.assertEqual(" a= ", str(node4)) | |||||
def test_name(self): | def test_name(self): | ||||
"""test getter/setter for the name attribute""" | """test getter/setter for the name attribute""" | ||||
@@ -56,6 +58,8 @@ class TestAttribute(TreeEqualityTestCase): | |||||
self.assertIs(value, node.value) | self.assertIs(value, node.value) | ||||
node.value = "{{bar}}" | node.value = "{{bar}}" | ||||
self.assertWikicodeEqual(wrap([Template(wraptext("bar"))]), node.value) | self.assertWikicodeEqual(wrap([Template(wraptext("bar"))]), node.value) | ||||
node.value = None | |||||
self.assertIs(None, node.value) | |||||
def test_quoted(self): | def test_quoted(self): | ||||
"""test getter/setter for the quoted attribute""" | """test getter/setter for the quoted attribute""" | ||||