From 076631461b2c34539949cd7c4bc19d7b322827d9 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Wed, 31 May 2023 05:59:55 +0000 Subject: automatic import of python-aioaria2 --- .gitignore | 1 + python-aioaria2.spec | 660 +++++++++++++++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 662 insertions(+) create mode 100644 python-aioaria2.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..5c1e0d3 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/aioaria2-1.3.4.tar.gz diff --git a/python-aioaria2.spec b/python-aioaria2.spec new file mode 100644 index 0000000..42ffa14 --- /dev/null +++ b/python-aioaria2.spec @@ -0,0 +1,660 @@ +%global _empty_manifest_terminate_build 0 +Name: python-aioaria2 +Version: 1.3.4 +Release: 1 +Summary: Support Aria2 rpc client and manage server with async/await +License: GPLv3 +URL: https://github.com/synodriver/aioaria2 +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/37/7b/4c1fb78d55d9ea7ec14e862d85d9d7edd905c3a3f09e25d27bce0e4a434e/aioaria2-1.3.4.tar.gz +BuildArch: noarch + +Requires: python3-aiohttp +Requires: python3-aiofiles +Requires: python3-typing-extensions + +%description +# aioaria2 + + +[![pypi](https://img.shields.io/pypi/v/aioaria2.svg)](https://pypi.org/project/aioaria2/) +![python](https://img.shields.io/pypi/pyversions/aioaria2) +![implementation](https://img.shields.io/pypi/implementation/aioaria2) +![wheel](https://img.shields.io/pypi/wheel/aioaria2) +![license](https://img.shields.io/github/license/synodriver/aioaria2.svg) + +## Support async rpc call with aria2 and process management + +## Usage: + +### example + +```python +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](http://aria2.github.io/manual/en/html/) for more detail about client methods + +```python +# 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()) +``` + +```python +# 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.Aria2WebsocketTrigger = await aioaria2.Aria2WebsocketTrigger.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. + +```python +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](http://aria2.github.io/manual/en/html/) + +### todolist + +- [x] async http +- [x] async websocket +- [x] async process management +- [x] unitest + +This module is built on top of [aria2jsonrpc](https://xyne.archlinux.ca/projects/python3-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 of```asyncio.Future``` +* methods of class```Aria2WebsocketTrigger``` 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``` + + + +%package -n python3-aioaria2 +Summary: Support Aria2 rpc client and manage server with async/await +Provides: python-aioaria2 +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-aioaria2 +# aioaria2 + + +[![pypi](https://img.shields.io/pypi/v/aioaria2.svg)](https://pypi.org/project/aioaria2/) +![python](https://img.shields.io/pypi/pyversions/aioaria2) +![implementation](https://img.shields.io/pypi/implementation/aioaria2) +![wheel](https://img.shields.io/pypi/wheel/aioaria2) +![license](https://img.shields.io/github/license/synodriver/aioaria2.svg) + +## Support async rpc call with aria2 and process management + +## Usage: + +### example + +```python +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](http://aria2.github.io/manual/en/html/) for more detail about client methods + +```python +# 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()) +``` + +```python +# 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.Aria2WebsocketTrigger = await aioaria2.Aria2WebsocketTrigger.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. + +```python +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](http://aria2.github.io/manual/en/html/) + +### todolist + +- [x] async http +- [x] async websocket +- [x] async process management +- [x] unitest + +This module is built on top of [aria2jsonrpc](https://xyne.archlinux.ca/projects/python3-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 of```asyncio.Future``` +* methods of class```Aria2WebsocketTrigger``` 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``` + + + +%package help +Summary: Development documents and examples for aioaria2 +Provides: python3-aioaria2-doc +%description help +# aioaria2 + + +[![pypi](https://img.shields.io/pypi/v/aioaria2.svg)](https://pypi.org/project/aioaria2/) +![python](https://img.shields.io/pypi/pyversions/aioaria2) +![implementation](https://img.shields.io/pypi/implementation/aioaria2) +![wheel](https://img.shields.io/pypi/wheel/aioaria2) +![license](https://img.shields.io/github/license/synodriver/aioaria2.svg) + +## Support async rpc call with aria2 and process management + +## Usage: + +### example + +```python +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](http://aria2.github.io/manual/en/html/) for more detail about client methods + +```python +# 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()) +``` + +```python +# 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.Aria2WebsocketTrigger = await aioaria2.Aria2WebsocketTrigger.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. + +```python +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](http://aria2.github.io/manual/en/html/) + +### todolist + +- [x] async http +- [x] async websocket +- [x] async process management +- [x] unitest + +This module is built on top of [aria2jsonrpc](https://xyne.archlinux.ca/projects/python3-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 of```asyncio.Future``` +* methods of class```Aria2WebsocketTrigger``` 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``` + + + +%prep +%autosetup -n aioaria2-1.3.4 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-aioaria2 -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 31 2023 Python_Bot - 1.3.4-1 +- Package Spec generated diff --git a/sources b/sources new file mode 100644 index 0000000..9ffdc77 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +06c2430a209a0f6507f07c74c70d6f1b aioaria2-1.3.4.tar.gz -- cgit v1.2.3