Skip to content

Commit

Permalink
🏗️ Move injection to lidipy
Browse files Browse the repository at this point in the history
  • Loading branch information
AlTosterino committed Jun 16, 2023
1 parent 5e23f62 commit e6ca59a
Show file tree
Hide file tree
Showing 13 changed files with 60 additions and 70 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -173,4 +173,6 @@ poetry.toml
# LSP config files
pyrightconfig.json

# End of https://www.toptal.com/developers/gitignore/api/python
# End of https://www.toptal.com/developers/gitignore/api/python

docs/adr
17 changes: 7 additions & 10 deletions poetry.lock

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

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ typer = "^0.7.0"
loguru = "^0.7.0"
rich = "^13.3.3"
mako = "^1.2.4"
injector = "^0.20.1"
lidipy = "^0.1.1"

[tool.poetry.group.dev.dependencies]
black = "^23.3.0"
Expand Down
3 changes: 3 additions & 0 deletions src/adrpy/entrypoints/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from adrpy.injection import setup_injection

setup_injection()
10 changes: 4 additions & 6 deletions src/adrpy/entrypoints/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from typing import Optional

import typer
from adrpy.injection import injector
from adrpy.injection import lidi
from adrpy.shared_kernel.dtos import CreateADRDTO, InitializeADRDTO
from adrpy.shared_kernel.settings import Settings
from adrpy.use_cases.creating import CreatingADR
Expand All @@ -26,10 +26,9 @@ def init(
"""
if path:
new_settings = Settings(initial_adr_dir=path)
injector.binder.bind(Settings, to=new_settings)
use_case = injector.get(InitializingADR)
lidi.bind(Settings, new_settings, singleton=True)
dto = InitializeADRDTO(path=path)
use_case.execute(dto=dto)
InitializingADR().execute(dto=dto)


@app.command()
Expand All @@ -41,9 +40,8 @@ def new(
"""
Create new ADR with given NAME
"""
use_case = injector.get(CreatingADR)
dto = CreateADRDTO(name=name)
use_case.execute(dto=dto)
CreatingADR().execute(dto=dto)


def cli_entrypoint() -> None:
Expand Down
14 changes: 8 additions & 6 deletions src/adrpy/injection/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from adrpy.injection.modules import RepositoryModules, ServiceModules
from adrpy.injection.settings import configure_settings
from injector import Inject as Inject_Injector
from injector import Injector
from adrpy.injection.modules import bind_modules
from adrpy.injection.settings import bind_settings
from lidipy import Lidi

injector = Injector((configure_settings, RepositoryModules(), ServiceModules()))
lidi = Lidi()

Inject = Inject_Injector

def setup_injection() -> None:
bind_settings(lidi)
bind_modules(lidi)
23 changes: 6 additions & 17 deletions src/adrpy/injection/modules.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,11 @@
from adrpy.repositories.adr.base import BaseADRRepository
from adrpy.repositories.adr.repository import ADRFileRepository
from adrpy.services.template.base import BaseTemplateService
from adrpy.services.template.service import MakoTemplateService
from adrpy.shared_kernel.settings import Settings
from injector import Module, provider, singleton
from lidipy import Lidi


class RepositoryModules(Module):
@singleton
@provider
def provide_adr_repository(self, settings: Settings) -> BaseADRRepository:
from adrpy.repositories.adr.repository import ADRFileRepository

return ADRFileRepository(settings=settings)


class ServiceModules(Module):
@singleton
@provider
def provide_template_service(self) -> BaseTemplateService:
from adrpy.services.template.service import MakoTemplateService

return MakoTemplateService()
def bind_modules(lidi: Lidi) -> None:
lidi.bind(BaseADRRepository, ADRFileRepository(settings=lidi.resolve(Settings)))
lidi.bind(BaseTemplateService, MakoTemplateService())
6 changes: 3 additions & 3 deletions src/adrpy/injection/settings.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from adrpy.shared_kernel.settings import Settings
from injector import Binder, singleton
from lidipy import Lidi


def configure_settings(binder: Binder) -> None:
binder.bind(Settings, to=Settings(), scope=singleton)
def bind_settings(lidi: Lidi) -> None:
lidi.bind(Settings, Settings(), singleton=True)
3 changes: 1 addition & 2 deletions src/adrpy/repositories/adr/repository.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import re

from adrpy.injection import Inject
from adrpy.repositories.adr.base import BaseADRRepository
from adrpy.shared_kernel.settings import Settings
from adrpy.shared_kernel.value_objects.template import RenderedTemplate, Template


class ADRFileRepository(BaseADRRepository):
def __init__(self, settings: Inject[Settings]) -> None:
def __init__(self, settings: Settings) -> None:
self.settings = settings

def get_template(self, name: str) -> Template:
Expand Down
6 changes: 3 additions & 3 deletions src/adrpy/use_cases/creating.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from dataclasses import dataclass
from datetime import datetime

from adrpy.injection import Inject
from adrpy.injection import lidi
from adrpy.repositories.adr.base import BaseADRRepository
from adrpy.services.template.base import BaseTemplateService
from adrpy.shared_kernel.dtos import CreateADRDTO


@dataclass
class CreatingADR:
template_service: Inject[BaseTemplateService]
adr_repository: Inject[BaseADRRepository]
template_service = lidi.resolve(BaseTemplateService)
adr_repository = lidi.resolve(BaseADRRepository)

def execute(self, dto: CreateADRDTO) -> None:
template = self.adr_repository.get_template(name=dto.adr_template_name)
Expand Down
8 changes: 4 additions & 4 deletions src/adrpy/use_cases/initializing.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dataclasses import dataclass, field
from datetime import datetime

from adrpy.injection import Inject
from adrpy.injection import lidi
from adrpy.repositories.adr.base import BaseADRRepository
from adrpy.services.template.base import BaseTemplateService
from adrpy.shared_kernel.dtos import InitializeADRDTO
Expand All @@ -10,9 +10,9 @@

@dataclass
class InitializingADR:
template_service: Inject[BaseTemplateService]
file_service: Inject[BaseADRRepository]
settings: Inject[Settings]
template_service = lidi.resolve(BaseTemplateService)
file_service = lidi.resolve(BaseADRRepository)
settings = lidi.resolve(Settings)
INITIAL_ADR_NAME: str = field(init=False, default="0001-record-architecture-decisions")

def execute(self, dto: InitializeADRDTO) -> None:
Expand Down
12 changes: 6 additions & 6 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from typing import cast

import pytest
from injector import Injector
from adrpy.injection import setup_injection
from lidipy import Lidi


@pytest.fixture
def injector() -> Injector:
from adrpy.injection import injector
def lidi() -> Lidi:
from adrpy.injection import lidi

return cast(Injector, injector)
setup_injection()
yield lidi
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@
from adrpy.shared_kernel.constants import AppTemplates
from adrpy.shared_kernel.settings import Settings
from adrpy.shared_kernel.value_objects.template import RenderedTemplate
from injector import Injector
from lidipy import Lidi

TEST_DIRECTORY = Path(__file__).parent / "testdir"
TEST_FILENAME = "testfile"
TEST_FILENAME_WITH_EXTENSION = "testfile.md"


@pytest.fixture()
def repo_service(injector: Injector) -> Iterator[BaseADRRepository]:
original_repo = injector.get(BaseADRRepository)
original_settings = injector.get(Settings)
def repo_service(lidi: Lidi) -> Iterator[BaseADRRepository]:
original_repo = lidi.resolve(BaseADRRepository)
original_settings = lidi.resolve(Settings)
new_settings = Settings(initial_adr_dir=TEST_DIRECTORY)
injector.binder.bind(BaseADRRepository, to=ADRFileRepository(settings=new_settings))
yield injector.get(BaseADRRepository)
injector.binder.bind(BaseADRRepository, to=original_repo)
injector.binder.bind(Settings, to=original_settings)
lidi.bind(BaseADRRepository, ADRFileRepository(settings=new_settings))
yield lidi.resolve(BaseADRRepository)
lidi.bind(BaseADRRepository, original_repo)
lidi.bind(Settings, original_settings)


@pytest.fixture(scope="module", autouse=True)
Expand Down Expand Up @@ -55,15 +55,15 @@ def test_should_get_template_file(repo_service: BaseADRRepository) -> None:
assert template.content


def test_should_create_file_in_nested_directories(injector: Injector) -> None:
def test_should_create_file_in_nested_directories(lidi: Lidi) -> None:
# Given
nested_dir = TEST_DIRECTORY / "nested1" / "nested2"
new_settings = Settings(initial_adr_dir=nested_dir)
injector.binder.bind(BaseADRRepository, ADRFileRepository(settings=new_settings))
lidi.bind(BaseADRRepository, ADRFileRepository(settings=new_settings))
rendered_template = RenderedTemplate(name=TEST_FILENAME, content="TEST_CONTENT")

# When
injector.get(BaseADRRepository).create(
lidi.resolve(BaseADRRepository).create(
adr_name=rendered_template.name, template=rendered_template
)

Expand Down

0 comments on commit e6ca59a

Please sign in to comment.