Ejemplo n.º 1
0
def to_list(L):
    """
    Convert an iterable object to a list.

    Works with nested iterables.
    """
    if isiterable(L): return [to_list(item) for item in L]
    else: return L
Ejemplo n.º 2
0
def reorder(order, data, level):
    """
    Reorder Sequence data according to the request.

    """
    if not (order and isiterable(data)):
        return data
    if level == 0:
        return tuple(data[i] for i in order)
    else:
        return [reorder(order, value, level-1) for value in data]
Ejemplo n.º 3
0
def reorder(order, data, level):
    """
    Reorder Sequence data according to the request.

    """
    if not (order and isiterable(data)):
        return data
    if level == 0:
        return tuple(data[i] for i in order)
    else:
        return [reorder(order, value, level - 1) for value in data]
Ejemplo n.º 4
0
def get_type(values):
    # Direct conversion for arrays.
    if hasattr(values, 'dtype'):
        return typemap[values.dtype.char]  # numpy.array
    elif hasattr(values, 'typecode'):
        return typemap[values.typecode]    # array.array

    # Map Python type to DAP type.
    if not isiterable(values):
        values = [values]
    types = [typeconvert(atom) for atom in values]
    precedence = [String, Float64, Int32]
    types.sort(key=precedence.index)
    return types[0]
Ejemplo n.º 5
0
def _recursive_build(attr, values, level=0):
    """
    Recursive function to build the DAS.
    
    """
    # Check for metadata.
    if isinstance(values, dict):
        yield '%s%s {\n' % ((level+1) * INDENT, attr)
        for k, v in values.items():
            for line in _recursive_build(k, v, level+1):
                yield line
        yield '%s}\n' % ((level+1) * INDENT)
    else:
        type_ = get_type(values).descriptor
        if not isiterable(values):
            values = [values]

        # Encode values
        values = [encode_atom(atom) for atom in values]
        yield '%s%s %s %s;\n' % ((level+1) * INDENT, type_,
                attr.replace(' ', '_'), ', '.join(values))