Coverage for arclith / infrastructure / repository_factory.py: 100%

23 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-25 15:02 +0100

1 

2from __future__ import annotations 

3 

4from typing import TypeVar 

5 

6from arclith.domain.models.entity import Entity 

7from arclith.domain.ports.logger import Logger 

8from arclith.domain.ports.repository import Repository 

9from arclith.infrastructure.config import AppConfig 

10 

11T = TypeVar("T", bound=Entity) 

12def build_repository(config: AppConfig, entity_class: type[T], logger: Logger) -> Repository[T]: 

13 match config.adapters.repository: 

14 case "mongodb": 

15 from arclith.adapters.output.mongodb.config import MongoDBConfig 

16 from arclith.adapters.output.mongodb.repository import MongoDBRepository 

17 mongo = config.adapters.mongodb 

18 assert mongo is not None 

19 return MongoDBRepository( 

20 MongoDBConfig(uri=mongo.uri, db_name=mongo.db_name, collection_name=mongo.collection_name), 

21 entity_class, logger, 

22 ) 

23 case "duckdb": 

24 from arclith.adapters.output.duckdb.repository import DuckDBRepository 

25 duckdb_cfg = config.adapters.duckdb 

26 assert duckdb_cfg is not None 

27 return DuckDBRepository(duckdb_cfg.path, entity_class) 

28 case _: 

29 from arclith.adapters.output.memory.repository import InMemoryRepository 

30 return InMemoryRepository()