cristoper / feedmixer

A self-hosted API to fetch and mix entries from Atom and RSS feeds (returns Atom, RSS, or JSON)
Do What The F*ck You Want To Public License
168 stars 10 forks source link

AttributeError: 'Enclosure' object has no attribute 'get' #4

Closed 49e94b8f256530dc0d41f740dfe8a4c1 closed 4 years ago

49e94b8f256530dc0d41f740dfe8a4c1 commented 4 years ago
feedmixer_1  | [2020-01-13 15:54:38 +0000] [12] [ERROR] Error handling request /json?f=https://kurier.at/xml/rssd&f=https://rss.orf.at/news.xml&f=https://www.derstandard.at/rss/inland&n=10
feedmixer_1  | Traceback (most recent call last):
feedmixer_1  |   File "/app/.venv/lib/python3.5/site-packages/gunicorn/workers/sync.py", line 134, in handle
feedmixer_1  |     self.handle_request(listener, req, client, addr)
feedmixer_1  |   File "/app/.venv/lib/python3.5/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
feedmixer_1  |     respiter = self.wsgi(environ, resp.start_response)
feedmixer_1  |   File "/app/feedmixer_wsgi.py", line 59, in application
feedmixer_1  |     return api(environ, start_response)
feedmixer_1  |   File "falcon/api.py", line 274, in falcon.api.API.__call__
feedmixer_1  |   File "falcon/api.py", line 269, in falcon.api.API.__call__
feedmixer_1  |   File "/app/feedmixer_api.py", line 121, in on_get
feedmixer_1  |     resp.body = method()
feedmixer_1  |   File "/app/feedmixer.py", line 202, in json_feed
feedmixer_1  |     return self.__generate_feed(JSONFeed).writeString('utf-8')
feedmixer_1  |   File "/app/.venv/lib/python3.5/site-packages/feedgenerator/django/utils/feedgenerator.py", line 193, in writeString
feedmixer_1  |     self.write(s, encoding)
feedmixer_1  |   File "/app/.venv/lib/python3.5/site-packages/jsonfeed/core.py", line 28, in write
feedmixer_1  |     data['items'] += [self.add_item_elements(item), ]
feedmixer_1  |   File "/app/.venv/lib/python3.5/site-packages/jsonfeed/core.py", line 124, in add_item_elements
feedmixer_1  |     'url': attachment.get('enclosure_url'),
feedmixer_1  | AttributeError: 'Enclosure' object has no attribute 'get'

Example feeds that break it

https://www.kleinezeitung.at/rss/wirtschaft
https://kurier.at/xml/rssd
cristoper commented 4 years ago

@49e94b8f256530dc0d41f740dfe8a4c1 -

Thank you for the report, sorry I wasn't able to look at it sooner. I think this is a bug in the upstream package django-jsonfeed and I've submitted a pull request to fix it there. But for now I've also forked it and updated the feedmixer Pipfile to depend on the fork. So you should be able to update your install and have a fixed version running:

$ git pull origin master $ pipenv sync

Can you confirm whether that fixes it for you?

49e94b8f256530dc0d41f740dfe8a4c1 commented 4 years ago

Thank you for the fix. It works but I just pulled from origin master and rebuilt the docker container. Thanks again mate!