
Research
PyPI Package Disguised as Instagram Growth Tool Harvests User Credentials
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
Modern Python SDK for pCloud API with automatic token management and progress tracking
A modern Python SDK for the pCloud API with automatic token management and real-time progress tracking.
from pcloud_sdk import PCloudSDK
# Simple login with automatic token management (RECOMMENDED)
sdk = PCloudSDK() # Defaults: EU server, direct auth, token manager enabled
sdk.login("your_email@example.com", "your_password")
# Immediate usage
print(f"Connected: {sdk.user.get_user_email()}")
# Upload with real-time progress
def progress(bytes_transferred, total_bytes, percentage, speed, **kwargs):
print(f"π€ {percentage:.1f}% ({speed/1024/1024:.1f} MB/s)")
sdk.file.upload("/path/to/file.txt", progress_callback=progress)
# Next time: instant connection thanks to token manager! π
The SDK includes a comprehensive callback system for tracking upload and download progress:
from pcloud_sdk.progress_utils import create_progress_bar, create_detailed_progress
# Interactive progress bar
progress_bar = create_progress_bar("My Upload")
sdk.file.upload("file.txt", progress_callback=progress_bar)
# [ββββββββββββββββββββββββββββββββββββββββ] 100.0% (15.2/15.2MB) 2.1MB/s
# Detailed progress with logging
detailed = create_detailed_progress(log_file="transfers.log")
sdk.file.download(file_id, "./downloads/", progress_callback=detailed)
# Custom callback
def my_callback(bytes_transferred, total_bytes, percentage, speed, **kwargs):
if percentage % 25 == 0: # Every 25%
print(f"π― {kwargs['operation']}: {percentage:.0f}% complete")
sdk.file.upload("large_file.zip", progress_callback=my_callback)
pip install pcloud-sdk-python
The SDK only requires the requests
library as an external dependency.
π Integrated Token Manager - No more manual reconnection!
πͺπΊ EU Server by Default - Optimized for European users
π Direct Authentication by Default - Simpler to use
πΎ Automatic Credential Saving - Persistent sessions
π Real-time Progress Callbacks - Track uploads/downloads
π¨ Ready-to-use Progress Trackers - 4 different display styles
Note: For direct login with email/password, you don't need to create an application.
from pcloud_sdk import PCloudSDK, PCloudException
# Simple initialization with optimal defaults
sdk = PCloudSDK() # token_manager=True, location_id=2 (EU), auth_type="direct"
try:
# First time: provide email/password
login_info = sdk.login("your_email@example.com", "your_password")
print(f"Connected: {login_info['email']}")
# Next times: automatic instant connection!
# sdk.login() # No need for email/password, uses saved token
except PCloudException as e:
print(f"Error: {e}")
from pcloud_sdk import PCloudSDK, PCloudException
# Initialize with OAuth2
sdk = PCloudSDK(
app_key="your_client_id",
app_secret="your_client_secret",
auth_type="oauth2"
)
# Step 1: Get authorization URL
auth_url = sdk.get_auth_url("http://localhost:8000/callback")
print(f"Visit this URL: {auth_url}")
# Step 2: Exchange code for token
try:
token_info = sdk.authenticate("code_from_callback")
print(f"Access token: {token_info['access_token']}")
except PCloudException as e:
print(f"Authentication error: {e}")
sdk = PCloudSDK(
access_token="your_existing_token",
auth_type="direct",
token_manager=False # Optional: disable auto management
)
The SDK includes an integrated token manager to avoid frequent reconnections.
# First use
sdk = PCloudSDK()
sdk.login("email@example.com", "password")
# Token automatically saved to .pcloud_credentials
# Subsequent uses (same script later)
sdk = PCloudSDK()
sdk.login() # Instant connection with saved token!
# Custom credentials file
sdk = PCloudSDK(token_file=".my_pcloud_session")
# Force new connection
sdk.login("email", "password", force_login=True)
# Disable token manager completely
sdk = PCloudSDK(token_manager=False)
# Clean saved credentials
sdk.logout() # Deletes file and disconnects
# Credentials information
info = sdk.get_credentials_info()
print(f"Connected for {info['age_days']:.1f} days")
# Get user information
user_info = sdk.user.get_user_info()
print(f"Email: {sdk.user.get_user_email()}")
print(f"Used quota: {sdk.user.get_used_quota()} bytes")
print(f"Total quota: {sdk.user.get_quota()} bytes")
# List root folder contents
root_contents = sdk.folder.list_root()
print("Root contents:", root_contents)
# Create a new folder
folder_id = sdk.folder.create("My New Folder", parent=0)
print(f"Created folder ID: {folder_id}")
# List folder contents
contents = sdk.folder.get_content(folder_id)
print("Folder contents:", contents)
# Rename folder
sdk.folder.rename(folder_id, "New Name")
# Move folder
sdk.folder.move(folder_id, new_parent=0)
# Delete folder
sdk.folder.delete(folder_id)
# Recursive delete
sdk.folder.delete_recursive(folder_id)
# Upload a file
upload_result = sdk.file.upload(
file_path="/path/to/file.txt",
folder_id=0, # 0 = root folder
filename="uploaded_file.txt" # optional
)
file_id = upload_result['metadata'][0]['fileid']
print(f"File uploaded with ID: {file_id}")
# Get file information
file_info = sdk.file.get_info(file_id)
print("File info:", file_info)
# Get download link
download_link = sdk.file.get_link(file_id)
print(f"Download link: {download_link}")
# Download a file
sdk.file.download(file_id, destination="/download/path/")
# Rename a file
sdk.file.rename(file_id, "new_name.txt")
# Move a file
sdk.file.move(file_id, folder_id=new_folder_id)
# Copy a file
sdk.file.copy(file_id, folder_id=destination_folder_id)
# Delete a file
delete_result = sdk.file.delete(file_id)
print("File deleted:", delete_result)
from pcloud_sdk.progress_utils import (
create_progress_bar, create_detailed_progress,
create_minimal_progress, create_silent_progress
)
# 1. Interactive progress bar
progress_bar = create_progress_bar("Upload Progress")
sdk.file.upload("file.txt", progress_callback=progress_bar)
# 2. Detailed progress with logging
detailed = create_detailed_progress(log_file="transfer.log")
sdk.file.download(file_id, "./downloads/", progress_callback=detailed)
# 3. Minimal progress (milestones only)
minimal = create_minimal_progress()
sdk.file.upload("file.txt", progress_callback=minimal)
# 4. Silent progress (CSV logging only)
silent = create_silent_progress("transfer.csv")
sdk.file.upload("file.txt", progress_callback=silent)
# 5. Custom callback
def custom_progress(bytes_transferred, total_bytes, percentage, speed, **kwargs):
operation = kwargs.get('operation', 'transfer')
filename = kwargs.get('filename', 'file')
if percentage % 10 == 0: # Every 10%
print(f"{operation} {filename}: {percentage:.0f}% at {speed/1024/1024:.1f} MB/s")
sdk.file.upload("file.txt", progress_callback=custom_progress)
try:
result = sdk.file.upload("/nonexistent/file.txt")
except PCloudException as e:
print(f"pCloud error: {e}")
print(f"Error code: {e.code}")
except Exception as e:
print(f"General error: {e}")
The SDK includes a powerful CLI:
# Login
pcloud-sdk-python login --email user@example.com
# Get account info
pcloud-sdk-python info
# List root folder
pcloud-sdk-python list
# Upload file with progress
pcloud-sdk-python upload --file /path/to/file.txt --folder-id 0
# Download file
pcloud-sdk-python download --file-id 123456 --destination ./downloads/
# Delete file
pcloud-sdk-python delete --file-id 123456
# Logout
pcloud-sdk-python logout
location_id=2
: EU servers (default) πͺπΊlocation_id=1
: US servers πΊπΈ# EU server (default)
sdk = PCloudSDK() # location_id=2 by default
# Force US server
sdk = PCloudSDK(location_id=1)
# Token manager remembers your preferred server
from pcloud_sdk import App, User, File, Folder
# Manual configuration
app = App()
app.set_app_key("your_client_id")
app.set_app_secret("your_client_secret")
app.set_access_token("your_token")
app.set_location_id(2)
# Use classes directly
user = User(app)
folder = Folder(app)
file_manager = File(app)
# Configure request timeout (in seconds)
app.set_curl_execution_timeout(1800) # 30 minutes
The SDK automatically handles large file uploads in 10MB chunks:
# Large file upload (automatically handled in chunks)
result = sdk.file.upload("/path/to/large_file.zip", folder_id=0)
# Install development dependencies
pip install -r requirements/dev.txt
# Run tests
python tools/test_runner.py
# Run linting
python tools/lint.py
# Run benchmarks
python tools/benchmark.py
# Build package
python -m build
The SDK offers optimized defaults:
Parameter | Previous Default | v1.0 Default | Reason |
---|---|---|---|
location_id | 1 (US) | 2 (EU) | Better latency for Europe |
auth_type | "oauth2" | "direct" | Simpler to use |
token_manager | Not available | True | Avoid reconnections |
# v1.0 (old)
sdk = PCloudSDK("", "")
sdk.login("email", "password", location_id=2)
# v1.0 - Simple and optimized
sdk = PCloudSDK() # All optimal defaults
sdk.login("email", "password")
We welcome contributions! Please see our Contributing Guidelines for details.
git checkout -b feature/amazing-feature
)git commit -m 'Add amazing feature'
)git push origin feature/amazing-feature
)This project is licensed under the MIT License - see the LICENSE file for details.
PCloudSDK()
is enough!requests
instead of cURLPCloudSDK
wrapper class for simplicityThis SDK is a modern Python implementation inspired by the official pCloud PHP SDK, with additional features for better Python integration and user experience.
FAQs
Modern Python SDK for pCloud API with automatic token management and progress tracking
We found that pcloud-sdk-python demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
Security News
Research
Socket uncovered two npm packages that register hidden HTTP endpoints to delete all files on command.