def rawniml2string(p, form='text'): if type(p) is list: nb = '\n'.encode() return nb.join(rawniml2string(v, form) for v in p) if not form in ['text', 'binary', 'base64']: raise ValueError("Illegal form %s" % form) q = p.copy() # make a shallow copy if 'nodes' in q: s_body = rawniml2string(q.pop('nodes'), form) # recursion else: data = q.pop('data') data = types.nimldataassupporteddtype( data) # ensure the data format is supported by NIML s_body = _data2string(data, form) if form == 'text': q.pop('ni_form', None) # defaults to text, remove if already there else: byteorder = types.data2ni_form(data, form) if byteorder: q['ni_form'] = byteorder # remove some unncessary fields for f in ['vec_typ', 'vec_len', 'vec_num']: q.pop(f, None) s_name = q.pop('name', None).encode() s_header = _header2string(q) d = map(lambda x: x.encode(), ['<', '\n', ' >', '</', '>']) return b''.join( (d[0], s_name, d[1], s_header, d[2], s_body, d[3], s_name, d[4]))
def rawniml2string(p, form='text'): if type(p) is list: nb = '\n'.encode() return nb.join(rawniml2string(v, form) for v in p) if not form in ['text', 'binary', 'base64']: raise ValueError("Illegal form %s" % form) q = p.copy() # make a shallow copy if 'nodes' in q: s_body = rawniml2string(q.pop('nodes'), form) # recursion else: data = q.pop('data') data = types.nimldataassupporteddtype(data) # ensure the data format is supported by NIML s_body = _data2string(data, form) if form == 'text': q.pop('ni_form', None) # defaults to text, remove if already there else: byteorder = types.data2ni_form(data, form) if byteorder: q['ni_form'] = byteorder # remove some unncessary fields for f in ['vec_typ', 'vec_len', 'vec_num']: q.pop(f, None) s_name = q.pop('name', None).encode() s_header = _header2string(q) d = map(lambda x:x.encode(), ['<', '\n', ' >', '</', '>']) return b''.join((d[0], s_name, d[1], s_header, d[2], s_body, d[3], s_name, d[4]))
def rawniml2string(p, form='text'): '''Converts a raw NIML element to string representation Parameters ---------- niml: dict Raw NIML element form: 'text', 'binary', 'base64' Output form of niml Returns ------- s: bytearray String representation of niml in output form 'form'. ''' if type(p) is list: nb = '\n'.encode() return nb.join(rawniml2string(v, form) for v in p) if not form in ['text', 'binary', 'base64']: raise ValueError("Illegal form %s" % form) q = p.copy() # make a shallow copy has_body = True if 'nodes' in q: s_body = rawniml2string(q.pop('nodes'), form) # recursion elif 'data' in q: data = q.pop('data') data = types.nimldataassupporteddtype( data) # ensure the data format is supported by NIML s_body = _data2string(data, form) if form == 'text': q.pop('ni_form', None) # defaults to text, remove if already there else: byteorder = types.data2ni_form(data, form) if byteorder: q['ni_form'] = byteorder # remove some unncessary fields for f in ['vec_typ', 'vec_len', 'vec_num']: q.pop(f, None) else: has_body = False s_name = q.pop('name', None).encode() s_header = _header2string(q) if has_body: delim = ['<', '\n', ' >', '</', '>'] values = [s_name, s_header, s_body, s_name] else: delim = ['<', '\n', '/>'] values = [s_name, s_header] delim_enc = map(lambda x: x.encode(), delim) n_delim = len(delim_enc) assert (n_delim == len(values) + 1) # zip with unequal length elems = [] for i in xrange(n_delim): elems.append(delim_enc[i]) if i + 1 < n_delim: # one element less than the number of delimeters elems.append(values[i]) return b''.join(elems)
def rawniml2string(p, form='text'): '''Converts a raw NIML element to string representation Parameters ---------- niml: dict Raw NIML element form: 'text', 'binary', 'base64' Output form of niml Returns ------- s: bytearray String representation of niml in output form 'form'. ''' if type(p) is list: nb = '\n'.encode() return nb.join(rawniml2string(v, form) for v in p) if not form in ['text', 'binary', 'base64']: raise ValueError("Illegal form %s" % form) q = p.copy() # make a shallow copy has_body = True if 'nodes' in q: s_body = rawniml2string(q.pop('nodes'), form) # recursion elif 'data' in q: data = q.pop('data') data = types.nimldataassupporteddtype(data) # ensure the data format is supported by NIML s_body = _data2string(data, form) if form == 'text': q.pop('ni_form', None) # defaults to text, remove if already there else: byteorder = types.data2ni_form(data, form) if byteorder: q['ni_form'] = byteorder # remove some unncessary fields for f in ['vec_typ', 'vec_len', 'vec_num']: q.pop(f, None) else: has_body = False s_name = q.pop('name', None).encode() s_header = _header2string(q) if has_body: delim = ['<', '\n', ' >', '</', '>'] values = [s_name, s_header, s_body, s_name] else: delim = ['<', '\n', '/>'] values = [s_name, s_header] delim_enc = map(lambda x: x.encode(), delim) n_delim = len(delim_enc) assert (n_delim == len(values) + 1) # zip with unequal length elems = [] for i in xrange(n_delim): elems.append(delim_enc[i]) if i + 1 < n_delim: # one element less than the number of delimeters elems.append(values[i]) return b''.join(elems)