def _recursive_convert_dict(self, obj): _add_redundant_about(obj) # rule 10... meta_list = [] to_del = set() for k, v in obj.items(): if k.startswith('^'): to_del.add(k) converted = _convert_hbf_meta_val_for_xml(k[1:], v) if isinstance(converted, list): meta_list.extend(converted) else: meta_list.append(converted) if isinstance(v, dict): self._recursive_convert_dict(v) elif isinstance(v, list): self._recursive_convert_list(v) for k in to_del: del obj[k] if meta_list: m = obj.get('meta') if m is None: obj['meta'] = meta_list elif isinstance(m, list): m.extend(meta_list) else: obj['meta'] = [m] + meta_list
def _recursive_convert_dict(self, obj): _add_redundant_about(obj) # rule 10... meta_list = [] to_del = set() for k, v in obj.items(): if k.startswith('^'): to_del.add(k) converted = _convert_hbf_meta_val_for_xml(k[1:], v) if isinstance(converted, list): meta_list.extend(converted) else: meta_list.append(converted) if isinstance(v, dict): self._recursive_convert_dict(v) elif isinstance(v, list): self._recursive_convert_list(v) for k in to_del: del obj[k] if meta_list: m = obj.get('meta') if m is None: obj['meta'] = meta_list elif isinstance(m, list): m.extend(meta_list) else: obj['meta'] = [m] + meta_list
def _partition_keys_for_xml(self, o): '''Breaks o into four content type by key syntax: attrib keys (start with '@'), text (value associated with the '$' or None), child element keys (all others) meta element ''' ak = {} tk = None ck = {} mc = {} #_LOG.debug('o = {o}'.format(o=o)) for k, v in o.items(): if k.startswith('@'): if k == '@xmlns': if '$' in v: ak['xmlns'] = v['$'] for nsk, nsv in v.items(): if nsk != '$': ak['xmlns:' + nsk] = nsv else: s = k[1:] if type(v) == bool: if v == True: v = u'true' else: v = u'false' ak[s] = UNICODE(v) elif k == '$': tk = v elif k.startswith('^') and (not self._migrating_from_bf): s = k[1:] val = _convert_hbf_meta_val_for_xml(s, v) _add_value_to_dict_bf(mc, s, val) elif (k == u'meta') and self._migrating_from_bf: s, val = _convert_bf_meta_val_for_xml(v) _add_value_to_dict_bf(mc, s, val) else: ck[k] = v return ak, tk, ck, mc
def _partition_keys_for_xml(self, o): '''Breaks o into four content type by key syntax: attrib keys (start with '@'), text (value associated with the '$' or None), child element keys (all others) meta element ''' ak = {} tk = None ck = {} mc = {} #_LOG.debug('o = {o}'.format(o=o)) for k, v in o.items(): if k.startswith('@'): if k == '@xmlns': if '$' in v: ak['xmlns'] = v['$'] for nsk, nsv in v.items(): if nsk != '$': ak['xmlns:' + nsk] = nsv else: s = k[1:] if type(v) == bool: if v == True: v = u'true' else: v = u'false' ak[s] = UNICODE(v) elif k == '$': tk = v elif k.startswith('^') and (not self._migrating_from_bf): s = k[1:] val = _convert_hbf_meta_val_for_xml(s, v) _add_value_to_dict_bf(mc, s, val) elif (k == u'meta') and self._migrating_from_bf: s, val = _convert_bf_meta_val_for_xml(v) _add_value_to_dict_bf(mc, s, val) else: ck[k] = v return ak, tk, ck, mc