j f@sdZddlmZddlmZddlmZddlmZddlmZm Z m Z m Z m Z m Z ddlmZejdhBZGd d d ejZd S) ajFixer for dict methods. d.keys() -> list(d.keys()) d.items() -> list(d.items()) d.values() -> list(d.values()) d.iterkeys() -> iter(d.keys()) d.iteritems() -> iter(d.items()) d.itervalues() -> iter(d.values()) d.viewkeys() -> d.keys() d.viewitems() -> d.items() d.viewvalues() -> d.values() Except in certain very specific contexts: the iter() can be dropped when the context is list(), sorted(), iter() or for...in; the list() can be dropped when the context is list() or sorted() (but not iter() or for...in!). Special contexts that apply to both: list(), sorted(), tuple() set(), any(), all(), sum(). Note: iter(d.keys()) could be written as iter(d) but since the original d.iterkeys() was also redundant we don't fix this. And there are (rare) contexts where it makes a difference (e.g. when passing it as an argument to a function that introspects the argument). )pytree)patcomp)token) fixer_base)NameCallLParenRParenArgListDot) fixer_utiliterc@s^eZdZdZdZddZdZejeZ dZ eje Z ddZ d S) FixDictTa power< head=any+ trailer< '.' method=('keys'|'items'|'values'| 'iterkeys'|'iteritems'|'itervalues'| 'viewkeys'|'viewitems'|'viewvalues') > parens=trailer< '(' ')' > tail=any* > c Cs|d}|dd}|d}|j}|j}|jd}|jd} |s^| rq|dd}n|dkstt|d d |D}d d |D}| o|j||} |tj|jt t |d|j g|dj g} tj|j | } | p-| s`d| _ tt |rKdnd| g} n|rtj|j | g|} n|j | _ | S)Nheadmethodtailr ZviewkeysitemsvaluescSsg|]}|jqS)clone).0nrr;/opt/alt/python34/lib64/python3.4/lib2to3/fixes/fix_dict.py Bs z%FixDict.transform..cSsg|]}|jqSr)r)rrrrrrCs prefixZparenslist)zkeyszitemszvalues)symsvalue startswithAssertionErrorreprin_special_contextrZNodeZtrailerr rrrZpowerr) selfnoderesultsrrrr Z method_nameisiterZisviewZspecialargsnewrrr transform7s4        ' zFixDict.transformz3power< func=NAME trailer< '(' node=any ')' > any* >zmfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > cCs|jdkrdSi}|jjdk r|jj|jj|r|d|kr|rm|djtkS|djtjkSn|sdS|jj|j|o|d|kS)NFr'func)parentp1matchr! iter_exemptr consuming_callsp2)r&r'r)r(rrrr%[szFixDict.in_special_contextN) __name__ __module__ __qualname__Z BM_compatibleZPATTERNr,ZP1rZcompile_patternr/ZP2r3r%rrrrr*s   rN)__doc__rrrZpgen2rrr rrrr r r r2r1ZBaseFixrrrrrs.