Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
ci:
strategy:
matrix:
python-version: ["3.12", "3.13", "3.14"]
python-version: ["3.12", "3.13", "3.14", "3.14t"]

name: Continuous Integration ・ Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
Expand Down
42 changes: 42 additions & 0 deletions tests/test_inject.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from abc import ABC, abstractmethod
from concurrent.futures import Future, ThreadPoolExecutor
from dataclasses import dataclass
from typing import Annotated, Any, Optional, TypeVar, Union

import anyio
import pytest

from injection import inject, injectable
Expand Down Expand Up @@ -294,3 +296,43 @@ def function(a: A): ...

function()
assert module.is_locked

async def test_inject_with_async_singleton(self, module):
class Dependency: ...

@module.singleton
async def dependency_factory() -> Dependency:
await anyio.sleep(0)
return Dependency()

instances = []

@module.inject
async def append_dependency(dependency: Dependency):
instances.append(dependency)

async with anyio.create_task_group() as task_group:
for _ in range(100):
task_group.start_soon(append_dependency)

reference = instances[0]
for instance in instances:
assert instance is reference

def test_inject_with_threadsafe(self, module):
@module.singleton
class Dependency: ...

@module.inject(threadsafe=True)
def get_dependency(dependency: Dependency) -> Dependency:
return dependency

futures: list[Future[Dependency]] = []

with ThreadPoolExecutor() as executor:
for _ in range(100):
futures.append(executor.submit(get_dependency))

reference = futures[0].result()
for future in futures:
assert future.result() is reference
50 changes: 25 additions & 25 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading