fix: remove accidental pip artifact file and update docs for iCloud Drive

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-10 01:03:36 +00:00
parent 30f06e0b32
commit 528f0a624d
4 changed files with 34 additions and 0 deletions
View File
+16
View File
@@ -1107,6 +1107,22 @@ For detailed setup instructions, see the [OneDrive Setup Guide](OneDriveSetup.md
For detailed setup instructions, see the [Amazon S3 Setup Guide](AmazonS3Setup.md).
### iCloud Drive (Apple)
| **Variable** | **Description** |
|---------------------------------|-------------------------------------------------------|
| `ICLOUD_USERNAME` | Apple ID email address |
| `ICLOUD_PASSWORD` | App-specific password (generate at [appleid.apple.com](https://appleid.apple.com/account/manage)) |
| `ICLOUD_FOLDER` | Target folder path in iCloud Drive (e.g. `Documents/Uploads`) |
| `ICLOUD_COOKIE_DIRECTORY` | Optional directory for session cookie persistence (default: `~/.pyicloud`) |
> **Note:** Apple does not provide a public REST API for iCloud Drive. This
> integration uses the [pyicloud](https://github.com/picklepete/pyicloud)
> library which relies on an unofficial, reverse-engineered protocol. Because
> most Apple IDs have two-factor authentication enabled, you **must** generate
> an [app-specific password](https://support.apple.com/en-us/102654) and use
> it as `ICLOUD_PASSWORD`.
### Notification System
| **Variable** | **Description** |
+1
View File
@@ -348,6 +348,7 @@ in task messages or logs.
| `PAPERLESS` | Paperless-ngx REST API, API token |
| `EMAIL` | SMTP/STARTTLS, file as attachment |
| `RCLONE` | `rclone copyto` subprocess, per-user rclone config |
| `ICLOUD` | pyicloud library, Apple ID + app-specific password |
### Multiple Destinations
+17
View File
@@ -9,6 +9,7 @@ from app.tasks.send_to_all import (
_should_upload_to_email,
_should_upload_to_ftp,
_should_upload_to_google_drive,
_should_upload_to_icloud,
_should_upload_to_nextcloud,
_should_upload_to_onedrive,
_should_upload_to_paperless,
@@ -145,6 +146,22 @@ class TestShouldUploadFunctions:
assert _should_upload_to_s3() is True
@patch("app.tasks.send_to_all.settings")
def test_should_upload_to_icloud_configured(self, mock_settings):
"""Test iCloud upload check."""
mock_settings.icloud_username = "user@example.com"
mock_settings.icloud_password = "app-specific-password"
assert _should_upload_to_icloud() is True
@patch("app.tasks.send_to_all.settings")
def test_should_upload_to_icloud_not_configured(self, mock_settings):
"""Test iCloud upload check when not configured."""
mock_settings.icloud_username = None
mock_settings.icloud_password = None
assert _should_upload_to_icloud() is False
@pytest.mark.unit
class TestGetConfiguredServicesFromValidator: