Ejemplo n.º 1
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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