diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-sse-starlette.spec | 460 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 462 insertions, 0 deletions
@@ -0,0 +1 @@ +/sse-starlette-1.3.3.tar.gz diff --git a/python-sse-starlette.spec b/python-sse-starlette.spec new file mode 100644 index 0000000..7c28099 --- /dev/null +++ b/python-sse-starlette.spec @@ -0,0 +1,460 @@ +%global _empty_manifest_terminate_build 0 +Name: python-sse-starlette +Version: 1.3.3 +Release: 1 +Summary: "SSE plugin for Starlette" +License: BSD License +URL: https://github.com/sysid/sse-starlette +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/34/2e/65b3e20f5746d399dff20ea698f52088cfc287a340dd0b05055846263a1f/sse-starlette-1.3.3.tar.gz +BuildArch: noarch + +Requires: python3-starlette + +%description +# Server Sent Events for [Starlette](https://github.com/encode/starlette) and [FastAPI](https://fastapi.tiangolo.com/) + +[![PyPI Version][pypi-image]][pypi-url] +[![Build Status][build-image]][build-url] +[![Code Coverage][coverage-image]][coverage-url] + +Background: https://sysid.github.io/server-sent-events/ + +Installation: + +```shell +pip install sse-starlette +``` + +Usage: + +```python +import asyncio +import uvicorn +from starlette.applications import Starlette +from starlette.routing import Route +from sse_starlette.sse import EventSourceResponse + +async def numbers(minimum, maximum): + for i in range(minimum, maximum + 1): + await asyncio.sleep(0.9) + yield dict(data=i) + +async def sse(request): + generator = numbers(1, 5) + return EventSourceResponse(generator) + +routes = [ + Route("/", endpoint=sse) +] + +app = Starlette(debug=True, routes=routes) + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8000, log_level='info') +``` + +Output: + + +**Caveat:** SSE streaming does not work in combination with [GZipMiddleware](https://github.com/encode/starlette/issues/20#issuecomment-704106436). + +Be aware that for proper server shutdown your application must stop all +running tasks (generators). Otherwise you might experience the following warnings +at shutdown: `Waiting for background tasks to complete. (CTRL+C to force quit)`. + +Client disconnects need to be handled in your Request handler (see example.py): +```python +async def endless(req: Request): + async def event_publisher(): + i = 0 + try: + while True: + i += 1 + yield dict(data=i) + await asyncio.sleep(0.2) + except asyncio.CancelledError as e: + _log.info(f"Disconnected from client (via refresh/close) {req.client}") + # Do any other cleanup, if any + raise e + return EventSourceResponse(event_publisher()) +``` + +## Special use cases +### Fan out Proxies +Fan out proxies usually rely on response being cacheable. To support that, you can set the value of `Cache-Control`. +For example: +```python +return EventSourceResponse( + generator(), headers={"Cache-Control": "public, max-age=29"} + ) +``` + + +## Development, Contributing +Check `Makefile` for available commands and development support, e.g. run the unit tests: +```python +make test +``` + +For integration testing you can use the provided examples in `tests` and `examples`. + +If you are using Postman, please see: https://github.com/sysid/sse-starlette/issues/47#issuecomment-1445953826 + + +## Changelog +[CHANGELOG.md](https://github.com/sysid/sse-starlette/blob/master/CHANGELOG.md) + +<!-- Badges --> + +[pypi-image]: https://badge.fury.io/py/sse-starlette.svg +[pypi-url]: https://pypi.org/project/sse-starlette/ +[build-image]: https://github.com/sysid/sse-starlette/actions/workflows/build.yml/badge.svg +[build-url]: https://github.com/sysid/sse-starlette/actions/workflows/build.yml +[coverage-image]: https://codecov.io/gh/sysid/sse-starlette/branch/master/graph/badge.svg +[coverage-url]: https://codecov.io/gh/sysid/sse-starlette + +Copyright © 2020, [sysid](https://sysid.github.io/). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +%package -n python3-sse-starlette +Summary: "SSE plugin for Starlette" +Provides: python-sse-starlette +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-sse-starlette +# Server Sent Events for [Starlette](https://github.com/encode/starlette) and [FastAPI](https://fastapi.tiangolo.com/) + +[![PyPI Version][pypi-image]][pypi-url] +[![Build Status][build-image]][build-url] +[![Code Coverage][coverage-image]][coverage-url] + +Background: https://sysid.github.io/server-sent-events/ + +Installation: + +```shell +pip install sse-starlette +``` + +Usage: + +```python +import asyncio +import uvicorn +from starlette.applications import Starlette +from starlette.routing import Route +from sse_starlette.sse import EventSourceResponse + +async def numbers(minimum, maximum): + for i in range(minimum, maximum + 1): + await asyncio.sleep(0.9) + yield dict(data=i) + +async def sse(request): + generator = numbers(1, 5) + return EventSourceResponse(generator) + +routes = [ + Route("/", endpoint=sse) +] + +app = Starlette(debug=True, routes=routes) + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8000, log_level='info') +``` + +Output: + + +**Caveat:** SSE streaming does not work in combination with [GZipMiddleware](https://github.com/encode/starlette/issues/20#issuecomment-704106436). + +Be aware that for proper server shutdown your application must stop all +running tasks (generators). Otherwise you might experience the following warnings +at shutdown: `Waiting for background tasks to complete. (CTRL+C to force quit)`. + +Client disconnects need to be handled in your Request handler (see example.py): +```python +async def endless(req: Request): + async def event_publisher(): + i = 0 + try: + while True: + i += 1 + yield dict(data=i) + await asyncio.sleep(0.2) + except asyncio.CancelledError as e: + _log.info(f"Disconnected from client (via refresh/close) {req.client}") + # Do any other cleanup, if any + raise e + return EventSourceResponse(event_publisher()) +``` + +## Special use cases +### Fan out Proxies +Fan out proxies usually rely on response being cacheable. To support that, you can set the value of `Cache-Control`. +For example: +```python +return EventSourceResponse( + generator(), headers={"Cache-Control": "public, max-age=29"} + ) +``` + + +## Development, Contributing +Check `Makefile` for available commands and development support, e.g. run the unit tests: +```python +make test +``` + +For integration testing you can use the provided examples in `tests` and `examples`. + +If you are using Postman, please see: https://github.com/sysid/sse-starlette/issues/47#issuecomment-1445953826 + + +## Changelog +[CHANGELOG.md](https://github.com/sysid/sse-starlette/blob/master/CHANGELOG.md) + +<!-- Badges --> + +[pypi-image]: https://badge.fury.io/py/sse-starlette.svg +[pypi-url]: https://pypi.org/project/sse-starlette/ +[build-image]: https://github.com/sysid/sse-starlette/actions/workflows/build.yml/badge.svg +[build-url]: https://github.com/sysid/sse-starlette/actions/workflows/build.yml +[coverage-image]: https://codecov.io/gh/sysid/sse-starlette/branch/master/graph/badge.svg +[coverage-url]: https://codecov.io/gh/sysid/sse-starlette + +Copyright © 2020, [sysid](https://sysid.github.io/). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +%package help +Summary: Development documents and examples for sse-starlette +Provides: python3-sse-starlette-doc +%description help +# Server Sent Events for [Starlette](https://github.com/encode/starlette) and [FastAPI](https://fastapi.tiangolo.com/) + +[![PyPI Version][pypi-image]][pypi-url] +[![Build Status][build-image]][build-url] +[![Code Coverage][coverage-image]][coverage-url] + +Background: https://sysid.github.io/server-sent-events/ + +Installation: + +```shell +pip install sse-starlette +``` + +Usage: + +```python +import asyncio +import uvicorn +from starlette.applications import Starlette +from starlette.routing import Route +from sse_starlette.sse import EventSourceResponse + +async def numbers(minimum, maximum): + for i in range(minimum, maximum + 1): + await asyncio.sleep(0.9) + yield dict(data=i) + +async def sse(request): + generator = numbers(1, 5) + return EventSourceResponse(generator) + +routes = [ + Route("/", endpoint=sse) +] + +app = Starlette(debug=True, routes=routes) + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8000, log_level='info') +``` + +Output: + + +**Caveat:** SSE streaming does not work in combination with [GZipMiddleware](https://github.com/encode/starlette/issues/20#issuecomment-704106436). + +Be aware that for proper server shutdown your application must stop all +running tasks (generators). Otherwise you might experience the following warnings +at shutdown: `Waiting for background tasks to complete. (CTRL+C to force quit)`. + +Client disconnects need to be handled in your Request handler (see example.py): +```python +async def endless(req: Request): + async def event_publisher(): + i = 0 + try: + while True: + i += 1 + yield dict(data=i) + await asyncio.sleep(0.2) + except asyncio.CancelledError as e: + _log.info(f"Disconnected from client (via refresh/close) {req.client}") + # Do any other cleanup, if any + raise e + return EventSourceResponse(event_publisher()) +``` + +## Special use cases +### Fan out Proxies +Fan out proxies usually rely on response being cacheable. To support that, you can set the value of `Cache-Control`. +For example: +```python +return EventSourceResponse( + generator(), headers={"Cache-Control": "public, max-age=29"} + ) +``` + + +## Development, Contributing +Check `Makefile` for available commands and development support, e.g. run the unit tests: +```python +make test +``` + +For integration testing you can use the provided examples in `tests` and `examples`. + +If you are using Postman, please see: https://github.com/sysid/sse-starlette/issues/47#issuecomment-1445953826 + + +## Changelog +[CHANGELOG.md](https://github.com/sysid/sse-starlette/blob/master/CHANGELOG.md) + +<!-- Badges --> + +[pypi-image]: https://badge.fury.io/py/sse-starlette.svg +[pypi-url]: https://pypi.org/project/sse-starlette/ +[build-image]: https://github.com/sysid/sse-starlette/actions/workflows/build.yml/badge.svg +[build-url]: https://github.com/sysid/sse-starlette/actions/workflows/build.yml +[coverage-image]: https://codecov.io/gh/sysid/sse-starlette/branch/master/graph/badge.svg +[coverage-url]: https://codecov.io/gh/sysid/sse-starlette + +Copyright © 2020, [sysid](https://sysid.github.io/). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +%prep +%autosetup -n sse-starlette-1.3.3 + +%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-sse-starlette -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3.3-1 +- Package Spec generated @@ -0,0 +1 @@ +628707c896d83c1e1bb9b5b7b0e907ad sse-starlette-1.3.3.tar.gz |