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.Aria2WebsocketClient = await aioaria2.Aria2WebsocketClient.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

v1.3.3

  • fix method problems in client

v1.3.4rc1

  • handle reconnect simply
  • handle InvalidstateError while trying to ping aria2

v1.3.4

  • add async id factory support
  • allow unregister callbacks in websocketclient
  • add contextvars support in run_sync

v1.3.5rc1

  • graceful shutdown

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.5rc1.tar.gz (31.6 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file aioaria2-1.3.5rc1.tar.gz.

File metadata

  • Download URL: aioaria2-1.3.5rc1.tar.gz
  • Upload date:
  • Size: 31.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for aioaria2-1.3.5rc1.tar.gz
Algorithm Hash digest
SHA256 304e58c4d9f1e8775d4bd46afdf3eb9f8f510a844db29094fe293bc4a611f24b
MD5 ad80621494d3daa4544239bdfbea86b7
BLAKE2b-256 8c10a41bb5c5638bbb4027a8bbb6107ff7ba224ba5aa40d363ec1b938eb4aade

See more details on using hashes here.

File details

Details for the file aioaria2-1.3.5rc1-py3-none-any.whl.

File metadata

  • Download URL: aioaria2-1.3.5rc1-py3-none-any.whl
  • Upload date:
  • Size: 31.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for aioaria2-1.3.5rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 5b26fa2671e0bf55be3e132b9c471cff95efad434b5ca9750db14ec71bfb8f12
MD5 5fdd7cb70d247a9d5e92057c8ccff72d
BLAKE2b-256 1f90fc3176bbf3506cb06d605cab5ae6056d72f38c4faac459aab0511b1b42e7

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