# -*- coding: utf-8 -*-
from setuptools import setup

package_dir = \
{'': 'src'}

packages = \
['aria2p']

package_data = \
{'': ['*']}

install_requires = \
['loguru', 'requests>2.19.1', 'toml>=0.10.2,<0.11.0', 'websocket_client']

extras_require = \
{'tui': ['asciimatics>=1.11.0,<2.0.0']}

entry_points = \
{'console_scripts': ['aria2p = aria2p.cli:main']}

setup_kwargs = {
    'name': 'aria2p',
    'version': '0.10.1',
    'description': 'Command-line tool and library to interact with an aria2c daemon process with JSON-RPC.',
    'long_description': '<!--\nIMPORTANT: This file is generated from the template at \'scripts/templates/README.md\'.\n           Please update the template instead of this file.\n-->\n\n# aria2p\n[![ci](https://github.com/pawamoy/aria2p/workflows/ci/badge.svg)](https://github.com/pawamoy/aria2p/actions?query=workflow%3Aci)\n[![documentation](https://img.shields.io/badge/docs-mkdocs%20material-blue.svg?style=flat)](https://pawamoy.github.io/aria2p/)\n[![pypi version](https://img.shields.io/pypi/v/aria2p.svg)](https://pypi.org/project/aria2p/)\n[![gitter](https://badges.gitter.im/join%20chat.svg)](https://gitter.im/aria2p/community)\n\nCommand-line tool and Python library to interact with an [`aria2c`][1] daemon process through JSON-RPC.\n\n![demo](https://user-images.githubusercontent.com/3999221/72664104-41658180-39fa-11ea-838e-022ed29d8c0b.gif)\n\nTo avoid confusion:\n\n- [*aria2*][1] is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line.\nIt supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.\n- `aria2c` is the name of the command-line executable provided by *aria2*. It can act as a daemon.\n- `aria2p` (`p` for Python) is a command-line client that can interact with an `aria2c` daemon.\n  It is not an official client. There are other Python packages allowing you to interact with an `aria2c` daemon.\n  These other packages do not offer enough usability (in my opinion), this is why I\'m developing `aria2p`.\n\n**Purpose**: `aria2c` can run in the foreground, for one-time downloads, or in the background, as a daemon.\nThis is where `aria2p` intervenes: when an instance of `aria2c` is running in the background,\n`aria2p` will be able to communicate with it to add downloads to the queue, remove, pause or resume them, etc.\n\nIn order for `aria2p` to be able to communicate with the `aria2c` process, RPC mode must be enabled\nwith the `--enable-rpc` option of `aria2c`. RPC stands for [Remote Procedure Call][2].\nAlthough `aria2c` supports both JSON-RPC and XML-RPC protocols, `aria2p` **works with JSON only** (not XML).\nMore information about how to configure `aria2c` to run as a daemon with RPC mode enabled\ncan be found in the [Configuration section][conf doc] of the documentation.\n\n[conf doc]: https://aria2p.readthedocs.io/en/latest/configuration.html\n\n**Table of contents**\n\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Usage as a library](#usage-as-a-library)\n- [Usage on the command line](#usage-command-line)\n- [Troubleshoot](#troubleshoot)\n- [Support](#support)\n\n\n## Requirements\n\n`aria2p` requires Python 3.6 or above.\n\n<details>\n<summary>To install Python 3.6, I recommend using <a href="https://github.com/pyenv/pyenv"><code>pyenv</code></a>.</summary>\n\n```bash\n# install pyenv\ngit clone https://github.com/pyenv/pyenv ~/.pyenv\n\n# setup pyenv (you should also put these three lines in .bashrc or similar)\nexport PATH="${HOME}/.pyenv/bin:${PATH}"\nexport PYENV_ROOT="${HOME}/.pyenv"\neval "$(pyenv init -)"\n\n# install Python 3.6\npyenv install 3.6.12\n\n# make it available globally\npyenv global system 3.6.12\n```\n</details>\n\nYou must also install [*aria2*][1]. On systems with `apt-get`:\n\n```bash\nsudo apt-get install aria2\n```\n\n[1]: https://github.com/aria2/aria2\n[2]: https://en.wikipedia.org/wiki/Remote_procedure_call\n\n## Installation\n\nWith `pip`:\n\n```bash\npython3.6 -m pip install aria2p[tui]\n```\n\nWith [`pipx`](https://github.com/pipxproject/pipx):\n\n```bash\npython3.6 -m pip install --user pipx\n\npipx install --python python3.6 aria2p[tui]\n```\n\nThe `tui` extra is needed for the interactive interface. If you don\'t need the interface (for example when you are\nwriting a Python package with a dependency to aria2p), simply install `aria2p` without any extra.\n\n## Usage (as a library)\n\n**This library is still a work in progress. More examples will be added later.\nIn the meantime, you can read the [Reference section](https://aria2p.readthedocs.io/en/latest/reference.html) on the official documentation.**\n\n```python\nimport aria2p\n\n# initialization, these are the default values\naria2 = aria2p.API(\n    aria2p.Client(\n        host="http://localhost",\n        port=6800,\n        secret=""\n    )\n)\n\n# list downloads\ndownloads = aria2.get_downloads()\n\nfor download in downloads:\n    print(download.name, download.download_speed)\n\n# add downloads\nmagnet_uri = "magnet:?xt=urn:..."\n\ndownload = aria2.add_magnet(magnet_uri)\n```\n\n## Usage (command-line)\n\n```\nusage: aria2p [GLOBAL_OPTS...] COMMAND [COMMAND_OPTS...]\n\nCommand-line tool and Python library to interact with an `aria2c` daemon\nprocess through JSON-RPC.\n\nGlobal options:\n  -h, --help            Show this help message and exit. Commands also accept\n                        the -h/--help option.\n  -p PORT, --port PORT  Port to use to connect to the remote server.\n  -H HOST, --host HOST  Host address for the remote server.\n  -s SECRET, --secret SECRET\n                        Secret token to use to connect to the remote server.\n  -L {TRACE,DEBUG,INFO,SUCCESS,WARNING,ERROR,CRITICAL}, --log-level {TRACE,DEBUG,INFO,SUCCESS,WARNING,ERROR,CRITICAL}\n                        Log level to use\n  -P LOG_PATH, --log-path LOG_PATH\n                        Log path to use. Can be a directory or a file.\n  -T CLIENT_TIMEOUT, --client-timeout CLIENT_TIMEOUT\n                        Timeout in seconds for requests to the remote server.\n                        Floats supported. Default: 60.0.\n\nCommands:\n  \n    add                 Add downloads with URIs/Magnets/torrents/Metalinks.\n    add-magnets (add-magnet)\n                        Add downloads with Magnet URIs.\n    add-metalinks (add-metalink)\n                        Add downloads with Metalink files.\n    add-torrents (add-torrent)\n                        Add downloads with torrent files.\n    autopurge (autoclear)\n                        Automatically purge completed/removed/failed\n                        downloads.\n    call                Call a remote method through the JSON-RPC client.\n    pause (stop)        Pause downloads.\n    remove (rm, del, delete)\n                        Remove downloads.\n    resume (start)      Resume downloads.\n    show                Show the download progression.\n    top                 Launch the top-like interactive interface.\n    listen              Listen to notifications.\n\n```\n\nCalling `aria2p` without any arguments will by default call the `top` command,\nwhich is a console interactive interface.\n\nCommands:\n\n\n- [`add`](#add)\n- [`add-magnets`](#add-magnets)\n- [`add-metalinks`](#add-metalinks)\n- [`add-torrents`](#add-torrents)\n- [`autopurge`](#autopurge)\n- [`call`](#call)\n- [`listen`](#listen)\n- [`pause`](#pause)\n- [`remove`](#remove)\n- [`resume`](#resume)\n- [`show`](#show)\n- [`top`](#top)\n\n\n---\n\n### `add`\n\n```\nusage: aria2p add [-h] [-f FROM_FILE] [uris [uris ...]]\n\nAdd downloads with URIs/Magnets/torrents/Metalinks.\n\npositional arguments:\n  uris                  The URIs/file-paths to add.\n\noptional arguments:\n  -h, --help            Show this help message and exit.\n  -f FROM_FILE, --from-file FROM_FILE\n                        Load URIs from a file.\n\n```\n\n\n\n---\n\n### `add-magnets`\n\n```\nusage: aria2p add-magnets [-h] [-f FROM_FILE] [uris [uris ...]]\n\nAdd downloads with Magnet URIs.\n\npositional arguments:\n  uris                  The magnet URIs to add.\n\noptional arguments:\n  -h, --help            Show this help message and exit.\n  -f FROM_FILE, --from-file FROM_FILE\n                        Load URIs from a file.\n\n```\n\n\n\n---\n\n### `add-metalinks`\n\n```\nusage: aria2p add-metalinks [-h] [-f FROM_FILE]\n                            [metalink_files [metalink_files ...]]\n\nAdd downloads with Metalink files.\n\npositional arguments:\n  metalink_files        The paths to the metalink files.\n\noptional arguments:\n  -h, --help            Show this help message and exit.\n  -f FROM_FILE, --from-file FROM_FILE\n                        Load file paths from a file.\n\n```\n\n\n\n---\n\n### `add-torrents`\n\n```\nusage: aria2p add-torrents [-h] [-f FROM_FILE]\n                           [torrent_files [torrent_files ...]]\n\nAdd downloads with torrent files.\n\npositional arguments:\n  torrent_files         The paths to the torrent files.\n\noptional arguments:\n  -h, --help            Show this help message and exit.\n  -f FROM_FILE, --from-file FROM_FILE\n                        Load file paths from a file.\n\n```\n\n\n\n---\n\n### `autopurge`\n\n```\nusage: aria2p autopurge [-h]\n\nAutomatically purge completed/removed/failed downloads.\n\noptional arguments:\n  -h, --help  Show this help message and exit.\n\n```\n\n\n\n---\n\n### `call`\n\n```\nusage: aria2p call [-h] [-P PARAMS [PARAMS ...] | -J PARAMS] method\n\nCall a remote method through the JSON-RPC client.\n\npositional arguments:\n  method                The method to call (case insensitive). Dashes and\n                        underscores will be removed so you can use as many as\n                        you want, or none. Prefixes like \'aria2.\' or \'system.\'\n                        are also optional.\n\noptional arguments:\n  -h, --help            Show this help message and exit.\n  -P PARAMS [PARAMS ...], --params-list PARAMS [PARAMS ...]\n                        Parameters as a list of strings.\n  -J PARAMS, --json-params PARAMS\n                        Parameters as a JSON string. You should always wrap it\n                        at least once in an array \'[]\'.\n\n```\n\nAs explained in the help text,\nthe `method` can be the exact method name,\nor just the name without the prefix.\nIt is case-insensitive, and dashes and underscores will be removed.\n\nThe following are all equivalent:\n- `aria2.addUri`\n- `aria2.adduri`\n- `addUri`\n- `ADDURI`\n- `aria2.ADD-URI`\n- `add_uri`\n- `A-d_D-u_R-i` (yes it\'s valid)\n- `A---R---I---A---2.a__d__d__u__r__i` (I think you got it)\n- and even more ugly forms...\n\n#### Examples\nList all available methods.\n*This example uses [`jq`](https://github.com/stedolan/jq).*\n```console\n$ aria2p call listmethods | jq\n[\n  "aria2.addUri",\n  "aria2.addTorrent",\n  "aria2.getPeers",\n  "aria2.addMetalink",\n  "aria2.remove",\n  "aria2.pause",\n  "aria2.forcePause",\n  "aria2.pauseAll",\n  "aria2.forcePauseAll",\n  "aria2.unpause",\n  "aria2.unpauseAll",\n  "aria2.forceRemove",\n  "aria2.changePosition",\n  "aria2.tellStatus",\n  "aria2.getUris",\n  "aria2.getFiles",\n  "aria2.getServers",\n  "aria2.tellActive",\n  "aria2.tellWaiting",\n  "aria2.tellStopped",\n  "aria2.getOption",\n  "aria2.changeUri",\n  "aria2.changeOption",\n  "aria2.getGlobalOption",\n  "aria2.changeGlobalOption",\n  "aria2.purgeDownloadResult",\n  "aria2.removeDownloadResult",\n  "aria2.getVersion",\n  "aria2.getSessionInfo",\n  "aria2.shutdown",\n  "aria2.forceShutdown",\n  "aria2.getGlobalStat",\n  "aria2.saveSession",\n  "system.multicall",\n  "system.listMethods",\n  "system.listNotifications"\n]\n```\n\nList the GIDs (identifiers) of all active downloads.\n*Note that we must give the parameters as a JSON string.*\n```console\n$ aria2p call tellactive -J \'[["gid"]]\'\n[{"gid": "b686cad55029d4df"}, {"gid": "4b39a1ad8fd94e26"}, {"gid": "9d331cc4b287e5df"}, {"gid": "8c9de0df753a5195"}]\n```\n\nPause a download using its GID.\n*Note that when a single string argument is required, it can be passed directly with `-P`.*\n```console\n$ aria2p call pause -P b686cad55029d4df\n"b686cad55029d4df"\n```\n\nAdd a download using magnet URIs.\n*This example uses `jq -r` to remove the quotation marks around the result.*\n```console\n$ aria2p call adduri -J \'[["magnet:?xt=urn:..."]]\' | jq -r\n4b39a1ad8fd94e26f\n```\n\nPurge download results (remove completed downloads from the list).\n```console\n$ aria2p call purge_download_result\n"OK"\n```\n\n---\n\n### `listen`\n\n```\nusage: aria2p listen [-h] [-c CALLBACKS_MODULE] [-t TIMEOUT]\n                     [event_types [event_types ...]]\n\nListen to notifications.\n\npositional arguments:\n  event_types           The types of notifications to process: start, pause,\n                        stop, error, complete or btcomplete. Example: aria2p\n                        listen error btcomplete. Useful if you want to spawn\n                        multiple specialized aria2p listener, for example one\n                        for each type of notification, but still want to use\n                        only one callback file.\n\noptional arguments:\n  -h, --help            Show this help message and exit.\n  -c CALLBACKS_MODULE, --callbacks-module CALLBACKS_MODULE\n                        Path to the Python module defining your notifications\n                        callbacks.\n  -t TIMEOUT, --timeout TIMEOUT\n                        Timeout in seconds to use when waiting for data over\n                        the WebSocket at each iteration. Use small values for\n                        faster reactivity when stopping to listen.\n\n```\n\n\n\n---\n\n### `pause`\n\n```\nusage: aria2p pause [-h] [-a] [-f] [gids [gids ...]]\n\nPause downloads.\n\npositional arguments:\n  gids         The GIDs of the downloads to pause.\n\noptional arguments:\n  -h, --help   Show this help message and exit.\n  -a, --all    Pause all the downloads.\n  -f, --force  Pause without contacting servers first.\n\n```\n\n\n\n---\n\n### `remove`\n\n```\nusage: aria2p remove [-h] [-a] [-f] [gids [gids ...]]\n\nRemove downloads.\n\npositional arguments:\n  gids         The GIDs of the downloads to remove.\n\noptional arguments:\n  -h, --help   Show this help message and exit.\n  -a, --all    Remove all the downloads.\n  -f, --force  Remove without contacting servers first.\n\n```\n\n\n\n---\n\n### `resume`\n\n```\nusage: aria2p resume [-h] [-a] [gids [gids ...]]\n\nResume downloads.\n\npositional arguments:\n  gids        The GIDs of the downloads to resume.\n\noptional arguments:\n  -h, --help  Show this help message and exit.\n  -a, --all   Resume all the downloads.\n\n```\n\n\n\n---\n\n### `show`\n\n```\nusage: aria2p show [-h]\n\nShow the download progression.\n\noptional arguments:\n  -h, --help  Show this help message and exit.\n\n```\n\n\n\n---\n\n### `top`\n\n```\nusage: aria2p top [-h]\n\nLaunch the top-like interactive interface.\n\noptional arguments:\n  -h, --help  Show this help message and exit.\n\n```\n\n\n\n\n## Troubleshooting\n\n- Error outputs like below when using `aria2p` as a Python library:\n\n  ```\n  requests.exceptions.ConnectionError: HTTPConnectionPool(host=\'localhost\', port=6800): Max retries exceeded with url: /jsonrpc (Caused by NewConnectionError(\'<urllib3.connection.HTTPConnection object at 0x1115b1908>: Failed to establish a new connection: [Errno 61] Connection refused\',))\n  ```\n\n  Solution: `aria2c` needs to be up and running first.\n\n## Support\n\nTo support me as an open-source software author,\nconsider donating or be a supporter through one of the following platforms\n\n- [GitHub](https://github.com/sponsors/pawamoy)\n- [Ko-fi](https://www.ko-fi.com/pawamoy)\n- [Liberapay](https://liberapay.com/pawamoy/)\n- [Patreon](https://www.patreon.com/pawamoy)\n- [Paypal](https://www.paypal.me/pawamoy)\n\nThank you!',
    'author': 'Timothée Mazzucotelli',
    'author_email': 'pawamoy@pm.me',
    'maintainer': None,
    'maintainer_email': None,
    'url': 'https://github.com/pawamoy/aria2p',
    'package_dir': package_dir,
    'packages': packages,
    'package_data': package_data,
    'install_requires': install_requires,
    'extras_require': extras_require,
    'entry_points': entry_points,
    'python_requires': '>=3.6,<4.0',
}


setup(**setup_kwargs)
