# --- define helper to name termios settings list fields from collections import OrderedDict class DictRecord(OrderedDict): """ Wrapper that transforms list to OrderedDict adding names to fields and enabling attribute access. Subclass and set names in class.NAMES attribute. class Point(DictRecord): NAMES = ['x', 'y'] p = Point( [1, 2] ) p.x = 4 p.values() """ NAMES = [] def __init__(self, somelist=None): if len(somelist) != len(self.NAMES): raise ValueError('List length doesn\'t match name list') tuplist = zip(self.NAMES, somelist) super(DictRecord, self).__init__(tuplist) def __getattr__(self, name): if name not in self.NAMES: raise AttributeError('No such field \'%s\'' % name) else: return self.__getitem__(name) def __setattr__(self, name, value): if name.startswith('_OrderedDict'): return OrderedDict.__setattr__(self, name, value) elif name in self.NAMES: return self.__setitem__(name, value) else: raise AttributeError('No such field \'%s\'' % name) class TermiosState(DictRecord): NAMES = ['iflag', 'oflag', 'cflag', 'lflag', 'ispeed', 'ospeed', 'cc']