def __init__(cls, what, bases=None, dict=None): super().__init__(what, bases, dict) cls.__processors = sortedlist() cls.__methods = sortedlist() cls.__options = sortedlist() cls.__names = set() # cls.__kwoptions = [] for typ in cls.__mro__: for name, value in filter(lambda x: isoption(x[1]), typ.__dict__.items()): if iscontextprocessor(value): cls.__processors.insort((value._creation_counter, value)) continue if not value.name: value.name = name if not name in cls.__names: cls.__names.add(name) cls.__options.insort( (not value.positional, value._creation_counter, name, value))
def test_sortedlist(): l = sortedlist() l.insort(2) l.insort(1) l.insort(3) l.insort(2) assert l == [1, 2, 2, 3]
def __init__(cls, what, bases=None, dict=None): super().__init__(what, bases, dict) cls.__processors = sortedlist() cls.__processors_cache = None cls.__methods = sortedlist() cls.__options = sortedlist() cls.__names = set() # cls.__kwoptions = [] for typ in cls.__mro__: for name, value in filter(lambda x: isoption(x[1]), typ.__dict__.items()): if iscontextprocessor(value): cls.__processors.insort((value._creation_counter, value)) continue if not value.name: value.name = name if not name in cls.__names: cls.__names.add(name) cls.__options.insort((not value.positional, value._creation_counter, name, value)) # Docstring formating _options_doc = [] for _positional, _counter, _name, _value in cls.__options: _param = _name if _value.type: _param = get_name(_value.type) + ' ' + _param prefix = ':param {}: '.format(_param) for lineno, line in enumerate((_value.__doc__ or '').split('\n')): _options_doc.append((' ' * len(prefix) if lineno else prefix) + line) cls.__doc__ = '\n\n'.join( map( str.strip, filter(None, ( cls.__doc__, '\n'.join(_options_doc) )) ) )