Skip to main content

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. The server manager is a process-wide singleton to avoid starting multiple aria2 processes on one machine; subsequent constructions reuse the first command line.
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

v1.3.5rc2

  • add parser for aria2 files
from pprint import pprint
from aioaria2 import DHTFile

pprint(DHTFile.from_file2("dht.dat"))

v1.3.5rc3

  • add strong ref to pending tasks

v1.3.6

  • update latest aiohttp version

v1.3.7

  • require Python 3.10 or newer and modernize type annotations to use built-in generics and union syntax
  • remove the no-longer-needed typing-extensions runtime dependency
  • fix optional RPC parameter placement, including explicit position=0; reject invalid negative positions
  • bound WebSocket timeout retries with max_attempts and clean up failed connections consistently
  • normalize HTTP error responses to Aria2rpcException
  • handle generator inputs and per-call faults in get_statuses
  • document the process-wide aria2 server singleton behavior

Metadata

Release files for aioaria2 1.3.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aioaria2 1.3.7
File Size Uploaded
aioaria2-1.3.7.tar.gz 38.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aioaria2 1.3.7
File Interpreter ABI Platform
aioaria2-1.3.7-py3-none-any.whl Python 3 none any Details

Total release size: 72.3 kB

Release files / aioaria2-1.3.7.tar.gz

Download URL aioaria2-1.3.7.tar.gz
Size 38.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a19417207c2994edf6d471edd432edda9a7c037da07b2bbdc75d0093084d17f2
BLAKE2b-256 checksum
How to use checksums
4f11d118ced6984bc252e9b61a7f43035842fd5347d17cb9c2df98b94844ff87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / aioaria2-1.3.7-py3-none-any.whl

Download URL aioaria2-1.3.7-py3-none-any.whl
Size 34.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
174138221a28d2147def90b90b4365279ab8746ce41f3c30fc93b9f7f2539370
BLAKE2b-256 checksum
How to use checksums
a03de871f4a8c7a5737acb8de006c25698c81e496b57940d725a8c3779a4242b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page