-
Notifications
You must be signed in to change notification settings - Fork 236
Expand file tree
/
Copy pathvalidation.py
More file actions
99 lines (72 loc) · 2.63 KB
/
validation.py
File metadata and controls
99 lines (72 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"""Validation errors for tmuxp configuration files."""
from __future__ import annotations
import logging
import typing as t
from tmuxp import exc
logger = logging.getLogger(__name__)
class SchemaValidationError(exc.WorkspaceError):
"""Tmuxp configuration validation base error."""
class SessionNameMissingValidationError(SchemaValidationError):
"""Tmuxp configuration error for session name missing."""
def __init__(self, *args: object, **kwargs: object) -> None:
return super().__init__(
'workspace requires "session_name"',
*args,
**kwargs,
)
class WindowListMissingValidationError(SchemaValidationError):
"""Tmuxp configuration error for window list missing."""
def __init__(self, *args: object, **kwargs: object) -> None:
return super().__init__(
'workspace requires list of "windows"',
*args,
**kwargs,
)
class WindowNameMissingValidationError(SchemaValidationError):
"""Tmuxp configuration error for missing window_name."""
def __init__(self, *args: object, **kwargs: object) -> None:
return super().__init__(
'workspace window is missing "window_name"',
*args,
**kwargs,
)
class InvalidPluginsValidationError(SchemaValidationError):
"""Tmuxp configuration error for invalid plugins."""
def __init__(self, plugins: t.Any, *args: object, **kwargs: object) -> None:
return super().__init__(
'"plugins" only supports list type. '
f" Received {type(plugins)}, "
f"value: {plugins}",
*args,
**kwargs,
)
def validate_schema(workspace_dict: t.Any) -> bool:
"""
Return True if workspace schema is correct.
Parameters
----------
workspace_dict : dict
tmuxp workspace data
Returns
-------
bool
"""
logger.debug(
"validating workspace schema",
extra={
"tmux_session": workspace_dict.get("session_name", "")
if isinstance(workspace_dict, dict)
else "",
},
)
# verify session_name
if "session_name" not in workspace_dict:
raise SessionNameMissingValidationError
if "windows" not in workspace_dict:
raise WindowListMissingValidationError
for window in workspace_dict["windows"]:
if "window_name" not in window:
raise WindowNameMissingValidationError
if "plugins" in workspace_dict and not isinstance(workspace_dict["plugins"], list):
raise InvalidPluginsValidationError(plugins=workspace_dict.get("plugins"))
return True