Example #1
0
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]))
Example #2
0
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]))
Example #3
0
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)
Example #4
0
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)