| import os |
| |
| import yaml |
| |
| from .enum import Enum |
| from .method import Method |
| from .namedelement import NamedElement |
| from .property import Property |
| from .renderer import Renderer |
| from .signal import Signal |
| |
| |
| class Interface(NamedElement, Renderer): |
| @staticmethod |
| def load(name, rootdir="."): |
| filename = os.path.join( |
| rootdir, name.replace(".", "/") + ".interface.yaml" |
| ) |
| |
| with open(filename) as f: |
| data = f.read() |
| y = yaml.safe_load(data) |
| y["name"] = name |
| return Interface(**y) |
| |
| def __init__(self, **kwargs): |
| self.properties = [Property(**p) for p in kwargs.pop("properties", [])] |
| self.methods = [Method(**m) for m in kwargs.pop("methods", [])] |
| self.signals = [Signal(**s) for s in kwargs.pop("signals", [])] |
| self.enums = [Enum(**e) for e in kwargs.pop("enumerations", [])] |
| |
| super(Interface, self).__init__(**kwargs) |
| |
| def joinedName(self, join_str, append): |
| return join_str.join(self.namespaces + [self.classname, append]) |
| |
| def enum_includes(self, inc_list): |
| includes = [] |
| for e in inc_list: |
| includes.extend(e.enum_headers(self.name, self.typename)) |
| return sorted(set(includes)) |
| |
| def markdown(self, loader): |
| return self.render(loader, "interface.md.mako", interface=self) |
| |
| def server_header(self, loader): |
| self.typename = "server" |
| return self.render(loader, "interface.server.hpp.mako", interface=self) |
| |
| def server_cpp(self, loader): |
| self.typename = "server" |
| return self.render(loader, "interface.server.cpp.mako", interface=self) |
| |
| def client_header(self, loader): |
| self.typename = "client" |
| return self.render(loader, "interface.client.hpp.mako", interface=self) |
| |
| def common_header(self, loader): |
| self.typename = "common" |
| return self.render(loader, "interface.common.hpp.mako", interface=self) |