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, schemadir): 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