%global _empty_manifest_terminate_build 0 Name: python-asyncio-dgram Version: 2.1.2 Release: 1 Summary: Higher level Datagram support for Asyncio License: MIT URL: https://github.com/jsbronder/asyncio-dgram Source0: https://mirrors.nju.edu.cn/pypi/web/packages/b8/ae/af5fe668d16e82a05b85855a065ecc239ed2274e6a0d60bca6d1337de7c6/asyncio-dgram-2.1.2.tar.gz BuildArch: noarch Requires: python3-black Requires: python3-flake8 Requires: python3-mypy-extensions Requires: python3-mypy Requires: python3-pytest-asyncio Requires: python3-pytest Requires: python3-typed-ast Requires: python3-typing-extensions %description [![Build Status](https://github.com/jsbronder/asyncio-dgram/workflows/ci/badge.svg)](https://github.com/jsbronder/asyncio-dgram/actions) # Higher level Datagram support for Asyncio Simple wrappers that allow you to `await read()` from datagrams as suggested by Guido van Rossum [here](https://github.com/python/asyncio/pull/321#issuecomment-187022351). I frequently found myself having to inherit from `asyncio.DatagramProtocol` and implement this over and over. # Design The goal of this package is to make implementing common patterns that use datagrams simple and straight-forward while still supporting more esoteric options. This is done by taking an opinionated stance on the API that differs from parts of asyncio. For instance, rather than exposing a function like [create\_datagram\_endpoint](https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint) which supports many use-cases and has conflicting parameters, `asyncio_dgram` only provides three functions for creating a stream: - `connect((host, port))`: Creates a datagram endpoint which can only communicate with the endpoint it connected to. - `bind((host, port))`: Creates a datagram endpoint that can communicate with anyone, but must specified the destination address every time it sends. - `from_socket(sock)`: If the above two functions are not sufficient, then `asyncio_dgram` simply lets the caller setup the socket as they see fit. # Example UDP echo client and server Following the example of asyncio documentation, here's what a UDP echo client and server would look like. ```python import asyncio import asyncio_dgram async def udp_echo_client(): stream = await asyncio_dgram.connect(("127.0.0.1", 8888)) await stream.send(b"Hello World!") data, remote_addr = await stream.recv() print(f"Client received: {data.decode()!r}") stream.close() async def udp_echo_server(): stream = await asyncio_dgram.bind(("127.0.0.1", 8888)) print(f"Serving on {stream.sockname}") data, remote_addr = await stream.recv() print(f"Echoing {data.decode()!r}") await stream.send(data, remote_addr) await asyncio.sleep(0.5) print(f"Shutting down server") def main(): loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(udp_echo_server(), udp_echo_client())) if __name__ == "__main__": main() ``` %package -n python3-asyncio-dgram Summary: Higher level Datagram support for Asyncio Provides: python-asyncio-dgram BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-asyncio-dgram [![Build Status](https://github.com/jsbronder/asyncio-dgram/workflows/ci/badge.svg)](https://github.com/jsbronder/asyncio-dgram/actions) # Higher level Datagram support for Asyncio Simple wrappers that allow you to `await read()` from datagrams as suggested by Guido van Rossum [here](https://github.com/python/asyncio/pull/321#issuecomment-187022351). I frequently found myself having to inherit from `asyncio.DatagramProtocol` and implement this over and over. # Design The goal of this package is to make implementing common patterns that use datagrams simple and straight-forward while still supporting more esoteric options. This is done by taking an opinionated stance on the API that differs from parts of asyncio. For instance, rather than exposing a function like [create\_datagram\_endpoint](https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint) which supports many use-cases and has conflicting parameters, `asyncio_dgram` only provides three functions for creating a stream: - `connect((host, port))`: Creates a datagram endpoint which can only communicate with the endpoint it connected to. - `bind((host, port))`: Creates a datagram endpoint that can communicate with anyone, but must specified the destination address every time it sends. - `from_socket(sock)`: If the above two functions are not sufficient, then `asyncio_dgram` simply lets the caller setup the socket as they see fit. # Example UDP echo client and server Following the example of asyncio documentation, here's what a UDP echo client and server would look like. ```python import asyncio import asyncio_dgram async def udp_echo_client(): stream = await asyncio_dgram.connect(("127.0.0.1", 8888)) await stream.send(b"Hello World!") data, remote_addr = await stream.recv() print(f"Client received: {data.decode()!r}") stream.close() async def udp_echo_server(): stream = await asyncio_dgram.bind(("127.0.0.1", 8888)) print(f"Serving on {stream.sockname}") data, remote_addr = await stream.recv() print(f"Echoing {data.decode()!r}") await stream.send(data, remote_addr) await asyncio.sleep(0.5) print(f"Shutting down server") def main(): loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(udp_echo_server(), udp_echo_client())) if __name__ == "__main__": main() ``` %package help Summary: Development documents and examples for asyncio-dgram Provides: python3-asyncio-dgram-doc %description help [![Build Status](https://github.com/jsbronder/asyncio-dgram/workflows/ci/badge.svg)](https://github.com/jsbronder/asyncio-dgram/actions) # Higher level Datagram support for Asyncio Simple wrappers that allow you to `await read()` from datagrams as suggested by Guido van Rossum [here](https://github.com/python/asyncio/pull/321#issuecomment-187022351). I frequently found myself having to inherit from `asyncio.DatagramProtocol` and implement this over and over. # Design The goal of this package is to make implementing common patterns that use datagrams simple and straight-forward while still supporting more esoteric options. This is done by taking an opinionated stance on the API that differs from parts of asyncio. For instance, rather than exposing a function like [create\_datagram\_endpoint](https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint) which supports many use-cases and has conflicting parameters, `asyncio_dgram` only provides three functions for creating a stream: - `connect((host, port))`: Creates a datagram endpoint which can only communicate with the endpoint it connected to. - `bind((host, port))`: Creates a datagram endpoint that can communicate with anyone, but must specified the destination address every time it sends. - `from_socket(sock)`: If the above two functions are not sufficient, then `asyncio_dgram` simply lets the caller setup the socket as they see fit. # Example UDP echo client and server Following the example of asyncio documentation, here's what a UDP echo client and server would look like. ```python import asyncio import asyncio_dgram async def udp_echo_client(): stream = await asyncio_dgram.connect(("127.0.0.1", 8888)) await stream.send(b"Hello World!") data, remote_addr = await stream.recv() print(f"Client received: {data.decode()!r}") stream.close() async def udp_echo_server(): stream = await asyncio_dgram.bind(("127.0.0.1", 8888)) print(f"Serving on {stream.sockname}") data, remote_addr = await stream.recv() print(f"Echoing {data.decode()!r}") await stream.send(data, remote_addr) await asyncio.sleep(0.5) print(f"Shutting down server") def main(): loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(udp_echo_server(), udp_echo_client())) if __name__ == "__main__": main() ``` %prep %autosetup -n asyncio-dgram-2.1.2 %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-asyncio-dgram -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri Apr 21 2023 Python_Bot - 2.1.2-1 - Package Spec generated