Comment 0 for bug 1842026

Revision history for this message
MichaƂ Trybus (komar007) wrote :

Please see my findings at https://stackoverflow.com/questions/57687116/is-there-a-contract-for-namespace-map-argument-of-targets-start-method-in-lxml

test.py prints the contents of the namespace map.
run.sh runs the test on the 2 versions between which the change was introduced.
Dockerfile is needed by run.sh.

My output from run.sh (results.txt) is:
Python : sys.version_info(major=3, minor=7, micro=4, releaselevel='final', serial=0)
lxml.etree : (4, 4, 0, 0)
libxml used : (2, 9, 9)
libxml compiled : (2, 9, 9)
libxslt used : (1, 1, 33)
libxslt compiled : (1, 1, 33)
{'': 'http://www.w3.org/ns/ttml', 'tts': 'http://www.w3.org/ns/ttml#styling'}
---
Python : sys.version_info(major=3, minor=7, micro=4, releaselevel='final', serial=0)
lxml.etree : (4, 3, 5, 0)
libxml used : (2, 9, 9)
libxml compiled : (2, 9, 9)
libxslt used : (1, 1, 33)
libxslt compiled : (1, 1, 33)
{None: 'http://www.w3.org/ns/ttml', 'tts': 'http://www.w3.org/ns/ttml#styling'}
---

I consider this a potential bug, because it breaks compatibility with existing software and I couldn't find the expected format of the namespace map in the docs or release notes. See for example beautifulsoup4 and the following test:

#!/usr/bin/env python3

DFXP_BASE_MARKUP = '''
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" />
'''

from bs4 import BeautifulSoup

b = BeautifulSoup(DFXP_BASE_MARKUP, 'lxml-xml)
print(b.prettify())

On lxml-4.4.0 it produces invalid XML.
On lxml-4.3.5 the output is valid.