Skip to main content

Support Aria2 rpc client and manage server with async/await

Project description

aioaria2

pypi python implementation wheel license

Support async rpc call with aria2 and process management

Usage:

example

import asyncio
from pprint import pprint

import aioaria2


async def main():
    async with aioaria2.Aria2HttpClient("http://117.0.0.1:6800/jsonrpc",
                                        token="token") as client:
        pprint(await client.getVersion())


asyncio.run(main())

The ip address should be replaced with your own

See aria2 manual for more detail about client methods

# exampe of http
import asyncio
from pprint import pprint

import aioaria2
import ujson


async def main():
    async with aioaria2.Aria2HttpClient("http://127.0.0.1:6800/jsonrpc",
                                        token="token",
                                        loads=ujson.loads,
                                        dumps=ujson.dumps) as client:
        pprint(await client.addUri(["http://www.demo.com"]))  # that would start downloading


asyncio.run(main())
# exampe of websocket
import asyncio
from pprint import pprint

import aioaria2
import ujson


@aioaria2.run_sync
def on_download_complete(trigger, data):
    print(f"downlaod complete {data}")


async def main():
    client: aioaria2.Aria2WebsocketTrigger = await aioaria2.Aria2WebsocketTrigger.new("http://127.0.0.1:6800/jsonrpc",
                                                                                      token="token",
                                                                                      loads=ujson.loads,
                                                                                      dumps=ujson.dumps)
    client.onDownloadComplete(on_download_complete)
    pprint(await client.addUri(["http://www.demo.com"]))


loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
  • Run that coroutine function and each method represent an aria2-rpc call. As for server, each instance represent an aria2 process.
import aioaria2
import asyncio


async def main():
    server = aioaria2.AsyncAria2Server(r"aria2c.exe",
                                       r"--conf-path=aria2.conf", "--rpc-secret=admin", daemon=True)
    await server.start()
    await server.wait()


asyncio.run(main())

this start an aria2 process

Aria2 Manual

todolist

  • async http
  • async websocket
  • async process management
  • unitest

This module is built on top of aria2jsonrpc with async and websocket support.

For windows users, you should

# for start async aria2 process
asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
asyncio.set_event_loop(asyncio.ProactorEventLoop())

For python version greater than 3.8, asyncio uses ProactorEventLoop by default, so there is no need to modify

v1.2.0

new Aria2WebsocketTrigger class for websocket events, use on* methods to add callbacks

Like

@trigger.onDownloadStart
async def onDownloadStart(trigger, future):
    print("下载开始{0}".format(future.result()))

v1.2.3

Now you can add multiple callbacks for one event ,must be coroutine function or an async callable, use aioaria2.run_sync to wrap a sync function

@trigger.onDownloadStart
async def callback1(trigger, future):
    print("第一个回调{0}".format(future.result()))

@trigger.onDownloadStart
@run_sync
def callback2(trigger, future):
    print("第二个回调{0}".format(future.result()))

v1.3.0

  • Big changes for classAria2WebsocketTrigger

  • Callbacks now acceptdictas second parameter instead ofasyncio.Future

  • methods of classAria2WebsocketTrigger now have same return value as Aria2HttpClient

  • id parameter now accept a callable as idfactory to generate uuid, otherwise default uuid factory is used.

@trigger.onDownloadStart
async def callback1(trigger, data:dict):
    print("第一个回调{0}".format(data))

@trigger.onDownloadStart
@run_sync
def callback2(trigger, data:dict):
    print("第二个回调{0}".format(data))

v1.3.1

  • custom json library with keyword arguments loads dumps

v1.3.2

  • fix unclosed client_session when exception occurs during ws_connect
  • alias for Aria2WebsocketTrigger,named Aria2WebsocketClient

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aioaria2-1.3.2.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

aioaria2-1.3.2-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

Details for the file aioaria2-1.3.2.tar.gz.

File metadata

  • Download URL: aioaria2-1.3.2.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.7.0 requests/2.24.0 setuptools/49.6.0.post20210108 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.5

File hashes

Hashes for aioaria2-1.3.2.tar.gz
Algorithm Hash digest
SHA256 669e42e64bab764ae58844e7e44f057379e1c56f1fb2389664131dd19b7c6157
MD5 4eb8045c233b8e01bba20b6e52c9226f
BLAKE2b-256 afcf70ce37c8c0f483357e13d32f88da26f7eeedc3cc4e4edb950a2ed8926f2b

See more details on using hashes here.

File details

Details for the file aioaria2-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: aioaria2-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 31.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.7.0 requests/2.24.0 setuptools/49.6.0.post20210108 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.5

File hashes

Hashes for aioaria2-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ee2787751f8ce395a052ef33fdf61cb36bad962d361974b341ac8da6a74c7a4a
MD5 37edcb390d0e94d904a18e56164f7b43
BLAKE2b-256 e5aa0d5ac18d708316fc82eacfeb9976a4784930e1aadbf459ad391f28c66605

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page