Skip to content

Commit 0a1a401

Browse files
committed
Remove ABC's
1 parent 5fd05d3 commit 0a1a401

File tree

5 files changed

+50
-139
lines changed

5 files changed

+50
-139
lines changed

aws_doc_sdk_examples_tools/lliam/adapters/repository.py

Lines changed: 28 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import abc
22
from itertools import islice
33
from pathlib import Path
4-
from typing import Any, Generator, Iterable, List, Tuple
4+
from typing import Any, Dict, Generator, Iterable, List, Tuple
55

66
from aws_doc_sdk_examples_tools.doc_gen import DocGen, Example
7-
from aws_doc_sdk_examples_tools.fs import Fs, PathFs
7+
from aws_doc_sdk_examples_tools.fs import Fs, PathFs
88
from aws_doc_sdk_examples_tools.lliam.domain.model import Prompt
99
from aws_doc_sdk_examples_tools.lliam.shared_constants import BATCH_PREFIX
1010

@@ -23,113 +23,68 @@ def batched(iterable: Iterable, n: int) -> Generator[Tuple, Any, None]:
2323
yield batch
2424

2525

26-
class AbstractPromptRepository(abc.ABC):
27-
def __init__(self):
28-
self.to_write = {}
29-
30-
def add(self, prompt: Prompt):
31-
self._add(prompt)
32-
33-
def all_all(self, prompts: List[Prompt]):
34-
for prompt in prompts:
35-
self._add(prompt)
36-
37-
def batch(self, prompts: List[Prompt]):
38-
self._batch(prompts)
39-
40-
def commit(self):
41-
self._commit()
42-
43-
def get(self, id: str) -> Prompt:
44-
prompt = self._get(id)
45-
return prompt
46-
47-
def get_all(self, ids: List[str]) -> List[Prompt]:
48-
prompts = []
49-
for id in ids:
50-
prompt = self._get(id)
51-
prompts.append(prompt)
52-
return prompts
53-
54-
def set_partition(self, name: str):
55-
self.partition_name = name
56-
57-
@property
58-
def partition(self):
59-
return self.partition_name or ""
26+
class FsPromptRepository:
27+
to_write: Dict[str, str] = {}
6028

61-
@abc.abstractmethod
62-
def _add(self, product: Prompt):
63-
raise NotImplementedError
64-
65-
@abc.abstractmethod
66-
def _batch(self, prompts: List[Prompt]):
67-
raise NotImplementedError
68-
69-
@abc.abstractmethod
70-
def _commit(self):
71-
raise NotImplementedError
72-
73-
@abc.abstractmethod
74-
def _get(self, id: str) -> Prompt:
75-
raise NotImplementedError
76-
77-
78-
class FsPromptRepository(AbstractPromptRepository):
7929
def __init__(self, fs: Fs = PathFs()):
80-
super().__init__()
8130
self.fs = fs
8231

8332
def rollback(self):
8433
# TODO: This is not what rollback is for. We should be rolling back any
8534
# file changes
8635
self.to_write = {}
8736

88-
def _add(self, prompt: Prompt):
37+
def add(self, prompt: Prompt):
8938
self.to_write[prompt.id] = prompt.content
9039

91-
def _batch(self, prompts: List[Prompt]):
40+
def all_all(self, prompts: List[Prompt]):
41+
for prompt in prompts:
42+
self.add(prompt)
43+
44+
def batch(self, prompts: List[Prompt]):
9245
for batch_num, batch in enumerate(batched(prompts, DEFAULT_BATCH_SIZE)):
9346
batch_name = f"{BATCH_PREFIX}{(batch_num + 1):03}"
9447
for prompt in batch:
9548
prompt.id = f"{batch_name}/{prompt.id}"
96-
self._add(prompt)
49+
self.add(prompt)
9750

98-
def _commit(self):
99-
base_path = (
100-
Path(self.partition) if self.partition else Path(".")
101-
)
51+
def commit(self):
52+
base_path = Path(self.partition) if self.partition else Path(".")
10253

10354
for file_path, content in self.to_write.items():
10455
if content:
10556
full_path = base_path / file_path
10657
self.fs.mkdir(full_path.parent)
10758
self.fs.write(full_path, content)
10859

109-
def _get(self, id: str):
60+
def get(self, id: str):
11061
return Prompt(id, self.fs.read(Path(id)))
11162

63+
def get_all(self, ids: List[str]) -> List[Prompt]:
64+
prompts = []
65+
for id in ids:
66+
prompt = self.get(id)
67+
prompts.append(prompt)
68+
return prompts
11269

113-
class AbstractDocGenRepository(abc.ABC):
114-
def get_new_prompts(self, doc_gen_root: str) -> List[Prompt]:
115-
return self._get_new_prompts(doc_gen_root)
70+
def set_partition(self, name: str):
71+
self.partition_name = name
11672

117-
@abc.abstractmethod
118-
def _get_new_prompts(self, doc_gen_root: str) -> List[Prompt]:
119-
raise NotImplementedError
73+
@property
74+
def partition(self):
75+
return self.partition_name or ""
12076

12177

122-
class FsDocGenRepository(AbstractDocGenRepository):
78+
class FsDocGenRepository:
12379
def __init__(self, fs: Fs = PathFs()):
124-
super().__init__()
12580
self.fs = fs
126-
81+
12782
def rollback(self):
12883
# TODO: This is not what rollback is for. We should be rolling back any
12984
# file changes
13085
self._doc_gen = None
13186

132-
def _get_new_prompts(self, doc_gen_root: str) -> List[Prompt]:
87+
def get_new_prompts(self, doc_gen_root: str) -> List[Prompt]:
13388
# Right now this is the only instance of DocGen used in this Repository,
13489
# but if that changes we need to move it up.
13590
self._doc_gen = DocGen.from_root(Path(doc_gen_root), fs=self.fs)

aws_doc_sdk_examples_tools/lliam/domain/commands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Command:
99

1010
@dataclass
1111
class CreatePrompts(Command):
12-
doc_gen_root: str
12+
doc_gen_root: str
1313
system_prompts: List[str]
1414
out_dir: str
1515

aws_doc_sdk_examples_tools/lliam/service_layer/create_prompts.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
from aws_doc_sdk_examples_tools.lliam.domain.operations import build_ailly_config
44
from aws_doc_sdk_examples_tools.lliam.domain.commands import CreatePrompts
5-
from aws_doc_sdk_examples_tools.lliam.service_layer.unit_of_work import (
6-
AbstractUnitOfWork,
7-
)
5+
from aws_doc_sdk_examples_tools.lliam.service_layer.unit_of_work import FsUnitOfWork
86

97
logger = logging.getLogger(__name__)
108

119

12-
def create_prompts(cmd: CreatePrompts, uow: AbstractUnitOfWork):
10+
def create_prompts(cmd: CreatePrompts, uow: FsUnitOfWork):
1311
with uow:
1412
system_prompts = uow.prompts.get_all(cmd.system_prompts)
1513
ailly_config = build_ailly_config(system_prompts)
Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,28 @@
1-
import abc
2-
1+
from aws_doc_sdk_examples_tools.fs import Fs
32
from aws_doc_sdk_examples_tools.lliam.adapters.repository import (
4-
AbstractPromptRepository,
5-
AbstractDocGenRepository,
63
FsPromptRepository,
74
FsDocGenRepository,
85
)
96

107

11-
class AbstractUnitOfWork(abc.ABC):
12-
prompts: AbstractPromptRepository
13-
doc_gen: AbstractDocGenRepository
8+
class FsUnitOfWork:
9+
def __init__(self, fs: Fs):
10+
self.fs = fs
1411

15-
def __enter__(self) -> "AbstractUnitOfWork":
16-
return self
12+
def __enter__(self):
13+
self.prompts = FsPromptRepository(fs=self.fs)
14+
self.doc_gen = FsDocGenRepository(fs=self.fs)
1715

1816
def __exit__(self, *args):
1917
self.rollback()
2018

2119
def commit(self):
22-
self._commit()
20+
self.prompts.commit()
2321

2422
def collect_new_prompts(self):
2523
for prompt in self.prompts.seen:
2624
yield prompt
2725

28-
@abc.abstractmethod
29-
def _commit(self):
30-
raise NotImplementedError
31-
32-
@abc.abstractmethod
33-
def rollback(self):
34-
raise NotImplementedError
35-
36-
37-
class FsUnitOfWork(AbstractUnitOfWork):
38-
39-
def __enter__(self):
40-
self.prompts = FsPromptRepository()
41-
self.doc_gen = FsDocGenRepository()
42-
return super().__enter__()
43-
44-
def __exit__(self, *args):
45-
super().__exit__(*args)
46-
47-
def _commit(self):
48-
self.prompts.commit()
49-
5026
def rollback(self):
5127
self.prompts.rollback()
5228
self.doc_gen.rollback()

aws_doc_sdk_examples_tools/lliam/test/services_test.py

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,23 @@
33
from aws_doc_sdk_examples_tools.fs import Fs, RecordFs
44
from aws_doc_sdk_examples_tools.lliam.domain.commands import CreatePrompts
55
from aws_doc_sdk_examples_tools.lliam.service_layer.create_prompts import create_prompts
6-
from aws_doc_sdk_examples_tools.lliam.service_layer.unit_of_work import AbstractUnitOfWork
7-
from aws_doc_sdk_examples_tools.lliam.adapters.repository import (
8-
FsPromptRepository,
9-
FsDocGenRepository,
10-
)
11-
12-
13-
class FakeUnitOfWork(AbstractUnitOfWork):
14-
def __init__(self, fs: Fs):
15-
self.prompts = FsPromptRepository(fs=fs)
16-
self.doc_gen = FsDocGenRepository(fs=fs)
17-
self.committed = False
18-
19-
def _commit(self):
20-
self.committed = True
21-
self.prompts.commit()
22-
23-
def rollback(self):
24-
self.committed = False
25-
self.prompts.rollback()
26-
self.doc_gen.rollback()
6+
from aws_doc_sdk_examples_tools.lliam.service_layer.unit_of_work import FsUnitOfWork
277

288

299
def test_create_prompts_writes_when_commit_called():
3010
"""Test that create_prompts successfully writes prompts when commit is called."""
31-
fs = RecordFs({
32-
Path("system1.md"): "System prompt 1 content",
33-
Path("system2.md"): "System prompt 2 content",
34-
Path("fake/doc_gen_root"): ""
35-
})
36-
uow = FakeUnitOfWork(fs=fs)
11+
fs = RecordFs(
12+
{
13+
Path("system1.md"): "System prompt 1 content",
14+
Path("system2.md"): "System prompt 2 content",
15+
Path("fake/doc_gen_root"): "",
16+
}
17+
)
18+
uow = FsUnitOfWork(fs=fs)
3719
cmd = CreatePrompts(
3820
doc_gen_root="fake/doc_gen_root",
3921
system_prompts=["system1.md", "system2.md"],
40-
out_dir="/fake/output"
22+
out_dir="/fake/output",
4123
)
4224

4325
create_prompts(cmd, uow)
@@ -47,4 +29,4 @@ def test_create_prompts_writes_when_commit_called():
4729
assert fs.stat(ailly_config_path).exists
4830
ailly_config_content = fs.read(ailly_config_path)
4931
assert "System prompt 1 content" in ailly_config_content
50-
assert "System prompt 2 content" in ailly_config_content
32+
assert "System prompt 2 content" in ailly_config_content

0 commit comments

Comments
 (0)