diff --git a/README.md b/README.md
index 6492ad745..f6da22b21 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,7 @@ The key features are:
+
diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml
index 4231452e4..f9bf33ae9 100644
--- a/docs/en/data/sponsors.yml
+++ b/docs/en/data/sponsors.yml
@@ -48,6 +48,9 @@ silver:
- url: https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral
title: Stainless | Generate best-in-class SDKs
img: https://fastapi.tiangolo.com/img/sponsors/stainless.png
+ - url: https://www.permit.io/blog/implement-authorization-in-fastapi?utm_source=github&utm_medium=referral&utm_campaign=fastapi
+ title: Fine-Grained Authorization for FastAPI
+ img: https://fastapi.tiangolo.com/img/sponsors/permit.png
bronze:
- url: https://www.exoflare.com/open-source/?utm_source=FastAPI&utm_campaign=open_source
title: Biosecurity risk assessments made easy.
diff --git a/docs/en/docs/img/sponsors/permit.png b/docs/en/docs/img/sponsors/permit.png
new file mode 100644
index 000000000..4f07f22e2
Binary files /dev/null and b/docs/en/docs/img/sponsors/permit.png differ
diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md
index 9dd9cc65c..d3e652d19 100644
--- a/docs/en/docs/release-notes.md
+++ b/docs/en/docs/release-notes.md
@@ -7,6 +7,15 @@ hide:
## Latest Changes
+### Translations
+
+* π Add Russian translation for `docs/ru/docs/advanced/websockets.md`. PR [#13279](https://github.com/fastapi/fastapi/pull/13279) by [@Rishat-F](https://github.com/Rishat-F).
+
+### Internal
+
+* β¬ Bump inline-snapshot from 0.18.1 to 0.19.3. PR [#13298](https://github.com/fastapi/fastapi/pull/13298) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* π§ Update sponsors, add Permit. PR [#13288](https://github.com/fastapi/fastapi/pull/13288) by [@tiangolo](https://github.com/tiangolo).
+
## 0.115.8
### Fixes
diff --git a/docs/ru/docs/advanced/websockets.md b/docs/ru/docs/advanced/websockets.md
new file mode 100644
index 000000000..bc9dfcbff
--- /dev/null
+++ b/docs/ru/docs/advanced/websockets.md
@@ -0,0 +1,186 @@
+# ΠΠ΅Π±-ΡΠΎΠΊΠ΅ΡΡ
+
+ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΡ Π² **FastAPI**.
+
+## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° `WebSockets`
+
+Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ [Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ΅Π΄Π°](../virtual-environments.md){.internal-link target=_blank} ΡΠΎΠ·Π΄Π°Π½Π°, Π°ΠΊΡΠΈΠ²ΠΈΡΡΠΉΡΠ΅ Π΅Ρ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ `websockets`:
+
+
+
+```console
+$ pip install websockets
+
+---> 100%
+```
+
+
+
+## ΠΠ»ΠΈΠ΅Π½Ρ WebSockets
+
+### Π Π°Π±ΠΎΡΠ΅Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
+
+Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π² Π²Π°ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΅ΡΡΡ ΡΡΠΎΠ½ΡΠ΅Π½Π΄, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² React, Vue.js ΠΈΠ»ΠΈ Angular.
+
+Π Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠΌ ΡΠ΅ΡΠ΅Π· Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΡ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°.
+
+Π’Π°ΠΊΠΆΠ΅ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΌΠΌΡΠ½ΠΈΡΠΈΡΡΡΡΠ΅Π΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄-ΡΠ΅ΡΠ²Π΅ΡΠ΅.
+
+ΠΠΈΠ±ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ.
+
+---
+
+ΠΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ HTML Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ JavaScript ΠΊΠΎΠ΄Π°.
+
+ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ ΡΡΠΎ Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ, ΠΈ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΡΡΠΎΠΈΡ.
+
+Π ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
ΡΡΠΎΠΈΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ².
+
+ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠΎΠ΄:
+
+{* ../../docs_src/websockets/tutorial001.py hl[2,6:38,41:43] *}
+
+## Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ `websocket`
+
+Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ `websocket` Π² ΡΠ²ΠΎΠ΅ΠΌ **FastAPI** ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
+
+{* ../../docs_src/websockets/tutorial001.py hl[1,46:47] *}
+
+/// note | Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ
+
+ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ `from starlette.websockets import WebSocket`.
+
+**FastAPI** Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ `WebSocket` ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ `WebSocket` ΠΈΠ· Starlette.
+
+///
+
+## ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
+
+Π§Π΅ΡΠ΅Π· ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠ° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
+
+{* ../../docs_src/websockets/tutorial001.py hl[48:52] *}
+
+ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅, ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΈ JSON Π΄Π°Π½Π½ΡΠ΅.
+
+## ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ
+
+ΠΡΠ»ΠΈ Π²Π°Ρ ΡΠ°ΠΉΠ» Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ `main.py`, ΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
+
+
+
+```console
+$ fastapi dev main.py
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+ΠΡΠΊΡΠΎΠΉΡΠ΅ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://127.0.0.1:8000.
+
+ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΡΠΎΡΡΠ΅Π½ΡΠΊΡΡ ΡΡΡΠ°Π½ΠΈΡΡ:
+
+
+
+ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π±ΠΈΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΡ
:
+
+
+
+Π Π²Π°ΡΠ΅ **FastAPI** ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ ΠΎΡΠ²Π΅ΡΠΈΡ:
+
+
+
+ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
+
+
+
+Π Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π²Π΅Π±-ΡΠΎΠΊΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
+
+## ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ `Depends` ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ
+
+ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ· `fastapi` ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ΅ Π²Π΅Π±ΡΠΎΠΊΠ΅ΡΠ°:
+
+* `Depends`
+* `Security`
+* `Cookie`
+* `Header`
+* `Path`
+* `Query`
+
+ΠΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ
FastAPI ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ°Ρ
/*ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ
ΠΏΡΡΠΈ*:
+
+{* ../../docs_src/websockets/tutorial002_an_py310.py hl[68:69,82] *}
+
+/// info | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
+
+Π Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ `HTTPException` Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π°. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ `WebSocketException`.
+
+ΠΠ°ΠΊΡΡΠ²Π°ΡΡΠΈΠΉ ΡΡΠ°ΡΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ· valid codes defined in the specification.
+
+///
+
+### ΠΠ΅Π±-ΡΠΎΠΊΠ΅ΡΡ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ
+
+ΠΡΠ»ΠΈ Π²Π°Ρ ΡΠ°ΠΉΠ» Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ `main.py`, ΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
+
+
+
+```console
+$ fastapi dev main.py
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+ΠΡΠΊΡΠΎΠΉΡΠ΅ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://127.0.0.1:8000.
+
+Π’Π°ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ:
+
+* "Item ID", ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΠΏΡΡΠΈ.
+* "Token", ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠ°ΠΊ query-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
+
+/// tip | ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°
+
+ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ query-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ `token` Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
+
+///
+
+Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΡ ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
+
+
+
+## ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ
+
+ΠΡΠ»ΠΈ Π²Π΅Π±-ΡΠΎΠΊΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΎ, ΡΠΎ `await websocket.receive_text()` Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ `WebSocketDisconnect`, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΠΌΠ°ΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
+
+{* ../../docs_src/websockets/tutorial003_py39.py hl[79:81] *}
+
+Π§ΡΠΎΠ±Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ:
+
+* ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π²ΠΊΠ»Π°Π΄ΠΊΠ°Ρ
Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
+* ΠΡΠΏΡΠ°Π²ΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
+* ΠΠ°ΡΠ΅ΠΌ Π·Π°ΠΊΡΠΎΠΉΡΠ΅ ΠΎΠ΄Π½Ρ ΠΈΠ· Π²ΠΊΠ»Π°Π΄ΠΎΠΊ.
+
+ΠΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ `WebSocketDisconnect`, ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅:
+
+```
+Client #1596980209979 left the chat
+```
+
+/// tip | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
+
+ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ΅ - ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π²Π΅Π±-ΡΠΎΠΊΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΌ.
+
+ΠΠΎ ΠΈΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΊΠ° ΠΎΠ½ Π°ΠΊΡΠΈΠ²Π΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
+
+ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΠΌΠΎΠ΅ Ρ FastAPI, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Redis, PostgreSQL ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ encode/broadcaster.
+
+///
+
+## ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
+
+ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ Starlette:
+
+* The `WebSocket` class.
+* Class-based WebSocket handling.
diff --git a/requirements-tests.txt b/requirements-tests.txt
index 91e7fb7aa..4a15844e4 100644
--- a/requirements-tests.txt
+++ b/requirements-tests.txt
@@ -10,7 +10,7 @@ anyio[trio] >=3.2.1,<5.0.0
PyJWT==2.8.0
pyyaml >=5.3.1,<7.0.0
passlib[bcrypt] >=1.7.2,<2.0.0
-inline-snapshot==0.18.1
+inline-snapshot==0.19.3
# types
types-ujson ==5.10.0.20240515
types-orjson ==3.6.2