summaryrefslogtreecommitdiffstats
path: root/rtemstoolkit/macros.py
diff options
context:
space:
mode:
Diffstat (limited to 'rtemstoolkit/macros.py')
-rw-r--r--rtemstoolkit/macros.py78
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()))