Skip to content

Attr getter works only with zero nested level #56

@nightblure

Description

@nightblure

Hey!

I found some problem in attr getter. It lies in the fact that it does not know how to work with nested attributes. Just look at some tests below and you'll understand what we're talking about.


from dataclasses import dataclass, field

import pytest

from that_depends import providers


@dataclass
class Nested2:
    some_const = 144


@dataclass
class Nested1:
    nested2_attr: Nested2 = field(default_factory=Nested2)


@dataclass
class Settings:
    some_str_value: str = 'some_string_value'
    some_int_value: int = 3453621
    nested1_attr: Nested1 = field(default_factory=Nested1)


@pytest.fixture
def some_settings_provider() -> providers.Singleton:
    provider = providers.Singleton(Settings)
    return provider


# WORKS
def test_attr_getter_with_zero_attribute_depth(some_settings_provider):
    attr_getter = some_settings_provider.some_str_value
    assert attr_getter.sync_resolve() == Settings().some_str_value


# DOESNT WORKS BECAUSE Settings HAS NESTED OBJECTS AND ATTRIBUTES
def test_attr_getter_with_more_than_zero_attribute_depth(some_settings_provider):
    attr_getter = some_settings_provider.nested1_attr.nested2_attr.some_const
    assert attr_getter.sync_resolve() == Nested2().some_const

I think I can fix this if you want these cases to work

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions