# Contributors Listed Below - COPYRIGHT 2016 # [+] International Business Machines Corp. # # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. See the License for the specific language governing # permissions and limitations under the License. def dts_encode(obj, fd, **kw): ''' A rudimentary python to dts encoder. ''' indent = kw.get('indent', 0) depth = kw.setdefault('depth', 0) tab = indent * depth * ' ' kw['depth'] += 1 newline = '\n' if indent else ' ' context = kw.get('context') if(isinstance(obj, dict)): nodes = [] for k, v in obj.iteritems(): if(isinstance(v, dict)): nodes.append((k, v)) continue if(isinstance(v, basestring) and v.lower() == 'true'): fd.write('%s%s' % (tab, k)) elif(isinstance(v, basestring) and v.lower() == 'false'): continue else: fd.write('%s%s = ' % (tab, k)) dts_encode(v, fd, **kw) fd.write(";%s" % newline) for k, v in nodes: fd.write('%s%s {%s' % (tab, k, newline)) dts_encode(v, fd, **kw) fd.write('%s};%s' % (tab, newline)) if(isinstance(obj, int)): if context == 'int_list': fd.write("%d" % obj) else: fd.write("<%d>" % obj) if(isinstance(obj, basestring)): fd.write("\"%s\"" % obj) if(isinstance(obj, list)): ctx = 'int_list' if all((type(x) is int) for x in iter(obj)) else '' if ctx is 'int_list': delim = ' ' closure = ('<', '>') else: delim = ',' closure = ('', '') fd.write(closure[0]) if obj: for v in obj[:-1]: dts_encode(v, fd, context=ctx, **kw) fd.write(delim) dts_encode(obj[-1], fd, context=ctx) fd.write(closure[1])