kebu / py-avataaars

Python component for Avataaars - port of https://github.com/fangpenlin/avataaars
MIT License
70 stars 31 forks source link

Invalid XML sometimes #7

Closed peterbe closed 3 years ago

peterbe commented 3 years ago
<path id=x6-"light" d="M50.7584999,...snip...122.446288 Z" fill-opacity="0.1" fill="#FFFFFF" fill-rule="evenodd"/>

I was getting

Traceback (most recent call last):
  File "dummy.py", line 24, in <module>
    get_random_avatar()
  File "/Users/peterbe/dev/PETERBECOM/django-peterbecom/peterbecom/homepage/views.py", line 1062, in get_random_avatar
    avatar.render_png_file(bytes)
  File "/Users/peterbe/.pyenv/versions/3.8.1/envs/django-peterbecom/lib/python3.8/site-packages/py_avataaars/__init__.py", line 341, in render_png_file
    svg2png(xml, write_to=output_file)
  File "/Users/peterbe/.pyenv/versions/3.8.1/envs/django-peterbecom/lib/python3.8/site-packages/cairosvg/__init__.py", line 55, in svg2png
    return surface.PNGSurface.convert(
  File "/Users/peterbe/.pyenv/versions/3.8.1/envs/django-peterbecom/lib/python3.8/site-packages/cairosvg/surface.py", line 127, in convert
    tree = Tree(
  File "/Users/peterbe/.pyenv/versions/3.8.1/envs/django-peterbecom/lib/python3.8/site-packages/cairosvg/parser.py", line 390, in __init__
    tree = ElementTree.fromstring(
  File "/Users/peterbe/.pyenv/versions/3.8.1/envs/django-peterbecom/lib/python3.8/site-packages/defusedxml/common.py", line 131, in fromstring
    parser.feed(text)
  File "/Users/peterbe/.pyenv/versions/3.8.1/Python.framework/Versions/3.8/lib/python3.8/xml/etree/ElementTree.py", line 1695, in feed
    self._raiseerror(v)
  File "/Users/peterbe/.pyenv/versions/3.8.1/Python.framework/Versions/3.8/lib/python3.8/xml/etree/ElementTree.py", line 1602, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 12034

So I dumped the svg XML that gets sent to svg2png() to understand what's going on at line 1, column 12034. And it's that:

id=x6-"light"

part.

peterbe commented 3 years ago

Here's the problem: https://github.com/kebu/py-avataaars/blob/9782aa32c92371158d709e4d89a898bcd0f405b7/py_avataaars/templates/top/long_hair_big_hair.svg#L53

peterbe commented 3 years ago

I tested it manually and now the error doesn't happen when I generate thousands of random avatars.