All Projects → synodriver → aioaria2

synodriver / aioaria2

Licence: GPL-3.0 license
An async/await wrapper around aria2-json-rpc with websocket support

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to aioaria2

fbemissary
A bot framework for the Facebook Messenger platform, built on asyncio and aiohttp
Stars: ✭ 30 (+50%)
Mutual labels:  asyncio
aioppspp
IETF PPSP RFC7574 in Python/asyncio
Stars: ✭ 21 (+5%)
Mutual labels:  asyncio
memoize
Caching library for asynchronous Python applications.
Stars: ✭ 53 (+165%)
Mutual labels:  asyncio
aioapns
An efficient APNs Client Library for Python/asyncio
Stars: ✭ 60 (+200%)
Mutual labels:  asyncio
feedsearch-crawler
Crawl sites for RSS, Atom, and JSON feeds.
Stars: ✭ 23 (+15%)
Mutual labels:  asyncio
snekcord
A work-in-progress Discord API wrapper written in Python.
Stars: ✭ 15 (-25%)
Mutual labels:  asyncio
aioamqp consumer
consumer/producer/rpc library built over aioamqp
Stars: ✭ 36 (+80%)
Mutual labels:  asyncio
distex
Distributed process pool for Python
Stars: ✭ 101 (+405%)
Mutual labels:  asyncio
steam.py
An async python wrapper to interact with the Steam API and its CMs
Stars: ✭ 74 (+270%)
Mutual labels:  asyncio
telecharm-userbot
A powerful, cool and well-made userbot for your Telegram profile, with promising extension capabilities.
Stars: ✭ 17 (-15%)
Mutual labels:  asyncio
cognitojwt
Decode and verify Amazon Cognito JWT tokens
Stars: ✭ 50 (+150%)
Mutual labels:  asyncio
FinanceCenter
Fetching Financial Data (US/China)
Stars: ✭ 26 (+30%)
Mutual labels:  asyncio
asynchronous
A D port of Python's asyncio library
Stars: ✭ 35 (+75%)
Mutual labels:  asyncio
fast-api-sqlalchemy-template
Dockerized web application on FastAPI, sqlalchemy1.4, PostgreSQL
Stars: ✭ 25 (+25%)
Mutual labels:  asyncio
fastapi-users
Ready-to-use and customizable users management for FastAPI
Stars: ✭ 1,920 (+9500%)
Mutual labels:  asyncio
Photon
A lightweight multi-threaded downloader based on aria2.
Stars: ✭ 3,026 (+15030%)
Mutual labels:  aria2
glQiwiApi
The ultrarapid and multifunctional wrapper over QIWI and YooMoney
Stars: ✭ 44 (+120%)
Mutual labels:  asyncio
website
PySlackers website for invites and learning resources
Stars: ✭ 61 (+205%)
Mutual labels:  asyncio
idataapi-transform
Full async support toolkit for IDataAPI for efficiency work, read data from API/ES/csv/xlsx/json/redis/mysql/mongo/kafka, write to ES/csv/xlsx/json/redis/mysql/mongo/kafka, provide CLI and python API
Stars: ✭ 36 (+80%)
Mutual labels:  asyncio
mqttools
MQTT version 5.0 client and broker using asyncio
Stars: ✭ 44 (+120%)
Mutual labels:  asyncio

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
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].