/qbittorrent-api

Python client implementation for qBittorrent's Web API

Primary LanguagePythonMIT LicenseMIT

qBittorrent Web API Client

Python client implementation for qBittorrent Web API

GitHub Workflow Status (branch) Codecov branch Coverity Scan Codacy grade PyPI PyPI - Python Version

Currently supports qBittorrent v4.5.2 (Web API v2.8.19) released on Feb 27, 2023.

User Guide and API Reference available on Read the Docs.

Features

  • The entire qBittorrent Web API is implemented.
  • qBittorrent version checking for an endpoint's existence/features is automatically handled.
  • All Python versions are supported.
  • If the authentication cookie expires, a new one is automatically requested in line with any API call.

Installation

Install via pip from PyPI

python -m pip install qbittorrent-api

Getting Started

import qbittorrentapi

# instantiate a Client using the appropriate WebUI configuration
conn_info = dict(
    host="localhost",
    port=8080,
    username="admin",
    password="adminadmin",
)
qbt_client = qbittorrentapi.Client(**conn_info)

# the Client will automatically acquire/maintain a logged-in state
# in line with any request. therefore, this is not strictly necessary;
# however, you may want to test the provided login credentials.
try:
    qbt_client.auth_log_in()
except qbittorrentapi.LoginFailed as e:
    print(e)

# if the Client will not be long-lived or many Clients may be created
# in a relatively short amount of time, be sure to log out:
qbt_client.auth_log_out()

# or use a context manager:
with qbittorrentapi.Client(**conn_info) as qbt_client:
    if qbt_client.torrents_add(urls="...") != "Ok.":
        raise Exception("Failed to add torrent.")

# display qBittorrent info
print(f"qBittorrent: {qbt_client.app.version}")
print(f"qBittorrent Web API: {qbt_client.app.web_api_version}")
for k, v in qbt_client.app.build_info.items():
    print(f"{k}: {v}")

# retrieve and show all torrents
for torrent in qbt_client.torrents_info():
    print(f"{torrent.hash[-6:]}: {torrent.name} ({torrent.state})")

# pause all torrents
qbt_client.torrents.pause.all()