Uploading a file with tag year = 0 results in upload failure
I noticed that, when uploading a bunch of mp3 files with incomplete tags, a lot of these uploads result in failures.
Version: 0.20.1 Ubuntu 18.04
After some investigation, i found these log entries:
Mar 22 16:00:50 funkwhale gunicorn[986]: 2020-03-22 15:00:50,368 uvicorn.access INFO 77.21.66.84:0 - "POST /api/v1/uploads/ HTTP/1.1" 201
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,402: WARNING/ForkPoolWorker-2] [celery] Error during task 00f4265d-c319-4745-8248-e31a8d98c332: year 0 is out of range
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,403: WARNING/ForkPoolWorker-2] Traceback (most recent call last):
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,404: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/celery/app/trace.py", line 385, in trace_task
Mar 22 16:00:50 funkwhale celery[974]: R = retval = fun(*args, **kwargs)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,405: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/celery/app/trace.py", line 648, in __protected_call__
Mar 22 16:00:50 funkwhale celery[974]: return self.run(*args, **kwargs)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,405: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/api/funkwhale_api/taskapp/celery.py", line 51, in inner
Mar 22 16:00:50 funkwhale celery[974]: return function(*args, **kwargs)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,405: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/api/funkwhale_api/music/tasks.py", line 182, in process_upload
Mar 22 16:00:50 funkwhale celery[974]: serializer.is_valid()
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 235, in is_valid
Mar 22 16:00:50 funkwhale celery[974]: self._validated_data = self.run_validation(self.initial_data)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 430, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 487, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: validated_value = field.run_validation(primitive_value)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/fields.py", line 542, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/api/funkwhale_api/music/metadata.py", line 525, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: album_serializer.is_valid(raise_exception=True)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 235, in is_valid
Mar 22 16:00:50 funkwhale celery[974]: self._validated_data = self.run_validation(self.initial_data)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 430, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 487, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: validated_value = field.run_validation(primitive_value)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/fields.py", line 796, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: return super().run_validation(data)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/fields.py", line 542, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/api/funkwhale_api/music/metadata.py", line 557, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: parsed = pendulum.parse(str(value))
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parser.py", line 23, in parse
Mar 22 16:00:50 funkwhale celery[974]: return _parse(text, **options)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parser.py", line 39, in _parse
Mar 22 16:00:50 funkwhale celery[974]: parsed = base_parse(text, **options)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parsing/__init__.py", line 74, in parse
Mar 22 16:00:50 funkwhale celery[974]: return _normalize(_parse(text, **_options), **_options)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,406: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parsing/__init__.py", line 120, in _parse
Mar 22 16:00:50 funkwhale celery[974]: return _parse_common(text, **options)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,407: WARNING/ForkPoolWorker-2] File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parsing/__init__.py", line 177, in _parse_common
Mar 22 16:00:50 funkwhale celery[974]: return date(year, month, day)
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,407: WARNING/ForkPoolWorker-2] ValueError: year 0 is out of range
Mar 22 16:00:50 funkwhale celery[974]: [2020-03-22 15:00:50,407: ERROR/ForkPoolWorker-2] Task music.process_upload[00f4265d-c319-4745-8248-e31a8d98c332] raised unexpected: ValueError('year 0 is out of range',)
Mar 22 16:00:50 funkwhale celery[974]: Traceback (most recent call last):
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/celery/app/trace.py", line 385, in trace_task
Mar 22 16:00:50 funkwhale celery[974]: R = retval = fun(*args, **kwargs)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/celery/app/trace.py", line 648, in __protected_call__
Mar 22 16:00:50 funkwhale celery[974]: return self.run(*args, **kwargs)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/api/funkwhale_api/taskapp/celery.py", line 51, in inner
Mar 22 16:00:50 funkwhale celery[974]: return function(*args, **kwargs)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/api/funkwhale_api/music/tasks.py", line 182, in process_upload
Mar 22 16:00:50 funkwhale celery[974]: serializer.is_valid()
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 235, in is_valid
Mar 22 16:00:50 funkwhale celery[974]: self._validated_data = self.run_validation(self.initial_data)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 430, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 487, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: validated_value = field.run_validation(primitive_value)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/fields.py", line 542, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/api/funkwhale_api/music/metadata.py", line 525, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: album_serializer.is_valid(raise_exception=True)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 235, in is_valid
Mar 22 16:00:50 funkwhale celery[974]: self._validated_data = self.run_validation(self.initial_data)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 430, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/serializers.py", line 487, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: validated_value = field.run_validation(primitive_value)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/fields.py", line 796, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: return super().run_validation(data)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/rest_framework/fields.py", line 542, in run_validation
Mar 22 16:00:50 funkwhale celery[974]: value = self.to_internal_value(data)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/api/funkwhale_api/music/metadata.py", line 557, in to_internal_value
Mar 22 16:00:50 funkwhale celery[974]: parsed = pendulum.parse(str(value))
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parser.py", line 23, in parse
Mar 22 16:00:50 funkwhale celery[974]: return _parse(text, **options)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parser.py", line 39, in _parse
Mar 22 16:00:50 funkwhale celery[974]: parsed = base_parse(text, **options)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parsing/__init__.py", line 74, in parse
Mar 22 16:00:50 funkwhale celery[974]: return _normalize(_parse(text, **_options), **_options)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parsing/__init__.py", line 120, in _parse
Mar 22 16:00:50 funkwhale celery[974]: return _parse_common(text, **options)
Mar 22 16:00:50 funkwhale celery[974]: File "/srv/funkwhale/virtualenv/lib/python3.6/site-packages/pendulum/parsing/__init__.py", line 177, in _parse_common
Mar 22 16:00:50 funkwhale celery[974]: return date(year, month, day)
Mar 22 16:00:50 funkwhale celery[974]: ValueError: year 0 is out of range
After adding a value for the year tag != 0 to the files, i was able to upload them without any problems.
This bug was described in this Ticket about 1 year ago #796 (closed) but seems to have been lost in time.