summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/dashboard/api/doc.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/dashboard/api/doc.py')
-rw-r--r--src/pybind/mgr/dashboard/api/doc.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/api/doc.py b/src/pybind/mgr/dashboard/api/doc.py
new file mode 100644
index 000000000..172d59d0a
--- /dev/null
+++ b/src/pybind/mgr/dashboard/api/doc.py
@@ -0,0 +1,53 @@
+from enum import Enum
+from typing import Any, Dict, List, Optional
+
+
+class SchemaType(Enum):
+ """
+ Representation of the type property of a schema object:
+ http://spec.openapis.org/oas/v3.0.3.html#schema-object
+ """
+ ARRAY = 'array'
+ BOOLEAN = 'boolean'
+ INTEGER = 'integer'
+ NUMBER = 'number'
+ OBJECT = 'object'
+ STRING = 'string'
+
+ def __str__(self):
+ return str(self.value)
+
+
+class Schema:
+ """
+ Representation of a schema object:
+ http://spec.openapis.org/oas/v3.0.3.html#schema-object
+ """
+
+ def __init__(self, schema_type: SchemaType = SchemaType.OBJECT,
+ properties: Optional[Dict] = None, required: Optional[List] = None):
+ self._type = schema_type
+ self._properties = properties if properties else {}
+ self._required = required if required else []
+
+ def as_dict(self) -> Dict[str, Any]:
+ schema: Dict[str, Any] = {'type': str(self._type)}
+
+ if self._type == SchemaType.ARRAY:
+ items = Schema(properties=self._properties)
+ schema['items'] = items.as_dict()
+ else:
+ schema['properties'] = self._properties
+
+ if self._required:
+ schema['required'] = self._required
+
+ return schema
+
+
+class SchemaInput:
+ """
+ Simple DTO to transfer data in a structured manner for creating a schema object.
+ """
+ type: SchemaType
+ params: List[Any]