%global _empty_manifest_terminate_build 0 Name: python-trio-websocket Version: 0.10.2 Release: 1 Summary: WebSocket library for Trio License: MIT License URL: https://github.com/HyperionGray/trio-websocket Source0: https://mirrors.nju.edu.cn/pypi/web/packages/ea/56/33f46c824c43493de52d62842e569a8c3db6b0e965825257a0684a608580/trio-websocket-0.10.2.tar.gz BuildArch: noarch Requires: python3-exceptiongroup Requires: python3-trio Requires: python3-wsproto %description # Trio WebSocket This library implements both server and client aspects of the [the WebSocket protocol](https://tools.ietf.org/html/rfc6455), striving for safety, correctness, and ergonomics. It is based on the [wsproto project](https://wsproto.readthedocs.io/en/latest/), which is a [Sans-IO](https://sans-io.readthedocs.io/) state machine that implements the majority of the WebSocket protocol, including framing, codecs, and events. This library handles I/O using [the Trio framework](https://trio.readthedocs.io/en/latest/). This library passes the [Autobahn Test Suite](https://github.com/crossbario/autobahn-testsuite). This README contains a brief introduction to the project. Full documentation [is available here](https://trio-websocket.readthedocs.io). [![PyPI](https://img.shields.io/pypi/v/trio-websocket.svg?style=flat-square)](https://pypi.org/project/trio-websocket/) ![Python Versions](https://img.shields.io/pypi/pyversions/trio-websocket.svg?style=flat-square) [![Build Status](https://img.shields.io/github/actions/workflow/status/HyperionGray/trio-websocket/ci.yml)](https://github.com/HyperionGray/trio-websocket/actions/workflows/ci.yml) [![Read the Docs](https://img.shields.io/readthedocs/trio-websocket.svg)](https://trio-websocket.readthedocs.io) ## Alternatives If you happen to only need a server, using Quart via the [quart-trio](https://github.com/pgjones/quart-trio) extension may suffice. While trio-websocket is more flexible, Quart covers both HTTP and WebSocket within a single framework, and serving both from the same port is straightforward. There has yet to be a performance comparison. ## Installation This library requires Python 3.7 or greater. To install from PyPI: pip install trio-websocket ## Client Example This example demonstrates how to open a WebSocket URL: ```python import trio from sys import stderr from trio_websocket import open_websocket_url async def main(): try: async with open_websocket_url('wss://echo.websocket.org') as ws: await ws.send_message('hello world!') message = await ws.get_message() print('Received message: %s' % message) except OSError as ose: print('Connection attempt failed: %s' % ose, file=stderr) trio.run(main) ``` The WebSocket context manager connects automatically before entering the block and disconnects automatically before exiting the block. The full API offers a lot of flexibility and additional options. ## Server Example A WebSocket server requires a bind address, a port, and a coroutine to handle incoming connections. This example demonstrates an "echo server" that replies to each incoming message with an identical outgoing message. ```python import trio from trio_websocket import serve_websocket, ConnectionClosed async def echo_server(request): ws = await request.accept() while True: try: message = await ws.get_message() await ws.send_message(message) except ConnectionClosed: break async def main(): await serve_websocket(echo_server, '127.0.0.1', 8000, ssl_context=None) trio.run(main) ``` The server's handler ``echo_server(…)`` receives a connection request object. This object can be used to inspect the client's request and modify the handshake, then it can be exchanged for an actual WebSocket object ``ws``. Again, the full API offers a lot of flexibility and additional options. %package -n python3-trio-websocket Summary: WebSocket library for Trio Provides: python-trio-websocket BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-trio-websocket # Trio WebSocket This library implements both server and client aspects of the [the WebSocket protocol](https://tools.ietf.org/html/rfc6455), striving for safety, correctness, and ergonomics. It is based on the [wsproto project](https://wsproto.readthedocs.io/en/latest/), which is a [Sans-IO](https://sans-io.readthedocs.io/) state machine that implements the majority of the WebSocket protocol, including framing, codecs, and events. This library handles I/O using [the Trio framework](https://trio.readthedocs.io/en/latest/). This library passes the [Autobahn Test Suite](https://github.com/crossbario/autobahn-testsuite). This README contains a brief introduction to the project. Full documentation [is available here](https://trio-websocket.readthedocs.io). [![PyPI](https://img.shields.io/pypi/v/trio-websocket.svg?style=flat-square)](https://pypi.org/project/trio-websocket/) ![Python Versions](https://img.shields.io/pypi/pyversions/trio-websocket.svg?style=flat-square) [![Build Status](https://img.shields.io/github/actions/workflow/status/HyperionGray/trio-websocket/ci.yml)](https://github.com/HyperionGray/trio-websocket/actions/workflows/ci.yml) [![Read the Docs](https://img.shields.io/readthedocs/trio-websocket.svg)](https://trio-websocket.readthedocs.io) ## Alternatives If you happen to only need a server, using Quart via the [quart-trio](https://github.com/pgjones/quart-trio) extension may suffice. While trio-websocket is more flexible, Quart covers both HTTP and WebSocket within a single framework, and serving both from the same port is straightforward. There has yet to be a performance comparison. ## Installation This library requires Python 3.7 or greater. To install from PyPI: pip install trio-websocket ## Client Example This example demonstrates how to open a WebSocket URL: ```python import trio from sys import stderr from trio_websocket import open_websocket_url async def main(): try: async with open_websocket_url('wss://echo.websocket.org') as ws: await ws.send_message('hello world!') message = await ws.get_message() print('Received message: %s' % message) except OSError as ose: print('Connection attempt failed: %s' % ose, file=stderr) trio.run(main) ``` The WebSocket context manager connects automatically before entering the block and disconnects automatically before exiting the block. The full API offers a lot of flexibility and additional options. ## Server Example A WebSocket server requires a bind address, a port, and a coroutine to handle incoming connections. This example demonstrates an "echo server" that replies to each incoming message with an identical outgoing message. ```python import trio from trio_websocket import serve_websocket, ConnectionClosed async def echo_server(request): ws = await request.accept() while True: try: message = await ws.get_message() await ws.send_message(message) except ConnectionClosed: break async def main(): await serve_websocket(echo_server, '127.0.0.1', 8000, ssl_context=None) trio.run(main) ``` The server's handler ``echo_server(…)`` receives a connection request object. This object can be used to inspect the client's request and modify the handshake, then it can be exchanged for an actual WebSocket object ``ws``. Again, the full API offers a lot of flexibility and additional options. %package help Summary: Development documents and examples for trio-websocket Provides: python3-trio-websocket-doc %description help # Trio WebSocket This library implements both server and client aspects of the [the WebSocket protocol](https://tools.ietf.org/html/rfc6455), striving for safety, correctness, and ergonomics. It is based on the [wsproto project](https://wsproto.readthedocs.io/en/latest/), which is a [Sans-IO](https://sans-io.readthedocs.io/) state machine that implements the majority of the WebSocket protocol, including framing, codecs, and events. This library handles I/O using [the Trio framework](https://trio.readthedocs.io/en/latest/). This library passes the [Autobahn Test Suite](https://github.com/crossbario/autobahn-testsuite). This README contains a brief introduction to the project. Full documentation [is available here](https://trio-websocket.readthedocs.io). [![PyPI](https://img.shields.io/pypi/v/trio-websocket.svg?style=flat-square)](https://pypi.org/project/trio-websocket/) ![Python Versions](https://img.shields.io/pypi/pyversions/trio-websocket.svg?style=flat-square) [![Build Status](https://img.shields.io/github/actions/workflow/status/HyperionGray/trio-websocket/ci.yml)](https://github.com/HyperionGray/trio-websocket/actions/workflows/ci.yml) [![Read the Docs](https://img.shields.io/readthedocs/trio-websocket.svg)](https://trio-websocket.readthedocs.io) ## Alternatives If you happen to only need a server, using Quart via the [quart-trio](https://github.com/pgjones/quart-trio) extension may suffice. While trio-websocket is more flexible, Quart covers both HTTP and WebSocket within a single framework, and serving both from the same port is straightforward. There has yet to be a performance comparison. ## Installation This library requires Python 3.7 or greater. To install from PyPI: pip install trio-websocket ## Client Example This example demonstrates how to open a WebSocket URL: ```python import trio from sys import stderr from trio_websocket import open_websocket_url async def main(): try: async with open_websocket_url('wss://echo.websocket.org') as ws: await ws.send_message('hello world!') message = await ws.get_message() print('Received message: %s' % message) except OSError as ose: print('Connection attempt failed: %s' % ose, file=stderr) trio.run(main) ``` The WebSocket context manager connects automatically before entering the block and disconnects automatically before exiting the block. The full API offers a lot of flexibility and additional options. ## Server Example A WebSocket server requires a bind address, a port, and a coroutine to handle incoming connections. This example demonstrates an "echo server" that replies to each incoming message with an identical outgoing message. ```python import trio from trio_websocket import serve_websocket, ConnectionClosed async def echo_server(request): ws = await request.accept() while True: try: message = await ws.get_message() await ws.send_message(message) except ConnectionClosed: break async def main(): await serve_websocket(echo_server, '127.0.0.1', 8000, ssl_context=None) trio.run(main) ``` The server's handler ``echo_server(…)`` receives a connection request object. This object can be used to inspect the client's request and modify the handshake, then it can be exchanged for an actual WebSocket object ``ws``. Again, the full API offers a lot of flexibility and additional options. %prep %autosetup -n trio-websocket-0.10.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-trio-websocket -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri Apr 21 2023 Python_Bot - 0.10.2-1 - Package Spec generated