aioaria2
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
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 class
Aria2WebsocketTrigger -
Callbacks now accept
dictas second parameter instead ofasyncio.Future -
methods of class
Aria2WebsocketTriggernow have same return value asAria2HttpClient -
idparameter 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
loadsdumps
v1.3.2
- fix unclosed client_session when exception occurs during ws_connect
- alias for
Aria2WebsocketTrigger,namedAria2WebsocketClient
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-extensionsruntime dependency - fix optional RPC parameter placement, including explicit
position=0; reject invalid negative positions - bound WebSocket timeout retries with
max_attemptsand 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)
| File | Size | Uploaded | |
|---|---|---|---|
| aioaria2-1.3.7.tar.gz | 38.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|