Example #1
0
def pyobj_to_hdf(pyobj, hdf=None):

    def make_key(lst):
        return '.'.join([str(i) for i in lst])

    def process_value(value, current_key, hdf):

        if isinstance(value, list):
            for idx, item in enumerate(value):
                process_value(item, current_key + [idx], hdf)
        elif isinstance(value, dict):
            for key, item in value.iteritems():
                process_value(item, current_key + [key], hdf)
        elif isinstance(value, str):
            hdf.setValue(make_key(current_key), value)
        else:
            hdf.setValue(make_key(current_key), str(value))

    if not hdf:
        hdf = HDF()
    process_value(pyobj, [], hdf)
    return hdf
Example #2
0
def hdfFromKwargs(hdf=None, **kwargs):
    """If given an instance that has toHDF() method that method is invoked to get that object's HDF representation"""
    if not hdf:
        hdf = HDF()
    for key, value in kwargs.iteritems():
        if isinstance(value, dict):
            #print "dict:",value
            for k,v in value.iteritems():
                dkey = "%s.%s"%(key,k)
                #print "k,v,dkey:",k,v,dkey
                args = {dkey:v}
                hdfFromKwargs(hdf=hdf, **args)
        elif isinstance(value, (list, tuple)):
            #print "list:",value
            for i, item in enumerate(value):
                ikey = "%s.%s"%(key,i)
                #print "i,item:",i,item, ikey
                if isinstance(item, (list, tuple)):
                    args = {ikey:item}
                    hdfFromKwargs(hdf=hdf, **args)
                elif isinstance(item, dict):
                    args = {ikey:item}
                    hdfFromKwargs(hdf=hdf, **args)
                elif getattr(item, "HDF_ATTRIBUTES", False):
                    attrs = {}
                    for attr in item.HDF_ATTRIBUTES:
                        attrs[attr] = getattr(item, attr, "")
                    hdfFromKwargs(hdf=hdf, **{ikey:attrs})
                else:
                    hdf.setValue(ikey, str(item))
        elif getattr(value, "HDF_ATTRIBUTES", False):
            attrs = {}
            for attr in value.HDF_ATTRIBUTES:
                attrs[attr] = getattr(value, attr, "")
            hdfFromKwargs(hdf=hdf, **{key:attrs})
        else:
            hdf.setValue(key, str(value))
    #print "HDF:",hdf.dump()
    return hdf