o 2&aV$@sddlZddlZddlZddlZddlZddlZddlZddlmZddlm Z ddlm Z ddZ ddZ d(d d Z d d ZddZddZddZddZddZejddZddZddZGdddeZd d!ZGd"d#d#eZGd$d%d%eZGd&d'd'eZdS))N)sixget_binary_stdout)get_popen_kwargs_for_pager_cmdcsZtfdddDsdStfdddDs)ttjtddd StS) Nc3|]}|vVqdSN.0charvaluer./usr/lib/python3/dist-packages/awscli/utils.py z"split_on_commas..)"\'][,c3rrrr r rrrr)rrrrr escapecharr)anysplitlistcsvreaderrStringIO_split_with_quotesr rr rsplit_on_commass  r c Cs<zttjt|ddd}Wntjytd|wt|}g}|D]t}t|}| d}|dkrs| ddkrs|dusH| ||krsd|vrO|}nt |||d}t ||dd}|d|d d |}| |q'|dur}| |q'||dkr| ||d q't |||||}| |q'|S) NrrrzBad csv value: %sz=[rr)rrrrrError ValueErroriter_find_quote_char_in_partfind _eat_itemsrjoinappendcountreplace) r parts iter_parts new_partspart quote_char list_start new_chunk list_itemsrrrr's8      rr$cCsd|}||dg} zt|}Wn tyt|w|||d||r,nq d|S)z Eat items from an iterator, optionally replacing characters with a blank and stopping when the end_char has been reached. r$Tr)r.radvance_iterator StopIterationr&r,endswithr+)r r0r2end_char replace_charcurrentchunksrrrr*Rs   r*cCs|d|vr d|vr dSd}|d}|d}|dkr"|dkr"d}|S|dkr.|dkr.d}|S||kr6d}|S||krttjtj}z dVWttj|dSttj|wr)signalSIGINTSIG_IGN)originalrrr ignore_ctrl_cs "rccCs|jd||ddS)Nztop-level-args-parsed) parsed_argssession)emit)reargsrrr emit_top_level_args_parsed_events rhc Cs:z ttjWSty}zWYd}~dSd}~ww)NF)osisattysysstdoutfileno Exception)errris_a_ttys rpc@s<eZdZd ddZejd ddZejddZdd ZdS) OutputStreamFactoryNcCs||_|dur tj|_dSdSr)_popen subprocessPopen)selfpopenrrr__init__s zOutputStreamFactory.__init__ccsd||}z&z|jdi|}|jVWn tyYnwW|dSW|dS|w)Nr)_get_process_pager_kwargsrrstdinIOError communicate)rupreferred_pager popen_kwargsprocessrrrget_pager_streams    z$OutputStreamFactory.get_pager_streamccstVdSrrrurrrget_stdout_streams z%OutputStreamFactory.get_stdout_streamcCst|}tj|d<|S)Nry)rrsPIPE)ru pager_cmdkwargsrrrrxs z-OutputStreamFactory._get_process_pager_kwargsr) __name__ __module__ __qualname__rw contextlibcontextmanagerrrrxrrrrrqs    rqcCs(|d|t||ddS)N )writer text_type)exoutfilerrrwrite_exceptions rc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)rLcCs|durdSg}||||S)zWalk through and visit shapes for introspection :type shape: botocore.model.Shape :param shape: Shape to walk :type visitor: BaseShapeVisitor :param visitor: The visitor to call when walking a shape N)_walkrurIvisitorstackrrrrMs zShapeWalker.walkcCsB|j|vrdS||jt|d|j|j||||dS)Nz_walk_%s)namer,rHrP_default_scalar_walkrOrrrrrs   zShapeWalker._walkcCs2||||jD] \}}||||q dSr)_do_shape_visitmembersitemsr)rurIrr_ member_shaperrr_walk_structures zShapeWalker._walk_structurecC |||||j||dSr)rrmemberrrrr _walk_list  zShapeWalker._walk_listcCrr)rrr rrrr _walk_map rzShapeWalker._walk_mapcCs|||dSr)rrrrrrz ShapeWalker._default_scalar_walkcCs||dSr) visit_shape)rurIrrrrrszShapeWalker._do_shape_visitN) rrrrMrrrrrrrrrrrLs  rLc@seZdZdZddZdS)BaseShapeVisitorz&Visit shape encountered by ShapeWalkercCsdSrrrurIrrrrszBaseShapeVisitor.visit_shapeN)rrr__doc__rrrrrrs rc@s eZdZdZddZddZdS)rKz$Record shapes visited by ShapeWalkercCs g|_dSr)rNrrrrrw s zShapeRecordingVisitor.__init__cCs|j|dSr)rNr,rrrrr#rz!ShapeRecordingVisitor.visit_shapeN)rrrrrwrrrrrrKs rK)r$)rr_r[rrirkrs awscli.compatrrrr rr*r(rFrGrSrYr^rrcrhrpobjectrqrrLrrKrrrrs8     +  -