Changeset 25484


Ignore:
Timestamp:
08/27/20 05:03:09 (5 years ago)
Author:
bdef
Message:

CHG: export of enumdefinitions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.py

    r25460 r25484  
    1717        else:
    1818            for r in row:
    19                 #print("appending {}".format(r))
    2019                self.data.append(r)
    2120
     
    9897                    if ncvar is not None:
    9998                        FillVar(ncvar, Var)
    100                 else:  # this is a list of fields, specific treatment needed
     99                else:  # this is a list of fields, specific treatment needed (usually results or outputdefinitions)
    101100                    if verbose > 4:
    102101                        print("list of fields happens for {}.{}".format(group, field))
    103102                    Listsize = len(md.__dict__[group].__dict__[field])
    104                     Subgroup = NCgroup.createGroup(str(field))
    105                     try:
    106                         #take the class of the first element to define nc class and get the list of variables
    107                         Subgroup.__setattr__('classtype', md.__dict__[group].__dict__[field][0].__class__.__name__)
    108                         subfields = dict.keys(md.__dict__[group].__dict__[field][0].__dict__)
    109                     except (IndexError, AttributeError):
    110                         Subgroup.__setattr__('classtype', md.__dict__[group].__dict__[field].__class__.__name__)
    111                         subfields = dict.keys(md.__dict__[group].__dict__[field].__getitem__(0))
    112 
    113                     for subfield in subfields:
    114                         if subfield not in['errlog', 'outlog']:
    115                             StackedVar = ResTable()
    116                             for listindex in range(0, Listsize):
    117                                 try:
    118                                     Var = md.__dict__[group].__dict__[field].__getitem__(listindex).__dict__[subfield]
    119                                     lastindex = listindex + 1
    120                                 except AttributeError:
    121                                     Var = md.__dict__[group].__dict__[field].__getitem__(listindex)[subfield]
    122                                 except KeyError:
    123                                     #Some fields only exist for the first step
    124                                     lastindex = listindex
    125                                     continue
     103                    if group == 'results':  #for results we reshape the datas following time rather than subgrouping
     104                        Subgroup = NCgroup.createGroup(str(field))
     105                        try:
     106                            #take the class of the first element to define nc class and get the list of variables
     107                            Subgroup.__setattr__('classtype', md.__dict__[group].__dict__[field][0].__class__.__name__)
     108                            subfields = dict.keys(md.__dict__[group].__dict__[field][0].__dict__)
     109                        except (IndexError, AttributeError):
     110                            Subgroup.__setattr__('classtype', md.__dict__[group].__dict__[field].__class__.__name__)
     111                            subfields = dict.keys(md.__dict__[group].__dict__[field].__getitem__(0))
     112                        for subfield in subfields:
     113                            if subfield not in['errlog', 'outlog']:
     114                                StackedVar = ResTable()
     115                                for listindex in range(0, Listsize):
     116                                    try:
     117                                        Var = md.__dict__[group].__dict__[field].__getitem__(listindex).__dict__[subfield]
     118                                        lastindex = listindex + 1
     119                                    except AttributeError:
     120                                        Var = md.__dict__[group].__dict__[field].__getitem__(listindex)[subfield]
     121                                    except KeyError:
     122                                        #Some fields only exist for the first step
     123                                        lastindex = listindex
     124                                        continue
     125                                    Var = SqueezeVar(Var)
     126                                    StackedVar.update(Var)
     127                                if verbose > 4:
     128                                    print("=$$=creating var for {}.{}.{}".format(group, field, subfield))
     129                                    print("last index of the list is {}".format(lastindex))
     130                                StackedVar = SqueezeVar(StackedVar.finalize(int(lastindex)))
     131                                DimDict, ncvar = CreateVar(NCData, StackedVar, subfield, Subgroup, DimDict)
     132                                #and fill it up
     133                                if ncvar is not None:
     134                                    FillVar(ncvar, StackedVar)
     135                    elif group == 'outputdefinition':  #for outputdefinition we keep a subgroup format
     136                        for listindex in range(0, Listsize):
     137                            Subgroupname = str(md.__dict__[group].__dict__[field][listindex].definitionstring)
     138                            Subgroup = NCgroup.createGroup(Subgroupname)
     139                            Subgroup.__setattr__('classtype', md.__dict__[group].__dict__[field][listindex].__class__.__name__)
     140                            subfields = dict.keys(md.__dict__[group].__dict__[field][listindex].__dict__)
     141                            for subfield in subfields:
     142                                Var = md.__dict__[group].__dict__[field].__getitem__(listindex).__dict__[subfield]
    126143                                Var = SqueezeVar(Var)
    127                                 StackedVar.update(Var)
    128                             if verbose > 4:
    129                                 print("=$$=creating var for {}.{}.{}".format(group, field, subfield))
    130                                 print("last index of the list is {}".format(lastindex))
    131                             StackedVar = SqueezeVar(StackedVar.finalize(int(lastindex)))
    132                             DimDict, ncvar = CreateVar(NCData, StackedVar, subfield, Subgroup, DimDict)
    133                             #and fill it up
    134                             if ncvar is not None:
    135                                 FillVar(ncvar, StackedVar)
     144                                if verbose > 4:
     145                                    print("=--=creating var for {}.{}[{}].{}".format(group, field, listindex, subfield))
     146                                DimDict, ncvar = CreateVar(NCData, Var, subfield, Subgroup, DimDict)
     147                                #and fill it up
     148                                if ncvar is not None:
     149                                    FillVar(ncvar, Var)
     150                    else:
     151                        print("WARNING: unknown treatment for md.{}".format(group))
    136152
    137153            # No subgroup, we directly treat the variable
     
    220236    # treating scalar string or bool as atribute
    221237    if val_type in [str, bool]:
     238        if field == 'name':  # it looks like netCDF does not like attributes that are called "name"
     239            field = 'varname'
    222240        Group.__setattr__(str(field).swapcase(), str(var))
    223241        ncvar = None
     
    226244        #if all strings are the same set it as an attribute
    227245        if all(var == var[0]):
     246            if field == 'name':
     247                field = 'varname'
    228248            Group.__setattr__(str(field).swapcase(), str(var[0]))
    229249            ncvar = None
Note: See TracChangeset for help on using the changeset viewer.