summaryrefslogtreecommitdiff
path: root/python-aioaria2.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-31 05:59:55 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-31 05:59:55 +0000
commit076631461b2c34539949cd7c4bc19d7b322827d9 (patch)
tree0d38735b947046673747175a6e3279f9fe41de83 /python-aioaria2.spec
parent1153cf52a3553177eba2fd10e00b2566e3105f19 (diff)
automatic import of python-aioaria2
Diffstat (limited to 'python-aioaria2.spec')
-rw-r--r--python-aioaria2.spec660
1 files changed, 660 insertions, 0 deletions
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 <Python_Bot@openeuler.org> - 1.3.4-1
+- Package Spec generated