def __parse_msg(self, msgname, obj): req = obj.get("request") res = obj.get("response") if req is None: raise SchemaParseException("No request specified: " + obj.__str__()) if res is None: raise SchemaParseException("No response specified: " + obj.__str__()) fields = dict() for field in req: fieldname = field.get("name") if fieldname is None: raise SchemaParseException("No param name: " + field.__str__()) fieldtype = field.get("type") if fieldtype is None: raise SchemaParseException("No param type: " + field.__str__()) fields[fieldname] = schema.Field( fieldname, schema._parse(fieldtype, self.__types)) request = schema._RecordSchema(fields) response = schema._parse(res, self.__types) erorrs = list() erorrs.append(_SYSTEM_ERROR) errs = obj.get("errors") if errs is not None: if not isinstance(errs, list): raise SchemaParseException("Errors not an array: " + errs.__str__()) for err in errs: name = err.__str__() sch = self.__types.get(name) if sch is None: raise SchemaParseException("Undefined error: " + name.__str__()) if sch.iserror is False: raise SchemaParseException("Not an error: " + name.__str__()) erorrs.append(sch) return self.Message(self, msgname, request, response, schema._UnionSchema(erorrs))
def _parse(self, obj): if obj.get("namespace") is not None: self.__namespace = obj.get("namespace") if obj.get("protocol") is None: raise SchemaParseException("No protocol name specified: "+obj.__str__()) self.__name = obj.get("protocol") defs = obj.get("types") if defs is not None: if not isinstance(defs, list): raise SchemaParseException("Types not an array: "+defs.__str__()) for type in defs: if not isinstance(type, object): raise SchemaParseException("Types not an object: "+type.__str__()) schema._parse(type, self.__types) msgs = obj.get("messages") if msgs is not None: for k,v in msgs.items(): self.__messages[k] = self.__parse_msg(k,v)
def __parse_msg(self, msgname, obj): req = obj.get("request") res = obj.get("response") if req is None: raise SchemaParseException("No request specified: "+obj.__str__()) if res is None: raise SchemaParseException("No response specified: "+obj.__str__()) fields = dict() for field in req: fieldname = field.get("name") if fieldname is None: raise SchemaParseException("No param name: "+field.__str__()) fieldtype = field.get("type") if fieldtype is None: raise SchemaParseException("No param type: "+field.__str__()) fields[fieldname] = schema.Field(fieldname, schema._parse(fieldtype, self.__types)) request = schema._RecordSchema(fields) response = schema._parse(res, self.__types) erorrs = list() erorrs.append(_SYSTEM_ERROR) errs = obj.get("errors") if errs is not None: if not isinstance(errs, list): raise SchemaParseException("Errors not an array: "+errs.__str__()) for err in errs: name = err.__str__() sch = self.__types.get(name) if sch is None: raise SchemaParseException("Undefined error: "+name.__str__()) if sch.iserror is False: raise SchemaParseException("Not an error: "+name.__str__()) erorrs.append(sch) return self.Message(self, msgname, request, response, schema._UnionSchema(erorrs))
def _parse(self, obj): if obj.get("namespace") is not None: self.__namespace = obj.get("namespace") if obj.get("protocol") is None: raise SchemaParseException("No protocol name specified: " + obj.__str__()) self.__name = obj.get("protocol") defs = obj.get("types") if defs is not None: if not isinstance(defs, list): raise SchemaParseException("Types not an array: " + defs.__str__()) for type in defs: if not isinstance(type, object): raise SchemaParseException("Types not an object: " + type.__str__()) schema._parse(type, self.__types) msgs = obj.get("messages") if msgs is not None: for k, v in msgs.items(): self.__messages[k] = self.__parse_msg(k, v)