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
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 15:02 +0100
2from __future__ import annotations
4from typing import TypeVar
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
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()