{ "info": { "author": "Russell Martin", "author_email": "rmartin16@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Communications :: File Sharing", "Topic :: Utilities" ], "description": "qBittorrent Web API Client\n================================\nPython client implementation for qBittorrent Web API. Supports qBittorrent v4.1.0+ (i.e. Web API v2.0+).\n\n[qBittorrent Web API specification](https://github.com/qbittorrent/qBittorrent/wiki/Web-API-Documentation)\n\nFeatures\n------------\n* The entire qBittorent Web API is implemented.\n* qBittorrent version checking for an endpoint's existence/features is automatically handled.\n* All Python versions are supported.\n* If the authentication cookie expires, a new one is automatically requested in line with the request.\n\nInstallation\n------------\n\n*qbittorrent-api* is available on the Python Package Index (PyPI).\n\nhttps://pypi.org/project/qbittorrent-api/\n\nInstall via pip:\n\n```pip install qbittorrent-api```\n\nInstall specific release:\n\n```pip install git+https://github.com/rmartin16/qbittorrent-api.git@v0.3.2#egg=qbittorrent-api```\n\nInstall direct from master:\n\n```pip install git+https://github.com/rmartin16/qbittorrent-api.git#egg=qbittorrent-api```\n\nAlso be sure urllib3, requests, and attrdict are installed.\n\nEnsure that WebUI is enabled in qBittorrent: Tools -> Preferences -> Web UI\n\nGetting Started\n---------------\n```python\nfrom qbittorrentapi import Client\nclient = Client(host='localhost:8080', username='admin', password='adminadmin')\nprint(\"qBittorrent Version: %s\" % client.app_version())\nhelp(Client)\n```\n\nConfiguration\n-------------\n* Using an untrusted certificate for HTTPS WebUI\n * Instantiate Client with `VERIFY_WEBUI_CERTIFICATE=False` or set environment variable `PYTHON_QBITTORRENTAPI_DO_NOT_VERIFY_WEBUI_CERTIFICATE` to a non-null value.\n * Failure to do this for will cause connections to qBittorrent to fail.\n * As a word of caution, doing this actually does turn off certificate verification. Therefore, for instance, potential man-in-the-middle attacks will not be detected and reported (since the error is suppressed). However, the connection will remain encrypted.\n* Host, Username and password Defaults\n * These can be provided when instantiating Client or calling `client.auth_log_in(username='...', password='...')`.\n * Alternatively, set environment variables `PYTHON_QBITTORRENTAPI_HOST`, `PYTHON_QBITTORRENTAPI_USERNAME` and `PYTHON_QBITTORRENTAPI_PASSWORD`.\n* API Endpoints Not Yet Implemented in the qBittorrent Host\n * By default, if a call is made to endpoint that doesn't yet exist on the host (e.g. the Search endpoints were introduced in Web API v2.1.1), there's a debug logger output and None is returned.\n * To raise UnimplementedError instead, instantiate Client with `RAISE_UNIMPLEMENTEDERROR_FOR_UNIMPLEMENTED_API_ENDPOINTS=True`.\n* Disable Logging Debug Output\n * Instantiate Client with `DISABLE_LOGGING_DEBUG_OUTPUT=True` or manually disable logging for the relevant packages:\n * ```logging.getLogger('qbittorrentapi').setLevel(logging.INFO) ```\n * ```logging.getLogger('requests').setLevel(logging.INFO) ```\n * ```logging.getLogger('urllib3').setLevel(logging.INFO) ```\n\nDirect API Endpoint Access\n--------------------------\nThe API is separated in to eight namespaces for the API endpoints:\n* Authentication (auth)\n* Application (app)\n* Log (log)\n* Sync (sync)\n* Transfer (transfer)\n* Torrent Management (torrents)\n* RSS (rss)\n* Search (search)\n\nTo use this package to directly access those endpoints:\n\n```python\nresponse = client._()\n```\nReplace `` with one of the eight namespaces above and `` with a relevant endpoint.\n\nFor instance:\n```python\ntorrent_list = client.torrents_info(status_filter='active')\n```\n\nThe responses from the API calls are strings (e.g. app/version) or an extended Dictionary or List object (e.g. torrents/trackers).\n\nEach namespace endpoint's method name is PEP8-ified. However, they are all aliased to the endpoint's name as implemented in qBittorrent's Web API. So, for example, `client.app_web_api_version()` and `client.app_webapiVersion()` are equivilent.\n\n\nInteraction Layer Usage\n--------------------------------------\nThe package also contains more robust interfaces to the API endpoints. For each of the eight namespaces, there is an interface to the relevant API endpoints. Of note, I created an additional namespace for torrent categories.\n\nAn example for the Application namespace:\n```Python\nver = client.app.version\napi_ver = client.app.api_web_version\nprefs = client.app.preferences\nis_dht_enabled = client.application.preferences.dht\nclient.application.preferences = dict(dht=(not is_dht_enabled))\n```\n\nFor each namespace, all endpoints with a return value and no parameters are implemented as a property. All other endpoints are implemented as methods; some of the methods have extended usage as well.\n\nFor example, the log/main endpoint has extended usage:\n```python\ncomplete_log = client.log.main()\nnormal_log = client.log.main.normal()\nwarning_log = client.log.main.warning()\ncritical_log = client.log.main.critical()\n```\nThe most extended namespace is Torrents.\n```python\n# Gathering torrents\ntorrent_list = client.torrents.info()\ntorrent_list_active = client.torrents.info.active()\ntorrent_list_active_partial = client.torrents.active(limit=100, offset=200)\ntorrent_list_downloading = client.torrents.info.downloading()\n\n# Torrent looping\nfor torrent in torrent_list:\n print(torrent.name)\n\n# Actions for multiple torrents\nclient.torrents.pause(hashes=['...', '...'])\nclient.torrents.recheck(hashes=['...', '...'])\n# or just do all torrent \nclient.torrents.pause.all()\nclient.torrents.recheck.all()\nclient.torrents.resume.all()\n```\n\nOnce you have a torrent, there's also a litany of interactions.\n```python\nhash = torrent.info.hash # as well the rest fo the properties from torrents/info endpoint\nproperties = torrent.properties\ntrackers = torrent.trackers\nfiles = torrent.files\n# Action methods\ntorrent.edit_tracker(original_url=\"...\", new_url=\"...\")\ntorrent.remove_trackers(urls='http://127.0.0.2/')\ntorrent.rename(new_torrent_name=\"...\")\ntorrent.resume()\ntorrent.pause()\ntorrent.recheck()\ntorrent.torrents_top_priority()\ntorrent.set_location(location='/home/user/torrents/')\ntorrent.set_category(category='video')\n```\n\nSearch extended usage.\n```python\nsearch_job = client.search.start(pattern='Ubuntu', categories='all', plugins='all')\nwhile (search_job.status()[0].status != 'Stopped'):\n time.sleep(.1)\nprint(search_job.results())\nsearch_job.delete()\n```\n\nInteraction Layer Notes\n-----------------------\n* All endpoints are available with and without the endpoint's namespace attached.\n * So, `client.torrents.torrents_resume()` and `client.torrents.resume()` are the same.\n * As mentioned in direct API access `client.app.web_api_version` and `client.app.webapiVersion` are the same.\n* When invoking the API calls, you can use the parameters implemented in the python code or those specified in the API documentation.\n * So, `torrents_rename(hash='...', new_torrent_name=\"...\")` and `torrents_rename(hash='...', name=\"...\")` are the same.\n\nInteraction Layer Details\n-------------------------\n* Application\n * Properties\n * version\n * web_api_version\n * build_info\n * default_save_path\n * preferences (supports assignment)\n * Methods\n * shutdown\n* Log\n * Methods\n * main\n * Methods\n * info\n * normal\n * warning\n * critical\n * peers\n* Sync\n * Methods\n * maindata\n * Methods\n * delta\n * reset_rid\n * torrent_peers\n* Transfer\n * Properties\n * info\n * speed_limits_mode (supports assignment)\n * download_limit (supports assignment)\n * upload_limit (supports assignment)\n * Methods\n * set_download_limit\n * set_upload_limit\n * toggle_speed_limits_mode\n* Torrents\n * Methods\n * Note: each of these \"methods\" supports the all() method\n * info\n * Methods\n * downloading\n * completed\n * paused\n * active\n * inactive\n * resumed\n * resume\n * pause\n * delete\n * recheck\n * reannounce\n * increase_priority\n * decrease_priority\n * top_priority\n * bottom_priority\n * download_limit\n * set_download_limit\n * set_share_limits\n * upload_limit\n * set_upload_limit\n * set_location\n * set_category\n * set_auto_management\n * toggle_sequential_download\n * toggle_first_last_piece_priority\n * set_force_start\n * set_super_seeding\n* Torrent\n * Properties\n * info\n * properties\n * trackers\n * webseeds\n * files\n * piece_states\n * piece_hashes\n * download_limit (supports assignment)\n * upload_limit (supports assignment)\n * Methods\n * add_trackers\n * edit_tracker\n * remove_trackers\n * file_priority\n * filePrio\n * rename\n * set_location\n * set_category\n * set_auto_management\n * set_force_feeding\n * set_super_seeding\n * AND all the Torrents methods above\n* Torrent Categories\n * Properties\n * categories\n * Methods\n * create_category\n * edit_category\n * remove_categories\n* RSS\n * Properties\n * rules\n * Methods\n * add_folder\n * add_feed\n * remove_item\n * refresh_item\n * move_item\n * items\n * Methods\n * without_data\n * woth_data\n * set_rule\n * rename_rule\n * remove_rule\n* Search\n * Properties\n * plugins\n * Methods\n * start\n * stop\n * status\n * results\n * delete\n * categories\n * install_plugin\n * uninstall_plugin\n * enable_plugin\n * update_plugins\n* Seach Job\n * Methods\n * stop\n * results\n * status\n * delete\n\nExceptions\n----------\nTo see the exceptions an endpoint can raise, use `help(Client._)`.\n\nFor example:\n```\n>>> from qbittorrentui import Client\n>>> help(Client.torrents_add)\n\nHelp on function torrents_add in module qbittorrentapi.torrents:\n\ntorrents_add(self, urls=None, torrent_files=None, save_path=None, cookie=None, category=None, is_skip_checking=None, is_paused=None, is_root_folder=None, rename=None, upload_limit=None, download_limit=None, use_auto_torrent_management=None, is_sequential_download=None, is_first_last_piece_priority=None, **kwargs)\n Add one or more torrents by URLs and/or torrent files.\n\n Exceptions:\n UnsupportedMediaType415Error if file is not a valid torrent file\n FileNotFoundError if a torrent file doesn't exist\n PermissionError if read permission is denied to torrent file\n\n :param urls: List of URLs (http://, https://, magnet: and bc://bt/)\n :param torrent_files: list of torrent files\n :param save_path: location to save the torrent data\n :param cookie: cookie to retrieve torrents by URL\n :param category: category to assign to torrent(s)\n :param is_skip_checking: skip hash checking\n :param is_paused: True to start torrent(s) paused\n :param is_root_folder: True or False to create root folder\n :param rename: new name for torrent(s)\n :param upload_limit: upload limit in bytes/second\n :param download_limit: donwnload limit in bytes/second\n :param use_auto_torrent_management: True or False to use automatic torrent management\n :param is_sequential_download: True or False for sequential download\n :param is_first_last_piece_priority: True or False for first and last piece download priority\n :return: \"Ok.\" for success and \"\"Fails.\" for failure\n\n```\n\n\n```python\nclass APIError(Exception):\n pass\n\nclass LoginFailed(APIError):\n pass\n\n# connection errors that aren't HTTP errors...like an SSL error or a timeout\nclass APIConnectionError(APIError):\n pass\n\n# all errors from a successful connection to qbittorrent are returned as HTTP errors\nclass HTTPError(APIError):\n pass\n\nclass HTTP400Error(HTTPError):\n pass\n\nclass HTTP401Error(HTTPError):\n pass\n\nclass HTTP403Error(HTTPError):\n pass\n\nclass HTTP404Error(HTTPError):\n pass\n\nclass HTTP409Error(HTTPError):\n pass\n\nclass HTTP415Error(HTTPError):\n pass\n\nclass HTTP500Error(HTTPError):\n pass\n\n# Endpoint call is missing one or more required parameters\nclass MissingRequiredParameters400Error(HTTP400Error):\n pass\n\n# One or more parameters are malformed\nclass InvalidRequest400Error(HTTP400Error):\n pass\n\n# Primarily reserved for XSS and host header issues.\nclass Unauthorized401Error(HTTP401Error):\n pass\n\n# Not logged in or calling an API method that isn't public.\nclass Forbidden403Error(HTTP403Error):\n pass\n\n# Almost certainly, this means the torrent hash didn't find a torrent...\n# Technically, this can happen if the endpoint doesn't exist...but that also means there's a bug in this implementation\nclass NotFound404Error(HTTP404Error):\n pass\n\n# Returned if parameters don't make sense...\nclass Conflict409Error(HTTP409Error):\n pass\n\n# torrents/add endpoint will return this for invalid URL(s)\nclass UnsupportedMediaType415Error(HTTP415Error):\n pass\n\n# Returned if qBittorent craps on itself while processing the request...\nclass InternalServerError500Error(HTTP500Error):\n pass\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rmartin16/qbittorrent-api", "keywords": "qbittorrent api", "license": "GPL-3", "maintainer": "", "maintainer_email": "", "name": "qbittorrent-api", "package_url": "https://pypi.org/project/qbittorrent-api/", "platform": "", "project_url": "https://pypi.org/project/qbittorrent-api/", "project_urls": { "Homepage": "https://github.com/rmartin16/qbittorrent-api" }, "release_url": "https://pypi.org/project/qbittorrent-api/0.3.3/", "requires_dist": [ "attrdict (<=2.0.1,>=2.0.0)", "requests (<=2.21.0,>=2.16.0)", "urllib3 (<=1.24.3,>=1.24.2)" ], "requires_python": "", "summary": "Python wrapper for qBittorrent 4.1+ (Web API v2.2+)", "version": "0.3.3" }, "last_serial": 5904476, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "03e43e1554f1ef1224631376dcca1860", "sha256": "9feb01da5a0259d225b0b5f46f656f07b2e0b39d66850eb5859e3752d06de6cb" }, "downloads": -1, "filename": "qbittorrent_api-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "03e43e1554f1ef1224631376dcca1860", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27150, "upload_time": "2019-05-07T20:14:49", "url": "https://files.pythonhosted.org/packages/79/21/c1e7698219c64ec3f1baffbadc333017cd72657053ce28734cc42da72204/qbittorrent_api-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5eb6233157405e2477f501fe13ad122c", "sha256": "e2a1f9199a0fceecb22ae2296f9b1ac8d67964712db38dd91583e795e699742f" }, "downloads": -1, "filename": "qbittorrent-api-0.1.tar.gz", "has_sig": false, "md5_digest": "5eb6233157405e2477f501fe13ad122c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13973, "upload_time": "2019-05-07T20:14:52", "url": "https://files.pythonhosted.org/packages/15/97/5ab1a5a879daabd236963971728848d500e166a9026f868d6fd844f47ccd/qbittorrent-api-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "88975bf1b87657beffdd52a4fa34106a", "sha256": "e8257569f79f0ba9640b4eb83a0ac24716777d6c39972911ab400deb518527aa" }, "downloads": -1, "filename": "qbittorrent-api-0.1.1.tar.gz", "has_sig": false, "md5_digest": "88975bf1b87657beffdd52a4fa34106a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14036, "upload_time": "2019-05-07T21:11:47", "url": "https://files.pythonhosted.org/packages/8d/31/32a3deffac31f71f3a2102b0ec2f05153d5d7eca9d930993361b20ebdc00/qbittorrent-api-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "e80e96844dce3209fe87325b54d0fe1a", "sha256": "7b6a8f09336de61f3e96f9638e1838c24b0113789f80c559f42e3b4c5b58c7f9" }, "downloads": -1, "filename": "qbittorrent_api-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e80e96844dce3209fe87325b54d0fe1a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26906, "upload_time": "2019-05-07T21:51:25", "url": "https://files.pythonhosted.org/packages/1a/14/4e9f8328854833b0313baa0de6426a0f8aad5077c753df343e1ae1e97546/qbittorrent_api-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cefc1db423e2d3611f9b78e712b8ffed", "sha256": "5c3126caa0ce15cddaa5e4e03bf2f1abaa9afc7094304bf9b207e38d922312fe" }, "downloads": -1, "filename": "qbittorrent-api-0.1.2.tar.gz", "has_sig": false, "md5_digest": "cefc1db423e2d3611f9b78e712b8ffed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26076, "upload_time": "2019-05-07T21:51:26", "url": "https://files.pythonhosted.org/packages/6e/aa/299f5b0d364aecb798c16afdb76e258d8d102d5f1a7e37a63ab7b4e23ca8/qbittorrent-api-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "29ce3354ff3ee5f2e758d2d27347f714", "sha256": "929cdcd5943b4cf396c30a057379cf8ba8817c8f0f58eba4e83cfe9f543db2b3" }, "downloads": -1, "filename": "qbittorrent_api-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "29ce3354ff3ee5f2e758d2d27347f714", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26910, "upload_time": "2019-05-07T21:56:59", "url": "https://files.pythonhosted.org/packages/67/92/82a2841ccf32d8351ff17b53ca6a99f3dc704130d111aea4996f117a4c5c/qbittorrent_api-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99f02b84847e62421400c74a84b9df21", "sha256": "1af01ff0a4b7f88c8f5b9e955de6a129d16759f4311c1dc6725dc4c259161972" }, "downloads": -1, "filename": "qbittorrent-api-0.1.3.tar.gz", "has_sig": false, "md5_digest": "99f02b84847e62421400c74a84b9df21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26078, "upload_time": "2019-05-07T21:57:00", "url": "https://files.pythonhosted.org/packages/87/19/a6cd4879b9b758f484606b9277e049052200409125d609e7e238c2c143f4/qbittorrent-api-0.1.3.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "a1b04c46532aed72a4fb36efcda9cf51", "sha256": "8d0c24519fc176f6cc52a48566f97fdb49eb0f55d9e435f51ca8c00191953e73" }, "downloads": -1, "filename": "qbittorrent_api-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a1b04c46532aed72a4fb36efcda9cf51", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 38470, "upload_time": "2019-05-13T05:01:16", "url": "https://files.pythonhosted.org/packages/28/5e/c6a2ddac4e7427dd707759776700dd0db8886bbd1f65aacde7cea72964fe/qbittorrent_api-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b75bce3628c911754ef7f0e2a0627198", "sha256": "b73cdef7a648e412ad864f7b0640b66ad3b6e26f85bc416244d92866bafb1dba" }, "downloads": -1, "filename": "qbittorrent-api-0.2.tar.gz", "has_sig": false, "md5_digest": "b75bce3628c911754ef7f0e2a0627198", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38468, "upload_time": "2019-05-13T05:01:18", "url": "https://files.pythonhosted.org/packages/b1/85/50c9d31dad89269fe277fc6ee0ae57c7410e53e7165aa534ebf38d3f5f87/qbittorrent-api-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "22d9e4c60f1b9ef999511922f10c2591", "sha256": "858d1bf16ab198cc61307e50460617a1cb3ad012d21ee84cb9cd775eff0035bf" }, "downloads": -1, "filename": "qbittorrent_api-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "22d9e4c60f1b9ef999511922f10c2591", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40448, "upload_time": "2019-05-14T20:01:59", "url": "https://files.pythonhosted.org/packages/0a/03/5e9298bbdfa22c3681d8e3a714671fce8bdd5656cb7178008e5dfc0619d1/qbittorrent_api-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4dc3dd6feedb4f6e2810c1b4cf472c43", "sha256": "cdd1db50c301c12e1440fa1144e0c3caa5cff8c84e9205a0c339114821e18bca" }, "downloads": -1, "filename": "qbittorrent-api-0.2.1.tar.gz", "has_sig": false, "md5_digest": "4dc3dd6feedb4f6e2810c1b4cf472c43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40041, "upload_time": "2019-05-14T20:02:01", "url": "https://files.pythonhosted.org/packages/de/59/68322f1425f592bdd6c5967d7a2d7bc9c3b13881588f390b2d8a1217dbb6/qbittorrent-api-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "d2f6a3552f088dad8d2f15eb9e3d1259", "sha256": "ef42f06254a2a31c4fecc9142628755c2e7740e1a0cfb4f805e248d373c8ffd8" }, "downloads": -1, "filename": "qbittorrent_api-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d2f6a3552f088dad8d2f15eb9e3d1259", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40460, "upload_time": "2019-05-14T20:10:36", "url": "https://files.pythonhosted.org/packages/5d/b6/27552e10190ad56a6df03497051bb7b8b4d9d9035086dab4505b0fbf1d35/qbittorrent_api-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d1208dff16d20c9a6c356634fdc5facb", "sha256": "2ce09096a1efdf8d68e47c084955380afcf5ee39c88c64c2a4dc876bef631abc" }, "downloads": -1, "filename": "qbittorrent-api-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d1208dff16d20c9a6c356634fdc5facb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40040, "upload_time": "2019-05-14T20:10:38", "url": "https://files.pythonhosted.org/packages/eb/e5/6daadbedc59c49902ec1d446892c820ee34520c6533741a108acfa7bb8fc/qbittorrent-api-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "68cae307a75545ed207582c72985aa40", "sha256": "4af0cd5dd47e479fde2f693101d6b2c814cce6ea3caa74fb7033572853f0d376" }, "downloads": -1, "filename": "qbittorrent_api-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "68cae307a75545ed207582c72985aa40", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40462, "upload_time": "2019-05-25T02:32:13", "url": "https://files.pythonhosted.org/packages/15/44/7d49b8de39e1c06fe0bbbe48b3b47c1de660aa8d2d2fb5dba38fa011e6f8/qbittorrent_api-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ada7cd379f3173171cc5b369d368add2", "sha256": "ca7023e8dcf93401576abfd339465740b9745b4ced9af9c872471195372ff036" }, "downloads": -1, "filename": "qbittorrent-api-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ada7cd379f3173171cc5b369d368add2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40067, "upload_time": "2019-05-25T02:32:15", "url": "https://files.pythonhosted.org/packages/5e/08/0c7d98b12705203095f4070bca5c0e78e3a7f7e70177ff4344c6da4b40c0/qbittorrent-api-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "dcf5b2d24ed7e869b7e6f1afa761fe36", "sha256": "f8ef8136eb773401e3a83076b588a0095538e11d60ae76b104aba7d18bf32723" }, "downloads": -1, "filename": "qbittorrent_api-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "dcf5b2d24ed7e869b7e6f1afa761fe36", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40478, "upload_time": "2019-05-25T03:39:06", "url": "https://files.pythonhosted.org/packages/ce/d3/3503c07d21111db259ee7052ee9151e5c23ca82e628c9d1ac30f57117752/qbittorrent_api-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dfeff29f0719bb9029581b334125958c", "sha256": "d968192ccfac48b9a20cf9d9d0468b82aa8cd92ef82a5266b3f8dddd4a6ff5d2" }, "downloads": -1, "filename": "qbittorrent-api-0.2.4.tar.gz", "has_sig": false, "md5_digest": "dfeff29f0719bb9029581b334125958c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40079, "upload_time": "2019-05-25T03:39:08", "url": "https://files.pythonhosted.org/packages/26/0b/f72271dcc9aaf8e5c0147e2829b01257bc5b250bbd2a1d86ea7f8b53587b/qbittorrent-api-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "83acf1b7903628153206b24bb3ac6928", "sha256": "7b2be3c569a8388b20afe5fc3c4c2007a35910b036844dc84a175b4a90e9e99e" }, "downloads": -1, "filename": "qbittorrent_api-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "83acf1b7903628153206b24bb3ac6928", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40481, "upload_time": "2019-05-26T03:22:59", "url": "https://files.pythonhosted.org/packages/15/78/659394e1c01738e509363d344cbf0d36199e5d7c2d359179984f7570d0c1/qbittorrent_api-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08b0561643b28d9742524190f5117946", "sha256": "d6a31b71d4d8391c6f1e57c53bb93bac268cb3199ad211754d20e16ca90e7403" }, "downloads": -1, "filename": "qbittorrent-api-0.2.5.tar.gz", "has_sig": false, "md5_digest": "08b0561643b28d9742524190f5117946", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40075, "upload_time": "2019-05-26T03:23:01", "url": "https://files.pythonhosted.org/packages/12/cb/72fdaa645114b234494e44aeceb78a19a364060f7b4b8564dc3734c45ffc/qbittorrent-api-0.2.5.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "6849a89a5ea316aab5191b1a8e3e5030", "sha256": "199542874b1b6978d59df545e9d5ee5d24bf9502f070f5f17e09467b4a6106c3" }, "downloads": -1, "filename": "qbittorrent_api-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "6849a89a5ea316aab5191b1a8e3e5030", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 39362, "upload_time": "2019-06-02T02:39:41", "url": "https://files.pythonhosted.org/packages/0c/44/dd50c16d53a0a5e51aeb89341befa7e2273c2aa2203ac70c3cbe342c57d7/qbittorrent_api-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff18431f3a06db14b06bcabe9397de66", "sha256": "78ee6468fa48ef35afcecb13744ccb8741ac091eccfce587eac6c131a2a24138" }, "downloads": -1, "filename": "qbittorrent-api-0.3.tar.gz", "has_sig": false, "md5_digest": "ff18431f3a06db14b06bcabe9397de66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39203, "upload_time": "2019-06-02T02:39:43", "url": "https://files.pythonhosted.org/packages/71/5f/dc038cf64c69fc49da8ab7306ec7a8e1397f52fa57585ebe86b8073fd8d3/qbittorrent-api-0.3.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "71e09cd5a4bd9d25401bcdb1be68bb73", "sha256": "78efcfd5ae48809c542d07761b67aba608f10d0be3f0dd0c24186dabd4c85787" }, "downloads": -1, "filename": "qbittorrent_api-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "71e09cd5a4bd9d25401bcdb1be68bb73", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 45860, "upload_time": "2019-06-28T14:59:50", "url": "https://files.pythonhosted.org/packages/2b/56/5b79dc08257f12db583eda6a079aea5c94eb80b851a0a3e5f2fb05eef5ed/qbittorrent_api-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77246999358d7af3a3413ff41d1e1e45", "sha256": "338be10f31ca6b5caa73a64c822f3ccc1c849a1d0ea3dd08ea6e3a1d1ff38870" }, "downloads": -1, "filename": "qbittorrent-api-0.3.2.tar.gz", "has_sig": false, "md5_digest": "77246999358d7af3a3413ff41d1e1e45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39928, "upload_time": "2019-06-28T14:59:52", "url": "https://files.pythonhosted.org/packages/b4/f9/ee90f81ff29dce2803ef1e2d65b6ce57c2d7cdb937b76a30d741ef34b74c/qbittorrent-api-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "50e5b260b99b5305b914b4cb903d0d6b", "sha256": "948f2b44d292bc8fecdf0f85dd28ebbd9f06f0aaa2f754fc5973446f89a18c4d" }, "downloads": -1, "filename": "qbittorrent_api-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "50e5b260b99b5305b914b4cb903d0d6b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47136, "upload_time": "2019-09-30T02:41:53", "url": "https://files.pythonhosted.org/packages/09/88/e311498a6c9c3aa1ad48ccd1704ab0136901e93c8f6b3e724e8490326d38/qbittorrent_api-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a583d558246c029ffe81fdbf1498172c", "sha256": "4abfe6c1c3b94971b5f3da5872d14ed9fdf9435cb6d8fd9baafdf5fa3867d4f4" }, "downloads": -1, "filename": "qbittorrent-api-0.3.3.tar.gz", "has_sig": false, "md5_digest": "a583d558246c029ffe81fdbf1498172c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41575, "upload_time": "2019-09-30T02:41:56", "url": "https://files.pythonhosted.org/packages/4f/b0/3e86211d4f065ab31057c151e99e0b732cd6dc407c0fec4316a4952e6f0c/qbittorrent-api-0.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "50e5b260b99b5305b914b4cb903d0d6b", "sha256": "948f2b44d292bc8fecdf0f85dd28ebbd9f06f0aaa2f754fc5973446f89a18c4d" }, "downloads": -1, "filename": "qbittorrent_api-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "50e5b260b99b5305b914b4cb903d0d6b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47136, "upload_time": "2019-09-30T02:41:53", "url": "https://files.pythonhosted.org/packages/09/88/e311498a6c9c3aa1ad48ccd1704ab0136901e93c8f6b3e724e8490326d38/qbittorrent_api-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a583d558246c029ffe81fdbf1498172c", "sha256": "4abfe6c1c3b94971b5f3da5872d14ed9fdf9435cb6d8fd9baafdf5fa3867d4f4" }, "downloads": -1, "filename": "qbittorrent-api-0.3.3.tar.gz", "has_sig": false, "md5_digest": "a583d558246c029ffe81fdbf1498172c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41575, "upload_time": "2019-09-30T02:41:56", "url": "https://files.pythonhosted.org/packages/4f/b0/3e86211d4f065ab31057c151e99e0b732cd6dc407c0fec4316a4952e6f0c/qbittorrent-api-0.3.3.tar.gz" } ] }