- Advertise support for qBittorrent v5.0.3
- Advertise support for qBittorrent v5.1.0beta1
- Add support to add torrent as forced (#507)
- Advertise support for qBittorrent v5.0.2
- Dropped support for Python 3.8 (#494)
- Fixed typing for
content_layout
fortorrents.add()
(#499) RecursionError
is no longer raised when client is banned (#501)
- Advertise support for qBittorrent v5.0.1
- Add support for managing cookies (#492)
app/cookies
app/setCookies
- Note: these endpoints are scheduled for release in qBittorrent v5.1.0
- Advertise support for qBittorrent v5.0.0
- Features previously added for v5.0.0 release:
- Rename resume/pause actions for torrents to start/stop (#434)
- For instance,
client.torrents_pause()
is nowclient.torrents_stop()
- All existing method and argument names are still supported and are aliased to the new names
- For instance,
- Add support for
app/getDirectoryContent
(#449) - Add support for
search/downloadTorrent
(#451) - Added support for
private
argument fortorrents/info
(#464) - Add support for WebSeed modification endpoints (#481)
- Rename resume/pause actions for torrents to start/stop (#434)
- Advertise support for qBittorrent v4.6.7
- Advertise support for qBittorrent v4.6.6 and 5.0.0rc1 (#482)
- Add support for WebSeed modification endpoints (#481)
torrents/addWebSeeds
torrents/editWebSeed
torrents/removeWebSeeds
- Resolve errors from type checkers for
functools.wraps
usage (#472) - Included changes for upcoming qBittorrent v5.0.0 release:
- Added support for
private
argument fortorrents/info
(#464)
- Added support for
- Added support to configure
HTTPAdapter
(#459)
- Minor typing fixes (#456, #457)
- Advertise support for qBittorrent v4.6.5
- Packages published to PyPI are now attested by GitHub (#453)
- Included changes for upcoming qBittorrent v5.0.0 release:
- Rename resume/pause actions for torrents to start/stop (#434)
- For instance,
client.torrents_pause()
is nowclient.torrents_stop()
- All existing method and argument names are still supported and are aliased to the new names
- For instance,
- Add support for
app/getDirectoryContent
(#449) - Add support for
search/downloadTorrent
(#451)
- Rename resume/pause actions for torrents to start/stop (#434)
- Advertise support for qBittorrent v4.6.4
- Allow added RSS feeds without a name/path to default to the name in the feed (#423)
- Advertise support for Python 3.13 (#349)
- Advertise support for qBittorrent v4.6.3
- Advertise support for qBittorrent v4.6.2
- Advertise support for qBittorrent v4.6.1
- Add support for
torrents/count
(#366)
- Remove Python 2 platform tag from published wheel (#369)
- Advertise support for qBittorrent v4.6.0
- Dropped support for legacy Python versions; Python 3.8+ is supported (#333)
- Refactored typing from stub files in to source (#345)
- Dropped support for API method arguments
hash
andhashes
; usetorrent_hash
andtorrent_hashes
, respectively (#345)- For example, replace
client.torrents_info(hashes="...")
withclient.torrents_info(torrent_hashes="...")
- For example, replace
- Advertise support for Python 3.12
- Advertise support for qBittorrent v4.5.5
- Add
inactive_seeding_time_limit
fortorrents/setShareLimits
(#271) - Implement
app/networkInterfaceList
andapp/networkInterfaceAddressList
(#272)
- Ensure the wheel is uploaded with the release to PyPI
- Convert
APINames
andTorrentStatus
toStrEnum
andTrackerStatus
toIntEnum
(#267)
- Advertise support for qBittorrent v4.5.4
- The
Client
is no longer binded toList
s (#230) - This does not affect normal operation but allows for slicing, adding, and copying
List
s
- Advertise support for qBittorrent v4.5.3
Client
can now be used as a context manager
- Fix building docs after implementing
src-layout
- Add the
TrackerStatus
Enum to identify tracker statuses fromtorrents/trackers
- Add support for torrent status filters
seeding
,moving
,errored
, andchecking
- Advertise support for qBittorrent v4.5.2
- Advertise support for qBittorrent v4.5.1
- Remove dependence on qBittorrent authentication cookie being named
SID
- Minor typing fixes
- Support qBittorrent v4.5.0 release
- Add support for
torrents/export
- Implement new
transfer/setSpeedLimitsMode
in place of existingtransfer/toggleSpeedLimitsMode
- Add support for
stopCondition
intorrents/add
- Update typing to be complete, accurate, and shipped with the package
- Advertise support for Python 3.11
- Advertise support for qBittorrent v4.4.5
- Advertise support for qBittorrent v4.4.4
- Comply with enforced HTTP method requirements from qBittorrent
- Remove
PYTHON_
prefix for configuration environment variables
- Add
setuptools
as an explicit dependency forpkg_resources.parse_version()
- Reorder class hierarchy to allow independent MixIn use
- Clean up typing annotations
- Optimize Dictionary and List initializations
- Rename Alias decorator to alias for better conformity
- Implement pre-commit checks
- Advertise support for qBittorrent v4.4.3.1
- Advertise support for qBittorrent v4.4.3
- Revamp GitHub CI
- Reorg
Request
for some more clarity (hopefully)
- Stop advertising support for Python 3.6 (EOL 12/2021)
- Publish to PyPI using API token and cleanup GitHub Action scripts
- Advertise support for qBittorrent v4.4.2
- Advertise support for qBittorrent v4.4.1
- qBittorrent reverted the category dictionary key
savePath
back tosave_path
- Support for qBittorrent v4.4.0
torrents/info
results can now be filtered by a torrent tag- Added new torrent state "Forced Metadata Downloading"
- Support per-torrent/per-category "download folder"
- Stop sending
Origin
andReferer
headers (Fixes #63)
- Close files that are opened and sent to Requests when adding torrents from files
- Enable warnings for tests and explicitly close Requests Sessions to prevent (mostly spurious) ResourceWarnings
- Add Type Hints for all public and private functions, methods, and variables
- Support HTTP timeouts as well as arbitrary Requests configurations
- Advertise support for qBittorrent v4.3.8
- Drop support for Python 3.5
- Support for qBittorrent v4.3.5
torrents/files
includesindex
for each file;index
officially replacesid
butid
will still be populated
- Allow users to force a specific communications scheme with
FORCE_SCHEME_FROM_HOST
(fixes #54)
- Add support for ratio limit and seeding time limit when adding torrents
- Update license in setup to match gpl->mit license change on GitHub
- Replace
TorrentStates.FORCE_DOWNLOAD='forceDL'
withTorrentStates.FORCED_DOWNLOAD='forcedDL'
- Generally refactor
requests.py
so it's better and easier to read - Persist a Requests Session between API calls instead of always creating a new one...small perf benefit
- Move auth endpoints back to a dedicated module
- Since
attrdict
is apparently going to break in Python 3.10 and it is no longer maintained, I've vendored a modified version (fixes #45) - Created
handle_hashes
decorator to hide the cruft of continuing to support hash and hashes arguments
- Support qBittorrent v4.3.3 and Web API v2.7 (...again)
- New
torrents/renameFile
andtorrents/renameFolder
endpoints - Retrieve app api version when needed instead of caching
- Stop verifying and removing individual parameters when they aren't supported
- Support qBittorrent v4.3.2 and Web API v2.7
torrents/add
supports adding torrents with tags viatags
parameterapp/preferences
supports toggling internationalized domain name (IDN) support viaidn_support_enabled
- BREAKING CHANGE: for
torrents/add
,is_root_folder
(orroot_folder
) is superseded bycontent_layout
- For
torrents/delete
,delete_files
now defaults toFalse
instead of required being explicitly passed
- Add support for non-standard API endpoint paths (Fixes #37)
- Allows users to leverage this client when qBittorrent is configured behind a reverse proxy
- For instance, if the Web API is being exposed at "http://localhost/qbt/", then users can instantiate via
Client(host='localhost/qbt')
and all API endpoint paths will be prefixed with "/qbt"
- For instance, if the Web API is being exposed at "http://localhost/qbt/", then users can instantiate via
- Additionally, the scheme (i.e. http or https) from the user will now be respected as the first choice for which scheme is used to communicate with qBittorrent
- However, users still don't need to even specify a scheme; it'll be automatically determined on the first connection to qBittorrent
- Neither of these should be breaking changes, but if you're instantiating with an incorrect scheme or an irrelevant path, you may need to prevent doing that now
- Support qBittorrent v4.3.1 and Web API v2.6.1
- Path of torrent content now available via
content_path
fromtorrents/info
- Fix support for raw bytes for
torrent_files
intorrents_add()
for Python 3 (Fixes #34)
- Support qBittorrent v4.3.0.1 and Web API v2.6
- Due to qBittorrent changes,
search/categories
no longer returns anything andrss/renameRule
works again
- Advertise support for Python 3.9
- Only request
enum34
for Python 2
- Support adding torrents from raw torrent files as bytes or file handles (Fixes #23)
- Introduce
TorrentStates
enum for qBittorrent list of torrent states
- Update tests and misc small fixes
- Re-release of v2020.7.5
- Add RTD documentation
- Bug fix release. Reorganized code and classes to be more logical
- Started returning None from many methods that were returning Requests Responses
- Content-Length header is now explicitly sent as "0" for any POSTs without a body
- Endpoint input parameters
hash
andhashes
are renamed totorrent_hash
andtorrent_hashes
.hash
andhashes
remain supported search_uninstall_plugin
now works. search_enable_plugin now supports multiple pluginsTorrent.download_limit
now only return the value instead of a dictionary.Torrent.upload_limit
now works- Drop advertising Python 2.6 and 3.4 support; add PyPy3 support
- Implement test suite and CI that can test all supported qBittorrent versions on all pythons
- Include currently supported qBittorrent version in README (Fixes #11)
- Add support for
rss/markAsRead
andrss/matchingArticles
. Added in v2.5.1 (Fixes #10)
- Add
stalled()
,stalled_uploading()
, andstalled_downloading()
totorrents.info
interaction; added in Web API v2.4.1 - Implement torrent file renaming. Added in Web API v2.4.0 (Fixes #3)
- Since versioning was botched last release, implement calendar versioning
- List of files returned from
torrents_files()
now contains file ID inid
- Performance gains for responses with payloads...especially for large payloads
- Fixes #6. Adds support for
SIMPLE_RESPONSES
for the entire client and individual methods
- Fixes #8. Remove whitespace from in setPreferences requests for older qBittorrent versions
- Add Python3.8 version for PyPI
- Move project from beta to stable for PyPI
- Make Web API URL derivation more robust...thereby allowing the client to actually work on Python3.8 (#5)
- Allow port to be discretely specified during Client instantiation (#4)
- Enhance request retry logic and expose retry configuration
- Improve organization and clarity of README
- Better document exceptions
- Clarify torrent file handling exceptions better with proper exceptions
- Clean up the request wrapper exception handling
- Fix HTTP 404 handling to find and return problematic torrent hashes
- Round out support for tags with qBittorrent v4.2.0 release
- Remove upper-bound version requirements for
requests
andurllib3
- Support for qBittorrent v4.2.0 release
- Add support for
app/buildInfo
- Add support for
transfer/banPeers
andtorrents/addPeers
- Add support for
torrents/addTags
,torrents/removeTags
,torrents/tags
,torrents/createTags
, andtorrents/deleteTags
- Fix useAutoTMM to autoTMM for
client.torrents_add()
so auto torrent management works - Add support to refresh RSS items introduced in qBittorrent v4.1.8
- Restore python 2 compatibility
- Allow exceptions to be imported directly from package instead of only exceptions module
- Finalized interaction layer interfaces
- Introduced the "interaction layer" for transparent interaction with the qBittorrent API
- Complete implementation of qBittorrent WebUI API 2.2
- Each API endpoint is available via the
Client
class - Automatic re-login is supported in the event of login expiration