Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in / Register
D
deemix
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 13
    • Issues 13
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
    • Iterations
  • Merge Requests 0
    • Merge Requests 0
  • Requirements
    • Requirements
    • List
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
  • Analytics
    • Analytics
    • CI / CD
    • Code Review
    • Insights
    • Issue
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

and though bugs are the bane of my existence, rest assured the wretched thing will get the best of care here

  • RemixDev
  • deemix
  • Issues
  • #12

Closed
Open
Opened Nov 24, 2020 by DoNot AskMe@itsamegreenContributor

catch SSLError (timed out)

When downloading through a proxy i sometimes get a "timed out" error:

ERROR:deemix:[XXXX - YYYY] ('timed out',)
Traceback (most recent call last):
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/urllib3/response.py", line 438, in _error_catcher
    yield
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/urllib3/response.py", line 519, in read 
    data = self._fp.read(amt) if not fp_closed else b""
  File "/usr/lib/python3.6/http/client.py", line 463, in read
    n = self.readinto(b)
  File "/usr/lib/python3.6/http/client.py", line 507, in readinto
    n = self.fp.readinto(b)
  File "/usr/lib/python3.6/socket.py", line 586, in readinto
    return self._sock.recv_into(b)
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/eventlet/green/ssl.py", line 252, in recv_into
    return self._base_recv(nbytes, flags, into=True, buffer_=buffer)
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/eventlet/green/ssl.py", line 267, in _base_recv
    read = self.read(nbytes, buffer_)
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/eventlet/green/ssl.py", line 187, in read 
    super(GreenSSLSocket, self).read, *args, **kwargs)
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/eventlet/green/ssl.py", line 167, in _call_trampolining
    timeout_exc=timeout_exc('timed out'))
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/eventlet/hubs/__init__.py", line 159, in trampoline
    return hub.switch()
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/eventlet/hubs/hub.py", line 313, in switch
    return self.greenlet.switch()
ssl.SSLError: ('timed out',)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/[REDACTED]/gits/RemixDev/deemix/deemix/app/downloadjob.py", line 748, in downloadWrapper
    result = self.download(trackAPI_gw)
  File "/[REDACTED]/gits/RemixDev/deemix/deemix/app/downloadjob.py", line 578, in download
    raise e
  File "/[REDACTED]/gits/RemixDev/deemix/deemix/app/downloadjob.py", line 576, in download
    trackDownloaded = downloadMusic(track, trackAPI_gw)
  File "/[REDACTED]/gits/RemixDev/deemix/deemix/app/downloadjob.py", line 572, in downloadMusic
    raise e
  File "/[REDACTED]/gits/RemixDev/deemix/deemix/app/downloadjob.py", line 524, in downloadMusic
    self.streamTrack(stream, track)
  File "/[REDACTED]/gits/RemixDev/deemix/deemix/app/downloadjob.py", line 694, in streamTrack
    for chunk in request.iter_content(2048 * 3):
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/requests/models.py", line 753, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/urllib3/response.py", line 576, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/urllib3/response.py", line 541, in read 
    raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
  File "/usr/lib/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/[REDACTED]/gits/RemixDev/test/venv/lib/python3.6/site-packages/urllib3/response.py", line 449, in _error_catcher
    raise SSLError(e)
urllib3.exceptions.SSLError: ('timed out',)

I'm not sure why this is, but redownload always works. Catching urllib3.exceptions.SSLError in downloadjob.py works a treat, e.g.:

diff --git a/deemix/app/downloadjob.py b/deemix/app/downloadjob.py
index 033df13..b12f6eb 100644
--- a/deemix/app/downloadjob.py
+++ b/deemix/app/downloadjob.py
@@ -13,6 +13,7 @@ import errno
 from ssl import SSLError
 from os import makedirs
 from tempfile import gettempdir
+from urllib3.exceptions import SSLError as u3SSLError
 
 from deemix.app.queueitem import QISingle, QICollection
 from deemix.app.track import Track, AlbumDoesntExists
@@ -554,7 +555,7 @@ class DownloadJob:
                             raise DownloadFailed("notAvailableNoAlternative")
                     else:
                         raise DownloadFailed("notAvailable")
-                except (request_exception.ConnectionError, request_exception.ChunkedEncodingError) as e:
+                except (request_exception.ConnectionError, request_exception.ChunkedEncodingError, u3SSLError) as e:
                     if writepath.is_file(): writepath.unlink()
                     logger.warn(f"[{track.mainArtist['name']} - {track.title}] Error while downloading the track, trying again in 5s...")
                     eventlet.sleep(5)
Edited Nov 24, 2020 by DoNot AskMe
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: RemixDev/deemix#12