Name:           python-starlette
Version:        1.2.1
Release:        1
Summary:        The little ASGI library that shines

License:        BSD-3-Clause
URL:            https://www.starlette.io/
Source:         https://github.com/encode/starlette/archive/%{version}/starlette-%{version}.tar.gz
BuildArch:      noarch

BuildRequires:  python3dist(anyio) < 5~~
BuildRequires:  python3dist(anyio) >= 3.6.2
BuildRequires:  python3dist(httpx) < 0.29~~
BuildRequires:  python3dist(httpx) >= 0.27
BuildRequires:  pyproject-rpm-macros
BuildRequires:  python3-devel
BuildRequires:  python3dist(hatchling)
BuildRequires:  python3dist(itsdangerous)
BuildRequires:  python3dist(jinja2)
BuildRequires:  python3dist(packaging)
BuildRequires:  python3dist(pip) >= 19
BuildRequires:  python3dist(pytest)
BuildRequires:  python3dist(python-multipart) >= 0.0.18
BuildRequires:  python3dist(pyyaml)
BuildRequires:  python3dist(trio)
BuildRequires:  python3dist(typing-extensions)

Obsoletes:      python-starlette-doc < 0.16.0-10

%global common_description %{expand:
Starlette is a lightweight ASGI framework/toolkit, which is ideal for building
async web services in Python.

It is production-ready, and gives you the following:

  • A lightweight, low-complexity HTTP web framework.
  • WebSocket support.
  • In-process background tasks.
  • Startup and shutdown events.
  • Test client built on requests.
  • CORS, GZip, Static Files, Streaming responses.
  • Session and Cookie support.
  • 100%% test coverage.
  • 100%% type annotated codebase.
  • Few hard dependencies.
  • Compatible with asyncio and trio backends.
  • Great overall performance against independent benchmarks.}

%description %{common_description}


%package -n     python3-starlette
Summary:        %{summary}

%description -n python3-starlette %{common_description}

%prep
%autosetup -n starlette-%{version} -p1

%build
%pyproject_build

%install
%pyproject_install

%if 0
%check
# E       trio.TrioDeprecationWarning: The `cancellable=` keyword argument to
#         `trio.to_thread.run_sync` is deprecated since Trio 0.23.0; use
#         `abandon_on_cancel=` instead
#         (https://github.com/python-trio/trio/issues/2841)
warningsfilter="${warningsfilter-} -W ignore::trio.TrioDeprecationWarning"

# E       Failed: DID NOT WARN. No warnings of type (<class
#         'DeprecationWarning'>, <class 'PendingDeprecationWarning'>) were
#         emitted.
# E       The list of emitted warnings is: [].
k="${k-}${k+ and }not test_lifespan_with_on_events"

%pytest -- ${warningsfilter-} -k "${k-}" -v
%endif


%files -n python3-starlette
%license LICENSE.md
%doc README.md
%{python3_sitelib}/starlette-%{version}.dist-info/
%{python3_sitelib}/starlette


%changelog
* Mon Jun 01 2026 YangengLiu <dev01202@linx-info.com> - 1.2.1-1
- update version to 1.2.1
  * Use httpx2 for type checking in the testclient module.
  * Add assert error for requires() when request param is not Request type.
  * Support httpx2 in the test client.

* Tue May 26 2026 YangengLiu <dev01202@linx-info.com> - 1.1.0-1
- update version to 1.1.0
  * Add: Use "application/octet-stream" as the FileResponse media type fallback.
  * Fix: Only dispatch standard HTTP verbs in HTTPEndpoint.
  * Fix: Reject absolute paths in StaticFiles.lookup_path.
  * Fix: Ignore malformed Host header when constructing request.url.

* Mon Mar 23 2026 YangengLiu <dev01202@linx-info.com> - 1.0.0-1
- update version to 1.0.0
  * Track session access and modification in SessionMiddleware.
  * Handle websocket denial responses in StreamingResponse and FileResponse.
  * Use bytearray for field accumulation in FormParser.
  * Move parser.finalize() inside try/except in MultiPartParser.parse().
  * Add state generic to WebSocket.
  * Handle null bytes in StaticFiles path.
  * Use sort-based merge for Range header parsing.
  * Set Content-Type instead of Content-Range on multi-range responses.
  * Use CRLF line endings in multipart byterange boundaries.
  * Enable autoescape by default in Jinja2Templates.
  * Return explicit origin in CORS response when credentials are allowed.
  * jinja2 must now be installed to import Jinja2Templates.

* Sun Jan 25 2026 Funda Wang <fundawang@yeah.net> - 0.52.1-1
- update to 0.52.1

* Mon Dec 29 2025 Yu Peng <yupeng@kylinos.cn> - 0.50.0-1
- Upgrade to 0.50.0 
  * Drop Python 3.9 support
  * Fixed Relax strictness on Middleware type
  * Fixed Ignore if-modified-since header if if-none-match is present in StaticFiles.

* Wed Dec 03 2025 Funda Wang <fundawang@yeah.net> - 0.46.1-4
- disable test for now, as it hangs forever, need investigation.

* Tue Jul 22 2025 Dongxing Wang <dongxing.wang_a@thundersoft.com> - 0.46.1-3
- Fix CVE-2025-54121

* Thu Mar 13 2025 Ge Wang <wang__ge@126.com> - 0.46.1-2
- Remove invalid patch due to dependency updated

* Mon Mar 10 2025 Dongxing Wang <dongxing.wang_a@thundersoft.com> - 0.46.1-1
- Update package with version 0.46.1
  Fix: Allow relative directory path when follow_symlinks=True
  Add: GZipMiddleware: Make sure Vary header is always added if a response can be compressed
  Fix: Raise exception from background task on BaseHTTPMiddleware
  Fix: GZipMiddleware: Don't compress on server sent events
  Mod: MultiPartParser: Rename max_file_size to spool_max_size
  Drop Python 3.8 support
  Remove ExceptionMiddleware import proxy from starlette.exceptions module
  Remove deprecated WS_1004_NO_STATUS_RCVD and WS_1005_ABNORMAL_CLOSURE
  Add client parameter to TestClient
  Add max_part_size parameter to Request.form()
  Remove deprecated allow_redirects argument from TestClient
  Make UUID path parameter conversion more flexible
  Raise ClientDisconnect on StreamingResponse

* Wed Dec 04 2024 Dongxing Wang <dongxing.wang_a@thundersoft.com> - 0.41.3-1
- Package init