diff options
Diffstat (limited to 'rtemstoolkit/macros.py')
-rw-r--r-- | rtemstoolkit/macros.py | 78 |
1 files changed, 53 insertions, 25 deletions
diff --git a/rtemstoolkit/macros.py b/rtemstoolkit/macros.py index 8db0729..c9410ae 100644 --- a/rtemstoolkit/macros.py +++ b/rtemstoolkit/macros.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2014 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -32,14 +32,24 @@ # Macro tables. # +from __future__ import print_function + import copy import inspect import re import os import string -import error -import path +# +# Support to handle use in a package and as a unit test. +# If there is a better way to let us know. +# +try: + from . import error + from . import path +except (ValueError, SystemError): + import error + import path # # Macro tables @@ -54,7 +64,7 @@ class macros: def __iter__(self): return self - def next(self): + def __next__(self): if self.index < len(self.keys): key = self.keys[self.index] self.index += 1 @@ -64,6 +74,19 @@ class macros: def iterkeys(self): return self.keys + def _unicode_to_str(self, us): + try: + if type(us) == unicode: + return us.encode('ascii', 'replace') + except: + pass + try: + if type(us) == bytes: + return us.encode('ascii', 'replace') + except: + pass + return us + def __init__(self, name = None, original = None, rtdir = '.'): self.files = [] self.macro_filter = re.compile(r'%{[^}]+}') @@ -156,7 +179,7 @@ class macros: return text def __iter__(self): - return macros.macro_iterator(self.keys()) + return macros.macro_iterator(list(self.keys())) def __getitem__(self, key): macro = self.get(key) @@ -167,12 +190,17 @@ class macros: def __setitem__(self, key, value): if type(key) is not str: raise TypeError('bad key type (want str): %s' % (type(key))) + if type(value) is not tuple: + value = self._unicode_to_str(value) if type(value) is str: value = ('none', 'none', value) if type(value) is not tuple: raise TypeError('bad value type (want tuple): %s' % (type(value))) if len(value) != 3: raise TypeError('bad value tuple (len not 3): %d' % (len(value))) + value = (self._unicode_to_str(value[0]), + self._unicode_to_str(value[1]), + self._unicode_to_str(value[2])) if type(value[0]) is not str: raise TypeError('bad value tuple type field: %s' % (type(value[0]))) if type(value[1]) is not str: @@ -195,10 +223,10 @@ class macros: return self.has_key(key) def __len__(self): - return len(self.keys()) + return len(list(self.keys())) def keys(self): - keys = self.macros['global'].keys() + keys = list(self.macros['global'].keys()) for rm in self.get_read_maps(): for mk in self.macros[rm]: if self.macros[rm][mk][1] == 'undefine': @@ -211,12 +239,12 @@ class macros: def has_key(self, key): if type(key) is not str: raise TypeError('bad key type (want str): %s' % (type(key))) - if self.key_filter(key) not in self.keys(): + if self.key_filter(key) not in list(self.keys()): return False return True def maps(self): - return self.macros.keys() + return list(self.macros.keys()) def get_read_maps(self): return [rm[5:] for rm in self.read_maps] @@ -239,7 +267,7 @@ class macros: trace_me = False if trace_me: - print '[[[[]]]] parsing macros' + print('[[[[]]]] parsing macros') orig_macros = copy.copy(self.macros) map = 'global' lc = 0 @@ -254,8 +282,8 @@ class macros: l_remaining = l for c in l: if trace_me: - print ']]]]]]]] c:%s(%d) s:%s t:"%s" m:%r M:%s' % \ - (c, ord(c), state, token, macro, map) + print(']]]]]]]] c:%s(%d) s:%s t:"%s" m:%r M:%s' % \ + (c, ord(c), state, token, macro, map)) l_remaining = l_remaining[1:] if c is '#' and not state.startswith('value'): break @@ -378,7 +406,7 @@ class macros: mc.close() self.files += [n] return - except IOError, err: + except IOError as err: pass raise error.general('opening macro file: %s' % \ (path.host(self.expand(name)))) @@ -452,7 +480,7 @@ class macros: def find(self, regex): what = re.compile(regex) keys = [] - for key in self.keys(): + for key in list(self.keys()): if what.match(key): keys += [key] return keys @@ -490,23 +518,23 @@ class macros: if __name__ == "__main__": import copy import sys - print inspect.getfile(macros) - m = macros(name = 'defaults.mc') + print(inspect.getfile(macros)) + m = macros() d = copy.copy(m) m['test1'] = 'something' - if d.has_key('test1'): - print 'error: copy failed.' + if 'test1' in d: + print('error: copy failed.') sys.exit(1) m.parse("[test]\n" \ "test1: none, undefine, ''\n" \ "name: none, override, 'pink'\n") - print 'set test:', m.set_read_map('test') + print('set test:', m.set_read_map('test')) if m['name'] != 'pink': - print 'error: override failed. name is %s' % (m['name']) + print('error: override failed. name is %s' % (m['name'])) sys.exit(1) - if m.has_key('test1'): - print 'error: map undefine failed.' + if 'test1' in m: + print('error: map undefine failed.') sys.exit(1) - print 'unset test:', m.unset_read_map('test') - print m - print m.keys() + print('unset test:', m.unset_read_map('test')) + print(m) + print(list(m.keys())) |