summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-asyncio-dgram.spec284
-rw-r--r--sources1
3 files changed, 286 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..8093836 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/asyncio-dgram-2.1.2.tar.gz
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
+[![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
+* Wed Mar 08 2023 Python_Bot <Python_Bot@openeuler.org> - 2.1.2-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..99a8c62
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+3c396a43b4b3e42a203212541901bd72 asyncio-dgram-2.1.2.tar.gz