def processing(self, req): response = OODict() response._id = req._id try: result = self.handle_req(req) # Must set req._status if result is None: return None # Request not done, need to queue back # For complicated calls, read for example, should return a tuple: value, payload if isinstance(result, tuple): response.value, response.payload = result else: response.value = result except RequestHandleError, err: response.error = str(err)
def _parse_node(self, node): tree = OODict() # Save value value = node.text if isinstance(value, str): value = value.strip() # Only strip strings tree.value = value # Save attributes attrs = {} for k,v in node.attrib.items(): attrs.update(self._make_dict(k, v)) if attrs: tree['attrs'] = attrs #Save childrens for child in node.getchildren(): ctag = child.tag ctree = self._parse_node(child) cdict = self._make_dict(ctag, ctree) if ctag not in tree: # First time found tree.update(cdict) continue old = tree[ctag] if not isinstance(old, list): tree[ctag] = [old] # Multi entries, change to list tree[ctag].append(ctree) # Add new entry return tree
def _make_dict(self, tag, value): """Generate a new dict with tag and value If tag is like '{http://cs.sfsu.edu/csc867/myscheduler}patients', split it first to: http://cs.sfsu.edu/csc867/myscheduler, patients """ tmp = value result = re.compile("\{(.*)\}(.*)").search(tag) if result: tmp = OODict() tmp.xmlns, tag = result.groups() # We have a namespace! tmp.value = value return OODict({tag: tmp})