Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@


class TInterpolatorCommandBuilder(ICommandBuilder):
WORKSPACE_ROOT_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$workspaceRoot")
FULL_FILE_NAME_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$fullFileName")
FILE_NAME_WITHOUT_EXT_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$fileNameWithoutExt")
FILE_NAME_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$fileName")
FILE_EXT: ClassVar[re.Pattern[str]] = re.compile(r"\$fileExt")
DRIVE_LETTER_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$driveLetter")
DIR_WITHOUT_TRAILING_SLASH_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$dirWithoutTrailingSlash")
DIR_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$dir")
_WORKSPACE_ROOT_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$workspaceRoot")
_FULL_FILE_NAME_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$fullFileName")
_FILE_NAME_WITHOUT_EXT_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$fileNameWithoutExt")
_FILE_NAME_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$fileName")
_FILE_EXT: ClassVar[re.Pattern[str]] = re.compile(r"\$fileExt")
_DRIVE_LETTER_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$driveLetter")
_DIR_WITHOUT_TRAILING_SLASH_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$dirWithoutTrailingSlash")
_DIR_PATTERN: ClassVar[re.Pattern[str]] = re.compile(r"\$dir")

def __init__(
self,
Expand All @@ -34,23 +34,23 @@ def _interpolate(self, file_path_abs: str) -> str:
The reverse alphabetical order is important so that substitutions are performed greedily,
i.e. $dirWithoutTrailingSlash must be before $dir.
"""
interpolated_str: str = self.WORKSPACE_ROOT_PATTERN.sub(
interpolated_str: str = self._WORKSPACE_ROOT_PATTERN.sub(
self._project_info_extractor.get_workspace_root(), self._template_string
)
interpolated_str = self.FULL_FILE_NAME_PATTERN.sub(file_path_abs, interpolated_str)
interpolated_str = self.FILE_NAME_WITHOUT_EXT_PATTERN.sub(
interpolated_str = self._FULL_FILE_NAME_PATTERN.sub(file_path_abs, interpolated_str)
interpolated_str = self._FILE_NAME_WITHOUT_EXT_PATTERN.sub(
self._file_info_extractor.get_file_name_without_ext(file_path_abs), interpolated_str
)
interpolated_str = self.FILE_NAME_PATTERN.sub(
interpolated_str = self._FILE_NAME_PATTERN.sub(
self._file_info_extractor.get_file_name(file_path_abs), interpolated_str
)
interpolated_str = self.FILE_EXT.sub(self._file_info_extractor.get_file_ext(file_path_abs), interpolated_str)
interpolated_str = self.DRIVE_LETTER_PATTERN.sub(
interpolated_str = self._FILE_EXT.sub(self._file_info_extractor.get_file_ext(file_path_abs), interpolated_str)
interpolated_str = self._DRIVE_LETTER_PATTERN.sub(
self._file_info_extractor.get_drive_letter(file_path_abs), interpolated_str
)
interpolated_str = self.DIR_WITHOUT_TRAILING_SLASH_PATTERN.sub(
interpolated_str = self._DIR_WITHOUT_TRAILING_SLASH_PATTERN.sub(
self._file_info_extractor.get_dir_without_trailing_slash(file_path_abs), interpolated_str
)
interpolated_str = self.DIR_PATTERN.sub(self._file_info_extractor.get_dir(file_path_abs), interpolated_str)
interpolated_str = self._DIR_PATTERN.sub(self._file_info_extractor.get_dir(file_path_abs), interpolated_str)

return interpolated_str
6 changes: 4 additions & 2 deletions python_coderunner/src/config/config_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ def get(self) -> ValueType:
try:
raw_value: Any = self._getter()
except UndefinedValueError as e:
raise ConfigFieldUndefinedValueError.from_undefined_value_error(e, self._allowed_values_description)
raise ConfigFieldUndefinedValueError.from_undefined_value_error(e, self._allowed_values_description) from e

try:
return self._validator(raw_value)
except ValidationError as e:
raise ConfigFieldValidationError.from_validation_error(e, self._name, self._allowed_values_description)
raise ConfigFieldValidationError.from_validation_error(
e, self._name, self._allowed_values_description
) from e
15 changes: 13 additions & 2 deletions python_coderunner/src/config/getter/interface.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
from typing import Any, Callable, TypeAlias
from abc import ABC, abstractmethod
from typing import Any

IConfigValueGetter: TypeAlias = Callable[[], Any]

class IConfigValueGetter(ABC):
@abstractmethod
def __call__(self) -> Any:
"""
Gets config value from external source.

Raises:
UndefinedValueError: If the config value is not defined.
"""
raise NotImplementedError
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
import vim

from .exceptions import UndefinedValueError
from .interface import IConfigValueGetter


class TBaseVimConfigValueGetter:
class TBaseVimConfigValueGetter(IConfigValueGetter):
"""Base class for getting Vim config values"""

def _get_vim_var(self, var_name: str) -> Any:
Expand Down
2 changes: 0 additions & 2 deletions python_coderunner/src/config/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ class EDispatchersTypes(StrEnum):


class IConfig(ABC):
"""Configuration interface"""

@abstractmethod
def get_by_file_ext(self) -> dict[str, str]:
"""Gets config for file extension-based dispatching"""
Expand Down
4 changes: 3 additions & 1 deletion python_coderunner/src/config/validator/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ class IValidator(ABC, Generic[ValueType]):
def __call__(self, value: Any) -> ValueType:
"""
Validates value and returns typed result.
Raises ValidationError on validation failure.

Raises:
ValidationError on validation failure.
"""
raise NotImplementedError