def notification_stmt(self, stmt, p_elem, pset): notel = SchemaNode.element("nmt:notification", self.notifications, occur=2) elem = SchemaNode.element(self.prefix_id(stmt.arg), notel, occur=2) plist, new_pset = self.select_patch(pset, stmt.arg) for s in plist: self.handle_stmt(s, elem, new_pset) self.handle_substmts(stmt, elem, new_pset)
def create_roots(self): """Create root elements for conf. data, RPCs and notifications.""" self.root = SchemaNode.element("nmt:netmod-tree", interleave=False, occur=2) self.confdata = SchemaNode.element("nmt:top", self.root, interleave=True, occur=2) self.rpcs = SchemaNode.element("nmt:rpc-methods", self.root, interleave=False, occur=2) self.notifications = SchemaNode.element("nmt:notifications", self.root, interleave=True, occur=2)
def rpc_stmt(self, stmt, p_elem, pset): rpcel = SchemaNode.element("nmt:rpc-method", self.rpcs, occur=2) rlist, r_pset = self.select_patch(pset, stmt.arg) inpel = SchemaNode.element("nmt:input", rpcel, occur=2) elem = SchemaNode.element(self.prefix_id(stmt.arg), inpel, occur=2) inst = stmt.search_one("input") if inst: ilist, i_pset = self.select_patch(r_pset, "input") for s in ilist: self.handle_stmt(s, elem, i_pset) self.handle_substmts(inst, elem, i_pset) for s in rlist: self.handle_stmt(s, elem, r_pset) self.handle_substmts(stmt, rpcel, r_pset)
def notification_stmt(self, stmt, p_elem, pset): notel = SchemaNode("nma:notification", self.notifications) notel.occur = 2 elem = SchemaNode.element(self.qname(stmt), notel, interleave=True, occur=2) augs, new_pset = self.process_patches(pset, stmt, elem)[1:] self.handle_substmts(stmt, elem, new_pset) self.apply_augments(augs, elem, new_pset)
def anyxml_stmt(self, stmt, p_elem, pset): self.has_anyxml = True elem = SchemaNode.element(self.qname(stmt), p_elem) SchemaNode("ref", elem).set_attr("name", "__anyxml__") refd = self.process_patches(pset, stmt, elem)[0] if p_elem.name == "choice": elem.occur = 3 elif refd["mandatory"] or stmt.search_one("mandatory", "true"): elem.occur = 2 self.propagate_occur(p_elem, 2) self.handle_substmts(stmt, elem)
def container_stmt(self, stmt, p_elem, pset): celem = SchemaNode.element(self.prefix_id(stmt.arg),p_elem) plist, new_pset = self.select_patch(pset, stmt.arg) if p_elem.name == "choice": if p_elem.default_case != stmt.arg: celem.occur = 3 elif ([ s for s in plist if s.keyword == "presence"] or stmt.search_one("presence")): celem.occur = 3 for s in plist: self.handle_stmt(s, celem, new_pset) self.handle_substmts(stmt, celem, new_pset)
def container_stmt(self, stmt, p_elem, pset): celem = SchemaNode.element(self.qname(stmt), p_elem) refd, augs, new_pset = self.process_patches(pset, stmt, celem) left = self.lookup_expand(stmt, new_pset.keys()) for a in augs: left = self.lookup_expand(a, left) if (p_elem.name == "choice" and p_elem.default_case != stmt.arg or refd["presence"] or stmt.search_one("presence")): celem.occur = 3 self.handle_substmts(stmt, celem, new_pset) self.apply_augments(augs, celem, new_pset) if not celem.children: SchemaNode("empty", celem)
def container_stmt(self, stmt, p_elem, pset): celem = SchemaNode.element(self.prefix_id(stmt.arg), p_elem) plist, new_pset = self.select_patch(pset, stmt.arg) if p_elem.name == "choice": if p_elem.default_case != stmt.arg: celem.occur = 3 elif ([s for s in plist if s.keyword == "presence"] or stmt.search_one("presence")): celem.occur = 3 for s in plist: self.handle_stmt(s, celem, new_pset) self.handle_substmts(stmt, celem, new_pset)
def anyxml_stmt(self, stmt, p_elem, pset): self.has_anyxml = True elem = SchemaNode.element(self.prefix_id(stmt.arg), p_elem) SchemaNode("ref", elem).set_attr("name", "__anyxml__") plist = self.select_patch(pset, stmt.arg)[0] if p_elem.name == "choice": elem.occur = 3 elif self.is_mandatory(stmt, plist): elem.occur = 2 self.propagate_occur(p_elem, 2) for s in plist: self.handle_stmt(s, elem) self.handle_substmts(stmt, elem)
def leaf_stmt(self, stmt, p_elem, pset): qname = self.qname(stmt) elem = SchemaNode.element(qname) if p_elem.name == "_list_" and qname in p_elem.keys: p_elem.keymap[qname] = elem elem.occur = 2 else: p_elem.subnode(elem) refd = self.process_patches(pset, stmt, elem)[0] if p_elem.name == "choice": if p_elem.default_case != stmt.arg: elem.occur = 3 elif refd["mandatory"] or stmt.search_one("mandatory", "true"): self.propagate_occur(elem, 2) if elem.occur == 0: defv = self.get_default(stmt, refd) if defv is not None: elem.default = defv self.propagate_occur(elem, 1) self.handle_substmts(stmt, elem)
def rpc_stmt(self, stmt, p_elem, pset): rpcel = SchemaNode("nma:rpc", self.rpcs) r_pset = self.process_patches(pset, stmt, rpcel)[2] inpel = SchemaNode("nma:input", rpcel) elem = SchemaNode.element(self.qname(stmt), inpel, occur=2) augs, pset = self.process_patches(r_pset,stmt,elem,"input")[1:] inst = stmt.search_one("input") if inst: self.handle_substmts(inst, elem, pset) else: SchemaNode("empty", elem) self.apply_augments(augs, elem, pset) augs, pset = self.process_patches(r_pset,stmt,None,"output")[1:] oust = stmt.search_one("output") if oust or augs: outel = SchemaNode("nma:output", rpcel) outel.occur = 2 if oust: self.handle_substmts(oust, outel, pset) self.apply_augments(augs, outel, pset) self.handle_substmts(stmt, rpcel, r_pset)
def rpc_stmt(self, stmt, p_elem, pset): rpcel = SchemaNode("nma:rpc", self.rpcs) r_pset = self.process_patches(pset, stmt, rpcel)[2] inpel = SchemaNode("nma:input", rpcel) elem = SchemaNode.element(self.qname(stmt), inpel, occur=2) augs, pset = self.process_patches(r_pset, stmt, elem, "input")[1:] inst = stmt.search_one("input") if inst: self.handle_substmts(inst, elem, pset) else: SchemaNode("empty", elem) self.apply_augments(augs, elem, pset) augs, pset = self.process_patches(r_pset, stmt, None, "output")[1:] oust = stmt.search_one("output") if oust or augs: outel = SchemaNode("nma:output", rpcel) outel.occur = 2 if oust: self.handle_substmts(oust, outel, pset) self.apply_augments(augs, outel, pset) self.handle_substmts(stmt, rpcel, r_pset)
def leaf_stmt(self, stmt, p_elem, pset): def handle_default(): defv = self.get_default(stmt, plist) if defv and elem.occur == 0: elem.occur = 1 elem.default = defv self.propagate_occur(elem.parent, 1) qname = self.prefix_id(stmt.arg) elem = SchemaNode.element(qname) plist = self.select_patch(pset, stmt.arg)[0] p_elem.subnode(elem) if p_elem.name == "choice": if p_elem.default_case == stmt.arg: handle_default() else: elem.occur = 3 elif self.is_mandatory(stmt, plist): self.propagate_occur(elem, 2) else: handle_default() for s in plist: self.handle_stmt(s, elem) self.handle_substmts(stmt, elem)
def output_stmt(self, stmt, p_elem, pset): elem = SchemaNode.element("nmt:output", p_elem, occur=2) plist, new_pset = self.select_patch(pset, "output") for s in plist: self.handle_stmt(s, elem, new_pset) self.handle_substmts(stmt, elem, new_pset)