summaryrefslogtreecommitdiff
path: root/python-sse-starlette.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-sse-starlette.spec')
-rw-r--r--python-sse-starlette.spec460
1 files changed, 460 insertions, 0 deletions
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:
+![output](output.png)
+
+**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:
+![output](output.png)
+
+**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:
+![output](output.png)
+
+**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