Skip to content

Commit 60cfc17

Browse files
committed
refactor!: Move validate_schema to workspace.validators
1 parent f632f1c commit 60cfc17

File tree

9 files changed

+51
-50
lines changed

9 files changed

+51
-50
lines changed

docs/api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ If you need an internal API stabilized please [file an issue](https://github.com
8484
### Validation
8585

8686
```{eval-rst}
87-
.. automethod:: tmuxp.workspace.config.validate_schema
87+
.. automethod:: tmuxp.workspace.validation.validate_schema
8888
```
8989

9090
### Processing

docs/configuration/examples.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ windows:
762762
tmuxp sessions can be scripted in python. The first way is to use the
763763
ORM in the {ref}`API`. The second is to pass a {py:obj}`dict` into
764764
{class}`~tmuxp.workspace.builder.WorkspaceBuilder` with a correct schema.
765-
See: {meth}`tmuxp.config.validate_schema`.
765+
See: {meth}`tmuxp.validation.validate_schema`.
766766

767767
:::
768768

src/tmuxp/workspace/builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def __init__(self, sconf, plugins=[], server=None):
157157
if not sconf:
158158
raise exc.EmptyConfigException("session configuration is empty.")
159159

160-
# config.validate_schema(sconf)
160+
# validation.validate_schema(sconf)
161161

162162
if isinstance(server, Server):
163163
self.server = server

src/tmuxp/workspace/config.py

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,9 @@
88
import os
99
from typing import Dict
1010

11-
from .. import exc
12-
1311
logger = logging.getLogger(__name__)
1412

1513

16-
def validate_schema(workspace_dict):
17-
"""
18-
Return True if workspace schema is correct.
19-
20-
Parameters
21-
----------
22-
workspace_dict : dict
23-
tmuxp workspace data
24-
25-
Returns
26-
-------
27-
bool
28-
"""
29-
# verify session_name
30-
if "session_name" not in workspace_dict:
31-
raise exc.WorkspaceError('workspace requires "session_name"')
32-
33-
if "windows" not in workspace_dict:
34-
raise exc.WorkspaceError('workspace requires list of "windows"')
35-
36-
for window in workspace_dict["windows"]:
37-
if "window_name" not in window:
38-
raise exc.WorkspaceError('workspace window is missing "window_name"')
39-
40-
if "plugins" in workspace_dict:
41-
if not isinstance(workspace_dict["plugins"], list):
42-
raise exc.WorkspaceError('"plugins" only supports list type')
43-
44-
return True
45-
46-
4714
def expandshell(_path):
4815
"""
4916
Return expanded path based on user's ``$HOME`` and ``env``.

src/tmuxp/workspace/validation.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from .. import exc
2+
3+
4+
def validate_schema(workspace_dict):
5+
"""
6+
Return True if workspace schema is correct.
7+
8+
Parameters
9+
----------
10+
workspace_dict : dict
11+
tmuxp workspace data
12+
13+
Returns
14+
-------
15+
bool
16+
"""
17+
# verify session_name
18+
if "session_name" not in workspace_dict:
19+
raise exc.WorkspaceError('workspace requires "session_name"')
20+
21+
if "windows" not in workspace_dict:
22+
raise exc.WorkspaceError('workspace requires list of "windows"')
23+
24+
for window in workspace_dict["windows"]:
25+
if "window_name" not in window:
26+
raise exc.WorkspaceError('workspace window is missing "window_name"')
27+
28+
if "plugins" in workspace_dict:
29+
if not isinstance(workspace_dict["plugins"], list):
30+
raise exc.WorkspaceError('"plugins" only supports list type')
31+
32+
return True

tests/workspace/test_config.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from tmuxp import exc
1010
from tmuxp.config_reader import ConfigReader
11-
from tmuxp.workspace import config
11+
from tmuxp.workspace import config, validation
1212

1313
from ..constants import EXAMPLE_PATH
1414

@@ -175,7 +175,7 @@ def test_in_session_scope(config_fixture: "WorkspaceTestData"):
175175
format="yaml", content=config_fixture.shell_command_before_session.before
176176
)
177177

178-
config.validate_schema(sconfig)
178+
validation.validate_schema(sconfig)
179179

180180
assert config.expand(sconfig) == sconfig
181181
assert config.expand(config.trickle(sconfig)) == ConfigReader._load(
@@ -199,7 +199,7 @@ def test_trickle_window_with_no_pane_workspace():
199199
- window_name: test_no_panes
200200
"""
201201
sconfig = ConfigReader._load(format="yaml", content=test_yaml)
202-
config.validate_schema(sconfig)
202+
validation.validate_schema(sconfig)
203203

204204
assert config.expand(config.trickle(sconfig))["windows"][1]["panes"][0] == {
205205
"shell_command": []
@@ -255,7 +255,7 @@ def test_no_session_name():
255255
sconfig = ConfigReader._load(format="yaml", content=yaml_workspace)
256256

257257
with pytest.raises(exc.WorkspaceError) as excinfo:
258-
config.validate_schema(sconfig)
258+
validation.validate_schema(sconfig)
259259
assert excinfo.matches(r'requires "session_name"')
260260

261261

@@ -267,7 +267,7 @@ def test_no_windows():
267267
sconfig = ConfigReader._load(format="yaml", content=yaml_workspace)
268268

269269
with pytest.raises(exc.WorkspaceError) as excinfo:
270-
config.validate_schema(sconfig)
270+
validation.validate_schema(sconfig)
271271
assert excinfo.match(r'list of "windows"')
272272

273273

@@ -289,7 +289,7 @@ def test_no_window_name():
289289
sconfig = ConfigReader._load(format="yaml", content=yaml_workspace)
290290

291291
with pytest.raises(exc.WorkspaceError) as excinfo:
292-
config.validate_schema(sconfig)
292+
validation.validate_schema(sconfig)
293293
assert excinfo.matches('missing "window_name"')
294294

295295

@@ -351,5 +351,5 @@ def test_plugins():
351351
sconfig = ConfigReader._load(format="yaml", content=yaml_workspace)
352352

353353
with pytest.raises(exc.WorkspaceError) as excinfo:
354-
config.validate_schema(sconfig)
354+
validation.validate_schema(sconfig)
355355
assert excinfo.matches("only supports list type")

tests/workspace/test_freezer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import typing
55

66
from tmuxp.config_reader import ConfigReader
7-
from tmuxp.workspace import config, freezer
7+
from tmuxp.workspace import freezer, validation
88
from tmuxp.workspace.builder import WorkspaceBuilder
99

1010
from ..fixtures import utils as test_utils
@@ -27,7 +27,7 @@ def test_freeze_config(session):
2727
session = session
2828
new_config = freezer.freeze(session)
2929

30-
config.validate_schema(new_config)
30+
validation.validate_schema(new_config)
3131

3232
# These should dump without an error
3333
ConfigReader._dump(format="json", content=new_config)

tests/workspace/test_import_teamocil.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import pytest
33

44
from tmuxp import config_reader
5-
from tmuxp.workspace import config, importers
5+
from tmuxp.workspace import importers, validation
66

77
from ..fixtures import import_teamocil as fixtures
88

@@ -40,7 +40,7 @@ def test_config_to_dict(teamocil_yaml, teamocil_dict, tmuxp_dict):
4040

4141
assert importers.import_teamocil(teamocil_dict) == tmuxp_dict
4242

43-
config.validate_schema(importers.import_teamocil(teamocil_dict))
43+
validation.validate_schema(importers.import_teamocil(teamocil_dict))
4444

4545

4646
@pytest.fixture(scope="module")
@@ -76,4 +76,6 @@ def test_multisession_config(session_name, expected, multisession_config):
7676
# teamocil can fit multiple sessions in a config
7777
assert importers.import_teamocil(multisession_config[session_name]) == expected
7878

79-
config.validate_schema(importers.import_teamocil(multisession_config[session_name]))
79+
validation.validate_schema(
80+
importers.import_teamocil(multisession_config[session_name])
81+
)

tests/workspace/test_import_tmuxinator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import pytest
33

44
from tmuxp.config_reader import ConfigReader
5-
from tmuxp.workspace import config, importers
5+
from tmuxp.workspace import importers, validation
66

77
from ..fixtures import import_tmuxinator as fixtures
88

@@ -33,4 +33,4 @@ def test_config_to_dict(tmuxinator_yaml, tmuxinator_dict, tmuxp_dict):
3333

3434
assert importers.import_tmuxinator(tmuxinator_dict) == tmuxp_dict
3535

36-
config.validate_schema(importers.import_tmuxinator(tmuxinator_dict))
36+
validation.validate_schema(importers.import_tmuxinator(tmuxinator_dict))

0 commit comments

Comments
 (0)