xref: /openbmc/sdbusplus/tools/sdbusplus/error.py (revision 43fcd1ce)
1import os
2
3import yaml
4
5from .namedelement import NamedElement
6from .renderer import Renderer
7
8
9class ErrorElement(NamedElement):
10    def __init__(self, **kwargs):
11        super(ErrorElement, self).__init__(**kwargs)
12        self.errno = kwargs.pop("errno", False)
13
14
15class Error(NamedElement, Renderer):
16    @staticmethod
17    def load(name, rootdir="."):
18        filename = os.path.join(
19            rootdir, name.replace(".", "/") + ".errors.yaml"
20        )
21
22        with open(filename) as f:
23            data = f.read()
24            y = yaml.safe_load(data)
25            y = {"name": name, "errors": y}
26            return Error(**y)
27
28    def __init__(self, **kwargs):
29        self.errors = [ErrorElement(**n) for n in kwargs.pop("errors", [])]
30
31        super(Error, self).__init__(**kwargs)
32
33        self.old_namespaces = self.name.split(".")
34        self.namespaces = [
35            NamedElement(name=x).snake_case for x in self.old_namespaces
36        ]
37        self.old_namespaces = "::".join(
38            ["sdbusplus"] + self.old_namespaces + ["Error"]
39        )
40        self.namespaces = "::".join(["sdbusplus", "error"] + self.namespaces)
41
42    def markdown(self, loader):
43        return self.render(loader, "error.md.mako", error=self)
44
45    def exception_header(self, loader):
46        return self.render(loader, "error.hpp.mako", error=self)
47
48    def exception_cpp(self, loader):
49        return self.render(loader, "error.cpp.mako", error=self)
50