Metadata-Version: 2.4
Name: katso
Version: 0.6.1
Author-email: Antti Hautaniemi <antti.hautaniemi@me.com>
License: MIT
Project-URL: Repository, https://github.com/an7oine/katso.git
Requires-Python: >=3.11
Description-Content-Type: text/markdown

katso
=====

```python
# lib/am.py

from dataclasses import dataclass
from typing import Optional

import katso

with katso:
  from lib import am, bm
assert isinstance(bm.B, str)


@dataclass(kw_only=True)
class A:
  a: int
  b: Optional[bm.B] = None

  @property
  def _b(self: am.A) -> bm.B:
    assert isinstance(self, am.A)
    assert isinstance(bm.B, type)
    return bm.B(a=self, b=str(self.a))


# lib/bm.py

from dataclasses import dataclass
from typing import Optional

import katso

with katso:
  from lib import am


@dataclass(kw_only=True)
class B:
  a: Optional[am.A] = None
  b: str


# bin/cm.py

from dataclasses import dataclass

from lib import am, bm


@dataclass
class C:
  a: am.A
  b: bm.B

  def __post_init__(self):
    self.a.b = self.b
    self.b.a = self.a
    # def __init__

  # class C


c = C(am.A(a=42), bm.B(b='spam'))
assert str(c) == "C(a=A(a=42, b=B(a=..., b='spam')), b=B(a=A(a=42, b=...), b='spam'))"

assert isinstance(am.A(a=42)._b, bm.B)
assert str(am.A(a=42)._b) == "B(a=A(a=42, b=None), b='42')"
