Changeset 4795

Show
Ignore:
Timestamp:
11/14/08 08:52:09 (2 months ago)
Author:
martin_s
Message:
tracadvparseargs/parseargs.py
Enhanced multi argument to also take a list
of keys which should be allowed multiple times, or ['*'] which enables
always list mode. Untested!
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • advparseargsplugin/0.11/tracadvparseargs/parseargs.py

    r4771 r4795  
    1919        strict:: Enables strict checking of keys. 
    2020        multi:: Enables folding of muliple given keys into list. 
     21                If set to `True` values of multiple given keys will be returned 
     22                as list, but single given keys will return a scalar. 
     23                If set to a list only the values of the listed keys will be 
     24                returned as list, but always as list even when there is only one 
     25                value. 
     26                If this list contains `'*'`, __all__ values are __always__  
     27                returned as list. 
    2128        listonly:: If true only a list is returned, no directionary. 
    2229        minlen:: Extend returned list to given minimum length. Only used when 
     
    3037    largs  = [] 
    3138    kwargs = {} 
     39 
     40    # Handle multi list: 
     41    multilist = [] 
     42    alwayslist = False 
     43    if multi and isinstance(multi, list): 
     44        multilist = multi 
     45        multi = True 
     46        alwayslist = '*' in multilist 
    3247 
    3348    def strip (arg): 
     
    5570            if strict: 
    5671                kw = unicode(kw).encode('utf-8') 
    57             if multi and kw in kwargs: 
    58                 if isinstance(kwargs[kw], list): 
    59                     kwargs[kw].append( value ) 
     72 
     73            if not multi: 
     74                kwargs[kw] = value 
     75            elif not multilist: 
     76                if kw in kwargs: 
     77                    if isinstance(kwargs[kw], list): 
     78                        kwargs[kw].append( value ) 
     79                    else: 
     80                        kwargs[kw] = [ kwargs[kw], value ] 
    6081                else: 
    61                     kwargs[kw] = [ kwargs[kw], value ] 
     82                    kwargs[kw] = value 
     83            elif alwayslist or kw in multilist: 
     84                if kw not in kwargs: 
     85                    kwargs[kw] = [] 
     86                kwargs[kw].append(value) 
    6287            else: 
    6388                kwargs[kw] = value