io-adapters 0.2.1__py3-none-any.whl → 0.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
io_adapters/_adapters.py CHANGED
@@ -165,13 +165,13 @@ class FakeAdapter(IoAdapter):
165
165
  self.guid_fn = self.guid_fn or fake_guid
166
166
  self.datetime_fn = self.datetime_fn or fake_datetime
167
167
 
168
- def _read_fn(self, path: str) -> Data:
168
+ def _read_fn(self, path: str | Path) -> Data:
169
169
  try:
170
- return self.files[path]
170
+ return self.files[str(path)]
171
171
  except KeyError as e:
172
172
  raise FileNotFoundError(f"{path = } {self.files = }") from e
173
173
 
174
- def _write_fn(self, data: Data, path: str) -> None:
174
+ def _write_fn(self, data: Data, path: str | Path) -> None:
175
175
  self.files[str(path)] = data
176
176
 
177
177
  def get_guid(self) -> str:
io_adapters/_container.py CHANGED
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  from collections.abc import Callable, Hashable, Iterable
5
5
  from enum import Enum, auto
6
+ from typing import TypeAlias
6
7
 
7
8
  import attrs
8
9
  from attrs.validators import deep_iterable, instance_of
@@ -18,6 +19,9 @@ class _FnType(Enum):
18
19
  WRITE = auto()
19
20
 
20
21
 
22
+ DomainFns: TypeAlias = dict[Hashable, dict[Hashable, Callable]]
23
+
24
+
21
25
  @attrs.define
22
26
  class Container:
23
27
  """Registry and factory for domain-scoped I/O adapters.
@@ -92,10 +96,12 @@ class Container:
92
96
  """
93
97
 
94
98
  domains: Iterable = attrs.field(validator=deep_iterable(member_validator=instance_of(Hashable)))
95
- domain_fns: dict[Hashable, dict[Hashable, Callable]] = attrs.field(init=False)
99
+ domain_fns: DomainFns = attrs.field(init=False)
96
100
 
97
101
  def __attrs_post_init__(self) -> None:
98
- self.domain_fns = {domain: {_FnType.READ: {}, _FnType.WRITE: {}} for domain in self.domains}
102
+ self.domain_fns: DomainFns = {
103
+ domain: {_FnType.READ: {}, _FnType.WRITE: {}} for domain in self.domains
104
+ }
99
105
 
100
106
  def add_domain(self, domain: Hashable) -> None:
101
107
  """Add a domain to a ``Container``
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: io-adapters
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Dependency Injection Adapters
5
5
  Author: ed cuss
6
6
  Author-email: ed cuss <edcussmusic@gmail.com>
@@ -109,7 +109,7 @@ orders_adapter: RealAdapter = get_real_adapter("orders")
109
109
  some_usecase(orders_adapter, "some/path/to/file.json")
110
110
 
111
111
 
112
- # in testing inject the fake which has all the same funcitonality as the
112
+ # in testing inject the fake which has all the same funcitonality as the
113
113
  # `RealAdapter` and assert that the fakes end state is as expected
114
114
  fake = get_fake_adapter("orders")
115
115
  some_usecase(fake, "some/path/to/file.json")
@@ -147,4 +147,4 @@ assert fake.files["some/path/to/file.json"] == {"a": 1}
147
147
  ├── ruff.toml
148
148
  └── uv.lock
149
149
  ::
150
- ```
150
+ ```
@@ -0,0 +1,10 @@
1
+ io_adapters/__init__.py,sha256=JyM0fz-TbX3ZCEzPhZvCAgte2v-BQxKWt5T-qgcocd4,650
2
+ io_adapters/_adapters.py,sha256=LSqs9yb0EHfRyMpUzsdON4SKJQ8lHt4Yi-AiugDRC6I,6528
3
+ io_adapters/_clock.py,sha256=FxUFp7sywKf0Uf7SXKibr4yR12NTk6PIX_tT-quyD7A,379
4
+ io_adapters/_container.py,sha256=Gs6JWq4PmzvIkdBvYvjZo4H5NW8pSFj-Yu2_WXgVQaE,12619
5
+ io_adapters/_io_funcs.py,sha256=97SDB3q7Tubq6I5wS2i-Xyb9B1DB5MBb-hgEDJn5o5U,550
6
+ io_adapters/_registries.py,sha256=34CSxXRdvFOFQw5nV4lGHesWgC7tVsZEKCnUrOCossc,2221
7
+ io_adapters-0.2.2.dist-info/licenses/LICENSE,sha256=7321ebiNd4ATjHjk_6YB5ezxazPBuczZ3UCuzfgpl7o,1101
8
+ io_adapters-0.2.2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
9
+ io_adapters-0.2.2.dist-info/METADATA,sha256=U-Q5Kf36iQXeSKMtLHCBiSOTHjilSkbig-YJPPeweB8,3995
10
+ io_adapters-0.2.2.dist-info/RECORD,,
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
@@ -1,10 +0,0 @@
1
- io_adapters/__init__.py,sha256=JyM0fz-TbX3ZCEzPhZvCAgte2v-BQxKWt5T-qgcocd4,650
2
- io_adapters/_adapters.py,sha256=XMIOlOZRZjjY_bn8NMFFpxQd3UGIBm6pw02fGk-hDik,6509
3
- io_adapters/_clock.py,sha256=FxUFp7sywKf0Uf7SXKibr4yR12NTk6PIX_tT-quyD7A,379
4
- io_adapters/_container.py,sha256=ZPBakwjt_sQGXVBRtJlSOK7h3XkrriJNR99vA0KOBVE,12522
5
- io_adapters/_io_funcs.py,sha256=97SDB3q7Tubq6I5wS2i-Xyb9B1DB5MBb-hgEDJn5o5U,550
6
- io_adapters/_registries.py,sha256=34CSxXRdvFOFQw5nV4lGHesWgC7tVsZEKCnUrOCossc,2221
7
- io_adapters-0.2.1.dist-info/licenses/LICENSE,sha256=BtuEJkbK2vpLNEA_nj9jWNwdP9KXrfC9MLjgMuHC2ns,1100
8
- io_adapters-0.2.1.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
9
- io_adapters-0.2.1.dist-info/METADATA,sha256=FJ1mY3nJD6miDQeJBsvdIJQY_jtMLuF-MSAkN9faCtk,3995
10
- io_adapters-0.2.1.dist-info/RECORD,,