Skip to content

Commit eed9b02

Browse files
refactor: extract base class for project info extractor (#26)
1 parent 2b3612f commit eed9b02

File tree

9 files changed

+45
-28
lines changed

9 files changed

+45
-28
lines changed

python_coderunner/src/coderunner_factory/vim_coderunner_factory.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,19 @@ def _create_config(self) -> TVimConfig:
7979
name="g:coderunner_by_file_ext",
8080
getter=TVimByFileExtConfigValueGetter(),
8181
validator=TDispatchersValidator(),
82-
allowed_values_description="Dict[str, str] value",
82+
allowed_values_description="dict[str, str]",
8383
),
8484
by_file_type_field=TConfigField(
8585
name="g:coderunner_by_file_type",
8686
getter=TVimByFileTypeConfigValueGetter(),
8787
validator=TDispatchersValidator(),
88-
allowed_values_description="Dict[str, str] value",
88+
allowed_values_description="dict[str, str]",
8989
),
9090
by_glob_field=TConfigField(
9191
name="g:coderunner_by_glob",
9292
getter=TVimByGlobConfigValueGetter(),
9393
validator=TDispatchersValidator(),
94-
allowed_values_description="Dict[str, str] value",
94+
allowed_values_description="dict[str, str]",
9595
),
9696
dispatchers_order_field=TConfigField(
9797
name="g:coderunner_runners_order",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .basic import TBasicConfig
22
from .config_field import TConfigField
3-
from .exceptions import ConfigFieldNotFoundError, ConfigFieldValidationError
3+
from .exceptions import ConfigFieldUndefinedValueError, ConfigFieldValidationError
44
from .interface import EDispatchersTypes, IConfig
55
from .vim_config import TVimConfig

python_coderunner/src/config/basic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import TypeVar
22

33
from .config_field import TConfigField
4-
from .exceptions import ConfigFieldNotFoundError, ConfigFieldValidationError
4+
from .exceptions import ConfigFieldUndefinedValueError, ConfigFieldValidationError
55
from .interface import EDispatchersTypes, IConfig
66

77
ValueType = TypeVar("ValueType")
@@ -41,7 +41,7 @@ def _get_field_value(self, field: TConfigField[ValueType]) -> ValueType:
4141
"""
4242
try:
4343
return field.get()
44-
except (ConfigFieldNotFoundError, ConfigFieldValidationError) as e:
44+
except (ConfigFieldUndefinedValueError, ConfigFieldValidationError) as e:
4545
raise ValueError(str(e)) from e
4646

4747
def get_by_file_ext(self) -> dict[str, str]:

python_coderunner/src/config/config_field.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Any, Generic, TypeVar
22

3-
from .exceptions import ConfigFieldNotFoundError, ConfigFieldValidationError
3+
from .exceptions import ConfigFieldUndefinedValueError, ConfigFieldValidationError
44
from .getter import IConfigValueGetter, UndefinedValueError
55
from .validator import IValidator, ValidationError
66

@@ -32,7 +32,7 @@ def get(self) -> ValueType:
3232
try:
3333
raw_value: Any = self._getter()
3434
except UndefinedValueError as e:
35-
raise ConfigFieldNotFoundError.from_undefined_value_error(e, self._allowed_values_description)
35+
raise ConfigFieldUndefinedValueError.from_undefined_value_error(e, self._allowed_values_description)
3636

3737
try:
3838
return self._validator(raw_value)

python_coderunner/src/config/exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from .validator import ValidationError
55

66

7-
class ConfigFieldNotFoundError(UndefinedValueError):
7+
class ConfigFieldUndefinedValueError(UndefinedValueError):
88
@classmethod
99
def from_undefined_value_error(cls, e: UndefinedValueError, allowed_values: str) -> Self:
1010
return cls(f"{e} Allowed values: {allowed_values}.")
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import os
2+
from abc import abstractmethod
3+
from typing import Iterable
4+
5+
from ..file_info_extractor import IFileInfoExtractor
6+
from .interface import IProjectInfoExtractor
7+
8+
9+
class TBaseProjectInfoExtractor(IProjectInfoExtractor):
10+
def __init__(self, file_info_extractor: IFileInfoExtractor):
11+
self._file_info_extractor: IFileInfoExtractor = file_info_extractor
12+
13+
@abstractmethod
14+
def get_workspace_root(self) -> str:
15+
raise NotImplementedError
16+
17+
def get_all_files_filter_by_exts(self, exts: set[str]) -> Iterable[str]:
18+
for root, _, files in os.walk(self.get_workspace_root()):
19+
for file in files:
20+
if self._file_info_extractor.get_file_ext(file) in exts:
21+
yield os.path.join(root, file)
22+
23+
def get_all_files_filter_by_file_type(self, file_types: set[str]) -> Iterable[str]:
24+
for root, _, files in os.walk(self.get_workspace_root()):
25+
for file in files:
26+
if self._file_info_extractor.get_file_type(file) in file_types:
27+
yield os.path.join(root, file)
Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,16 @@
1-
import os
21
from abc import ABC, abstractmethod
32
from typing import Iterable
43

5-
from ..file_info_extractor import IFileInfoExtractor
6-
74

85
class IProjectInfoExtractor(ABC):
9-
def __init__(self, file_info_extractor: IFileInfoExtractor):
10-
self._file_info_extractor: IFileInfoExtractor = file_info_extractor
11-
126
@abstractmethod
137
def get_workspace_root(self) -> str:
148
raise NotImplementedError
159

10+
@abstractmethod
1611
def get_all_files_filter_by_exts(self, exts: set[str]) -> Iterable[str]:
17-
for root, _, files in os.walk(self.get_workspace_root()):
18-
for file in files:
19-
if self._file_info_extractor.get_file_ext(file) in exts:
20-
yield os.path.join(root, file)
12+
raise NotImplementedError
2113

14+
@abstractmethod
2215
def get_all_files_filter_by_file_type(self, file_types: set[str]) -> Iterable[str]:
23-
for root, _, files in os.walk(self.get_workspace_root()):
24-
for file in files:
25-
if self._file_info_extractor.get_file_type(file) in file_types:
26-
yield os.path.join(root, file)
16+
raise NotImplementedError
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import vim
22

3-
from .interface import IProjectInfoExtractor
3+
from .base import TBaseProjectInfoExtractor
44

55

6-
class TVimProjectInfoExtractor(IProjectInfoExtractor):
6+
class TVimProjectInfoExtractor(TBaseProjectInfoExtractor):
77
def get_workspace_root(self) -> str:
88
return vim.eval("getcwd()")

python_coderunner/tests/unit/conftest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,19 @@ def fixture_vim_config() -> IConfig:
6161
name="g:coderunner_by_file_ext",
6262
getter=TVimByFileExtConfigValueGetter(),
6363
validator=TDispatchersValidator(),
64-
allowed_values_description="Dict[str, str] value",
64+
allowed_values_description="dict[str, str]",
6565
),
6666
by_file_type_field=TConfigField(
6767
name="g:coderunner_by_file_type",
6868
getter=TVimByFileTypeConfigValueGetter(),
6969
validator=TDispatchersValidator(),
70-
allowed_values_description="Dict[str, str] value",
70+
allowed_values_description="dict[str, str]",
7171
),
7272
by_glob_field=TConfigField(
7373
name="g:coderunner_by_glob",
7474
getter=TVimByGlobConfigValueGetter(),
7575
validator=TDispatchersValidator(),
76-
allowed_values_description="Dict[str, str] value",
76+
allowed_values_description="dict[str, str]",
7777
),
7878
dispatchers_order_field=TConfigField(
7979
name="g:coderunner_runners_order",

0 commit comments

Comments
 (0)