diff options
Diffstat (limited to 'python-asyncio-dgram.spec')
-rw-r--r-- | python-asyncio-dgram.spec | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/python-asyncio-dgram.spec b/python-asyncio-dgram.spec new file mode 100644 index 0000000..2a2bb1a --- /dev/null +++ b/python-asyncio-dgram.spec @@ -0,0 +1,284 @@ +%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 +[](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 +[](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 +[](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 +* Wed Mar 08 2023 Python_Bot <Python_Bot@openeuler.org> - 2.1.2-1 +- Package Spec generated |