From 08439bdcf17d7cb9c43e97bd88656abc7a07f53f Mon Sep 17 00:00:00 2001 From: dave mankoff Date: Sun, 10 Feb 2013 11:02:52 -0500 Subject: [PATCH] fix null attributes in html parser --- pelican/readers.py | 5 ++++- tests/content/article_with_null_attributes.html | 8 ++++++++ tests/test_readers.py | 10 ++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/content/article_with_null_attributes.html diff --git a/pelican/readers.py b/pelican/readers.py index 46db3c96..a3c4364b 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -240,7 +240,10 @@ class HTMLReader(Reader): def build_tag(self, tag, attrs, close_tag): result = '<{}'.format(cgi.escape(tag)) - result += ''.join((' {}="{}"'.format(cgi.escape(k), cgi.escape(v)) for k,v in attrs)) + for k,v in attrs: + result += ' ' + cgi.escape(k) + if v is not None: + result += '="{}"'.format(cgi.escape(v)) if close_tag: return result + ' />' return result + '>' diff --git a/tests/content/article_with_null_attributes.html b/tests/content/article_with_null_attributes.html new file mode 100644 index 00000000..68da704c --- /dev/null +++ b/tests/content/article_with_null_attributes.html @@ -0,0 +1,8 @@ + + + + + Ensure that empty attributes are copied properly. + + + diff --git a/tests/test_readers.py b/tests/test_readers.py index 39bc2067..be544caa 100644 --- a/tests/test_readers.py +++ b/tests/test_readers.py @@ -298,9 +298,19 @@ class HTMLReaderTest(unittest.TestCase): self.assertEquals(value, metadata[key], key) + def test_article_with_null_attributes(self): + reader = readers.HTMLReader({}) + content, metadata = reader.read(_path('article_with_null_attributes.html')) + + self.assertEquals(''' + Ensure that empty attributes are copied properly. + + ''', content) + def test_article_metadata_key_lowercase(self): """Keys of metadata should be lowercase.""" reader = readers.HTMLReader({}) content, metadata = reader.read(_path('article_with_uppercase_metadata.html')) self.assertIn('category', metadata, "Key should be lowercase.") self.assertEquals('Yeah', metadata.get('category'), "Value keeps cases.") +