Support Aria2 rpc client and manage server with async/await
Project description
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. 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
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
dict
as second parameter instead ofasyncio.Future
-
methods of class
Aria2WebsocketTrigger
now have same return value asAria2HttpClient
-
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
,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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aioaria2-1.3.5rc1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b26fa2671e0bf55be3e132b9c471cff95efad434b5ca9750db14ec71bfb8f12 |
|
MD5 | 5fdd7cb70d247a9d5e92057c8ccff72d |
|
BLAKE2b-256 | 1f90fc3176bbf3506cb06d605cab5ae6056d72f38c4faac459aab0511b1b42e7 |