Skip to content

Commit

Permalink
Change: Refactor AutohooksConfig to use AutohooksSettings
Browse files Browse the repository at this point in the history
Using the AutohooksSettings makes the class simpler.
  • Loading branch information
bjoernricks committed Aug 9, 2022
1 parent db8783b commit e28d990
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 25 deletions.
42 changes: 27 additions & 15 deletions autohooks/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

import tomlkit

from autohooks.settings import Mode
from autohooks.settings import AutohooksSettings, Mode
from autohooks.utils import get_pyproject_toml_path, is_split_env

AUTOHOOKS_SECTION = "tool.autohooks"
Expand Down Expand Up @@ -60,27 +60,30 @@ def _gather_mode(mode: Optional[str]) -> Mode:


class AutohooksConfig:
def __init__(self, config_dict: Dict = None) -> None:
self._config = Config(config_dict)
self._autohooks_config = self._config.get("tool").get("autohooks")
def __init__(
self,
*,
settings: Optional[AutohooksSettings] = None,
config: Optional[Config] = None,
) -> None:
self.config = Config() if config is None else config
self.settings = settings

def get_config(self) -> Config:
return self._config
return self.config

def has_autohooks_config(self) -> bool:
return not self._autohooks_config.is_empty()
return self.settings is not None

def get_pre_commit_script_names(self) -> List[str]:
if self.has_autohooks_config():
return self._autohooks_config.get_value("pre-commit", [])

return []
return self.settings.pre_commit if self.has_autohooks_config() else []

def get_mode(self) -> Mode:
if self.has_autohooks_config():
mode = self._autohooks_config.get_value("mode")
return _gather_mode(mode)
return Mode.UNDEFINED
return (
self.settings.mode
if self.has_autohooks_config()
else Mode.UNDEFINED
)

@staticmethod
def from_dict(config_dict: Dict[str, Any]) -> "AutohooksConfig":
Expand All @@ -93,7 +96,16 @@ def from_dict(config_dict: Dict[str, Any]) -> "AutohooksConfig":
Returns:
A new AutohooksConfig
"""
return AutohooksConfig(config_dict)
config = Config(config_dict)
autohooks_dict = config.get("tool", "autohooks")
if autohooks_dict.is_empty():
settings = None
else:
settings = AutohooksSettings(
mode=_gather_mode(autohooks_dict.get_value("mode")),
pre_commit=autohooks_dict.get_value("pre-commit", []),
)
return AutohooksConfig(settings=settings, config=config)

@staticmethod
def from_toml(toml_file: Path) -> "AutohooksConfig":
Expand Down
30 changes: 20 additions & 10 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,31 +63,35 @@ def test_empty_config(self):
self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_empty_config_dict(self):
config = AutohooksConfig({"foo": "bar"})
config = AutohooksConfig.from_dict({"foo": "bar"})

self.assertFalse(config.has_autohooks_config())
self.assertEqual(config.get_mode(), Mode.UNDEFINED)

self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_missing_pre_commit(self):
config = AutohooksConfig({"tool": {"autohooks": {"foo": "bar"}}})
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"foo": "bar"}}}
)

self.assertTrue(config.has_autohooks_config())
self.assertEqual(config.get_mode(), Mode.UNDEFINED)

self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_get_mode_pipenv(self):
config = AutohooksConfig({"tool": {"autohooks": {"mode": "pipenv"}}})
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"mode": "pipenv"}}}
)

self.assertTrue(config.has_autohooks_config())
self.assertEqual(config.get_mode(), Mode.PIPENV)

self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_get_mode_pipenv_multiline(self):
config = AutohooksConfig(
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"mode": "pipenv_multiline"}}}
)

Expand All @@ -97,15 +101,17 @@ def test_get_mode_pipenv_multiline(self):
self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_get_mode_poetry(self):
config = AutohooksConfig({"tool": {"autohooks": {"mode": "poetry"}}})
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"mode": "poetry"}}}
)

self.assertTrue(config.has_autohooks_config())
self.assertEqual(config.get_mode(), Mode.POETRY)

self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_get_mode_poetry_multiline(self):
config = AutohooksConfig(
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"mode": "poetry_multiline"}}}
)

Expand All @@ -115,7 +121,7 @@ def test_get_mode_poetry_multiline(self):
self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_get_mode_pythonpath(self):
config = AutohooksConfig(
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"mode": "pythonpath"}}}
)

Expand All @@ -125,15 +131,19 @@ def test_get_mode_pythonpath(self):
self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_get_mode_unknown(self):
config = AutohooksConfig({"tool": {"autohooks": {"mode": "foo"}}})
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"mode": "foo"}}}
)

self.assertTrue(config.has_autohooks_config())
self.assertEqual(config.get_mode(), Mode.UNKNOWN)

self.assertEqual(len(config.get_pre_commit_script_names()), 0)

def test_get_mode_undefined(self):
config = AutohooksConfig({"tool": {"autohooks": {"mode": None}}})
config = AutohooksConfig.from_dict(
{"tool": {"autohooks": {"mode": None}}}
)

self.assertTrue(config.has_autohooks_config())
self.assertEqual(config.get_mode(), Mode.UNDEFINED)
Expand All @@ -142,7 +152,7 @@ def test_get_mode_undefined(self):

def test_get_config_dict(self):
config_in = {"tool": {"autohooks": {"lorem": "ipsum"}}, "foo": "bar"}
config = AutohooksConfig(config_in)
config = AutohooksConfig.from_dict(config_in)

self.assertEqual(config.get_mode(), Mode.UNDEFINED)

Expand Down

0 comments on commit e28d990

Please sign in to comment.