summaryrefslogtreecommitdiff
path: root/src/home/config/validators
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2023-06-08 02:26:28 +0300
committerEvgeny Zinoviev <me@ch1p.io>2023-06-08 02:26:28 +0300
commiteb825f62ee876e5cf6c6ffc31a7e218d78c94993 (patch)
tree5d59f0d8ad9a171a714080a3ab75d7adc5d5dc2b /src/home/config/validators
parent3ae1c3b5a7196cd7f556579658244868026b5e11 (diff)
save
Diffstat (limited to 'src/home/config/validators')
-rw-r--r--src/home/config/validators/__init__.py2
-rw-r--r--src/home/config/validators/_util.py11
-rw-r--r--src/home/config/validators/_validators.py32
3 files changed, 45 insertions, 0 deletions
diff --git a/src/home/config/validators/__init__.py b/src/home/config/validators/__init__.py
new file mode 100644
index 0000000..0e75132
--- /dev/null
+++ b/src/home/config/validators/__init__.py
@@ -0,0 +1,2 @@
+from ._validators import *
+from ._util import validate
diff --git a/src/home/config/validators/_util.py b/src/home/config/validators/_util.py
new file mode 100644
index 0000000..5227c40
--- /dev/null
+++ b/src/home/config/validators/_util.py
@@ -0,0 +1,11 @@
+import inspect
+
+from cerberus import Validator, DocumentError
+
+
+def validate(schema, data):
+ v = Validator(schema)
+ if not v.validate(data):
+ frame = inspect.currentframe().f_back
+ caller_name = frame.f_code.co_name
+ raise DocumentError(f'{caller_name}: failed to validate data: ' + v.errors)
diff --git a/src/home/config/validators/_validators.py b/src/home/config/validators/_validators.py
new file mode 100644
index 0000000..cddc1b0
--- /dev/null
+++ b/src/home/config/validators/_validators.py
@@ -0,0 +1,32 @@
+from ._util import validate
+
+__all__ = [
+ 'linux_boards_validator'
+]
+
+
+def linux_boards_validator(data) -> None:
+ validate({
+ 'type': 'dict',
+ 'valuesrules': {
+ 'type': 'dict',
+ 'schema': {
+ 'mdns': {'type': 'string', 'required': True},
+ 'board': {'type': 'string', 'required': True},
+ 'network': {'type': 'list', 'required': True, 'empty': False},
+ 'ram': {'type': 'integer', 'required': True},
+ 'ext_hdd': {
+ 'type': 'list',
+ 'schema': {
+ 'type': 'dict',
+ 'schema': {
+ 'mountpoint': {'type': 'string', 'required': True},
+ 'size': {'type': 'integer', 'required': True}
+ }
+ },
+ },
+ 'services': {'type': 'list', 'empty': False},
+ 'online': {'type': 'boolean', 'required': True}
+ }
+ }
+ }, data)