mandarons / icloud-drive-docker

Dockerized iCloud Client - make a local copy of your iCloud documents and photos, and keep it automatically up-to-date.
BSD 3-Clause "New" or "Revised" License
985 stars 47 forks source link

[FEATURE] Handling 503, 504 errors #116

Closed nodecentral closed 1 year ago

nodecentral commented 1 year ago

Use case

I’ve noticed a level of instability with the container shutting down , looking in the logs I can see a few 50x errors were the cause..

1) Service Unavailable (503) 2) Gateway Time-out (504)

Describe the solution you'd like

Is it possible for iCloud-drive-docker to handle this better, rather than exit out

Describe alternatives you've considered

N/A

Additional context

Here is what I can see in the logs for the 503..

2023-01-19 00:43:20,013 :: INFO :: root :: sync_drive.py :: 161 :: Downloading /app/icloud/drive/Downloads/traffic_lights.png ...
2023-01-19 00:43:37,693 :: INFO :: root :: sync_drive.py :: 161 :: Downloading /app/icloud/drive/Downloads/ttyUSBSpy/core/__init__.py ...
2023-01-19 00:43:40,925 :: ERROR :: icloudpy.base :: base.py :: 186 :: Service Unavailable (503)
Traceback (most recent call last):
  File "/app/./src/main.py", line 6, in <module>
    sync.sync()
  File "/app/src/sync.py", line 65, in sync
    sync_drive.sync_drive(config=config, drive=api.drive)
  File "/app/src/sync_drive.py", line 267, in sync_drive
    return sync_directory(
  File "/app/src/sync_drive.py", line 235, in sync_directory
    sync_directory(
  File "/app/src/sync_drive.py", line 235, in sync_directory
    sync_directory(
  File "/app/src/sync_drive.py", line 235, in sync_directory
    sync_directory(
  File "/app/src/sync_drive.py", line 252, in sync_directory
    process_file(
  File "/app/src/sync_drive.py", line 183, in process_file
    if is_package(item=item):
  File "/app/src/sync_drive.py", line 153, in is_package
    with item.open(stream=True) as response:
  File "/app/venv/lib/python3.9/site-packages/icloudpy/services/drive.py", line 309, in open
    return self.connection.get_file(
  File "/app/venv/lib/python3.9/site-packages/icloudpy/services/drive.py", line 63, in get_file
    return self.session.get(data_token["url"], params=self.params, **kwargs)
  File "/app/venv/lib/python3.9/site-packages/requests/sessions.py", line 600, in get
    return self.request("GET", url, **kwargs)
  File "/app/venv/lib/python3.9/site-packages/icloudpy/base.py", line 131, in request
    self._raise_error(response.status_code, response.reason)
  File "/app/venv/lib/python3.9/site-packages/icloudpy/base.py", line 187, in _raise_error
    raise api_error
icloudpy.exceptions.ICloudPyAPIResponseException: Service Unavailable (503)

And this is the 504

2023-01-19 08:47:06,892 :: INFO :: root :: sync_drive.py :: 161 :: Downloading /app/icloud/drive/Downloads/ttyUSBSpy/core/__init__.py ...
2023-01-19 08:47:31,227 :: INFO :: root :: sync_drive.py :: 161 :: Downloading /app/icloud/drive/Downloads/veraflux-master.zip ...
2023-01-19 08:47:32,729 :: INFO :: root :: sync_drive.py :: 161 :: Downloading /app/icloud/drive/Downloads/Yeah it was great.you ok. how wo.vmg ...
2023-01-19 08:48:28,907 :: ERROR :: icloudpy.base :: base.py :: 186 :: Gateway Time-out (504)
Traceback (most recent call last):
  File "/app/./src/main.py", line 6, in <module>
    sync.sync()
  File "/app/src/sync.py", line 65, in sync
    sync_drive.sync_drive(config=config, drive=api.drive)
  File "/app/src/sync_drive.py", line 267, in sync_drive
    return sync_directory(
  File "/app/src/sync_drive.py", line 235, in sync_directory
    sync_directory(
  File "/app/src/sync_drive.py", line 252, in sync_directory
    process_file(
  File "/app/src/sync_drive.py", line 183, in process_file
    if is_package(item=item):
  File "/app/src/sync_drive.py", line 153, in is_package
    with item.open(stream=True) as response:
  File "/app/venv/lib/python3.9/site-packages/icloudpy/services/drive.py", line 309, in open
    return self.connection.get_file(
  File "/app/venv/lib/python3.9/site-packages/icloudpy/services/drive.py", line 65, in get_file
    return self.session.get(package_token["url"], params=self.params, **kwargs)
  File "/app/venv/lib/python3.9/site-packages/requests/sessions.py", line 600, in get
    return self.request("GET", url, **kwargs)
  File "/app/venv/lib/python3.9/site-packages/icloudpy/base.py", line 131, in request
    self._raise_error(response.status_code, response.reason)
  File "/app/venv/lib/python3.9/site-packages/icloudpy/base.py", line 187, in _raise_error
    raise api_error
icloudpy.exceptions.ICloudPyAPIResponseException: Gateway Time-out (504)