Home / File/ test_dependency_after_yield_websockets.py — fastapi Source File

test_dependency_after_yield_websockets.py — fastapi Source File

Architecture documentation for test_dependency_after_yield_websockets.py, a python file in the fastapi codebase. 6 imports, 0 dependents.

File python FastAPI Applications 6 imports 7 functions 1 classes

Entity Profile

Dependency Diagram

graph LR
  662ee8fe_329a_6745_2010_7cced1c15c84["test_dependency_after_yield_websockets.py"]
  07d79a2e_d4e9_0bbb_be90_936274444c8c["collections.abc"]
  662ee8fe_329a_6745_2010_7cced1c15c84 --> 07d79a2e_d4e9_0bbb_be90_936274444c8c
  a88eb002_9197_73f3_410d_ee5315767f34["contextlib"]
  662ee8fe_329a_6745_2010_7cced1c15c84 --> a88eb002_9197_73f3_410d_ee5315767f34
  0dda2280_3359_8460_301c_e98c77e78185["typing"]
  662ee8fe_329a_6745_2010_7cced1c15c84 --> 0dda2280_3359_8460_301c_e98c77e78185
  5befe8bf_65d1_d058_6b78_4a597a8488e9["pytest"]
  662ee8fe_329a_6745_2010_7cced1c15c84 --> 5befe8bf_65d1_d058_6b78_4a597a8488e9
  534f6e44_61b8_3c38_8b89_6934a6df9802["__init__.py"]
  662ee8fe_329a_6745_2010_7cced1c15c84 --> 534f6e44_61b8_3c38_8b89_6934a6df9802
  a7c04dee_ee23_5891_b185_47ff6bed036d["testclient.py"]
  662ee8fe_329a_6745_2010_7cced1c15c84 --> a7c04dee_ee23_5891_b185_47ff6bed036d
  style 662ee8fe_329a_6745_2010_7cced1c15c84 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

from collections.abc import Generator
from contextlib import contextmanager
from typing import Annotated, Any

import pytest
from fastapi import Depends, FastAPI, WebSocket
from fastapi.testclient import TestClient


class Session:
    def __init__(self) -> None:
        self.data = ["foo", "bar", "baz"]
        self.open = True

    def __iter__(self) -> Generator[str, None, None]:
        for item in self.data:
            if self.open:
                yield item
            else:
                raise ValueError("Session closed")


@contextmanager
def acquire_session() -> Generator[Session, None, None]:
    session = Session()
    try:
        yield session
    finally:
        session.open = False


def dep_session() -> Any:
    with acquire_session() as s:
        yield s


def broken_dep_session() -> Any:
    with acquire_session() as s:
        s.open = False
        yield s


SessionDep = Annotated[Session, Depends(dep_session)]
BrokenSessionDep = Annotated[Session, Depends(broken_dep_session)]

app = FastAPI()


@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket, session: SessionDep):
    await websocket.accept()
    for item in session:
        await websocket.send_text(f"{item}")


@app.websocket("/ws-broken")
async def websocket_endpoint_broken(websocket: WebSocket, session: BrokenSessionDep):
    await websocket.accept()
    for item in session:
        await websocket.send_text(f"{item}")  # pragma no cover


client = TestClient(app)


def test_websocket_dependency_after_yield():
    with client.websocket_connect("/ws") as websocket:
        data = websocket.receive_text()
        assert data == "foo"
        data = websocket.receive_text()
        assert data == "bar"
        data = websocket.receive_text()
        assert data == "baz"


def test_websocket_dependency_after_yield_broken():
    with pytest.raises(ValueError, match="Session closed"):
        with client.websocket_connect("/ws-broken"):
            pass  # pragma no cover

Domain

Subdomains

Classes

Dependencies

Frequently Asked Questions

What does test_dependency_after_yield_websockets.py do?
test_dependency_after_yield_websockets.py is a source file in the fastapi codebase, written in python. It belongs to the FastAPI domain, Applications subdomain.
What functions are defined in test_dependency_after_yield_websockets.py?
test_dependency_after_yield_websockets.py defines 7 function(s): acquire_session, broken_dep_session, dep_session, test_websocket_dependency_after_yield, test_websocket_dependency_after_yield_broken, websocket_endpoint, websocket_endpoint_broken.
What does test_dependency_after_yield_websockets.py depend on?
test_dependency_after_yield_websockets.py imports 6 module(s): __init__.py, collections.abc, contextlib, pytest, testclient.py, typing.
Where is test_dependency_after_yield_websockets.py in the architecture?
test_dependency_after_yield_websockets.py is located at tests/test_dependency_after_yield_websockets.py (domain: FastAPI, subdomain: Applications, directory: tests).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free