3 @qhcqF @s`UddlZddlZddlZddlmZmZmZmZmZm Z m Z ddl Z ddl Z ddl Z ddl mZGdddeZee jjejddddZejejd d d Ze ee jjfeee eeeeffd d dZGdddeZGdddeZGdddeZeeedZeee eeeeeeffe jeeeeefeeeeddddZdS)N)AnyDictListOptionalType TYPE_CHECKINGUnion)clic@seZdZejeeeeefddddZedddZ eddd Z ddd d Z ej j dd d Zeej jeej j fdddZeej j dddZddddZeeefdddZdS) GitlabCLIN)glwhatactionargsreturncCstj|tjjd|_|jj|_|jdd|_ |j |_ ||_ ||_ ttjj|jjd|_trn|jjdk snt|jj|j |j_|j||_|jjrxJ|jjjD]:\}}||j jkr|}|j|j ||j|j |<qWdS)N) namespace-_Manager)r Z what_to_clsgitlabv4objectscls__name__cls_namereplacer lowerr r rgetattrmgr_clsr_pathAssertionErrormgr_typesitemskeysZ set_from_cliget)selfr r r r attr_nameZtype_clsobjr(L/home/ec2-user/environment/venv/lib/python3.6/dist-packages/gitlab/v4/cli.py__init__s$   zGitlabCLI.__init__)rcCsNd|j|jf}t||r&t||Sd|j}t||rFt||S|jS)Nzdo_%s_%szdo_%s)r r hasattrr do_custom)r%methodr(r(r)__call__Bs     zGitlabCLI.__call__cCstj|j|jd}|ri}|jjrFx|jjD]}|j|||<q0Wt|jt j j st rlt |jjtslt|jj|jj||jj<|j|j|}|jjdd}t||f|jSt|j|jf|jSdS)Nrr)r custom_actionsrr r _from_parent_attrsr issubclassrrmixinsGetWithoutIdMixinr isinstance_id_attrstrrpoprr)r%Zin_objdatakr' method_namer(r(r)r,PszGitlabCLI.do_customcCspy<|jjjt|jddd}|jjj}tjj j |Wn.t k rj}zt j d|WYdd}~XnXdS)NZ project_idT)lazyz!Impossible to download the export)r Zprojectsr$intrexportsdownloadsysstdoutbufferwrite Exceptionr die)r%projectr9er(r(r)do_project_export_downloadcs z$GitlabCLI.do_project_export_downloadcCs^trt|jtjjsty|jj|j}Wn.t k rX}zt j d|WYdd}~XnX|S)NzImpossible to create object) rr5r rr3Z CreateMixinrcreaterrDr rE)r%resultrGr(r(r) do_createlszGitlabCLI.do_createcCs`trt|jtjjsty|jjf|j}Wn.t k rZ}zt j d|WYdd}~XnX|S)NzImpossible to list objects) rr5r rr3Z ListMixinrlistrrDr rE)r%rJrGr(r(r)do_listuszGitlabCLI.do_listcCst|jtjjr`y|jjfddi|j}Wn.tk rZ}ztj d|WYdd}~XnX|St rt|jtjj sxt t|j jtst |jj|j j}y|jj|fddi|j}Wn.tk r}ztj d|WYdd}~XnX|S)NidzImpossible to get objectr<F)r5r rr3r4r$rrDr rErZGetMixinrrr6r7r8)r%rJrGrNr(r(r)do_getszGitlabCLI.do_getcCstr*t|jtjjstt|jjt s*t|j j |jj}y|jj |f|j Wn.t k r~}ztjd|WYdd}~XnXdS)NzImpossible to destroy object)rr5r rr3Z DeleteMixinrrr6r7rr8deleterDr rE)r%rNrGr(r(r) do_deleteszGitlabCLI.do_deletecCstrt|jtjjstt|jtjj r.d}n&trDt|j j t sDt|j j|j j }y|jj||j }Wn.tk r}ztjd|WYdd}~XnX|S)NzImpossible to update object)rr5r rr3Z UpdateMixinrr2rr4rr6r7rr8updaterDr rE)r%rNrJrGr(r(r) do_updateszGitlabCLI.do_update)r __module__ __qualname__rGitlabr7rr*rr.r,rHbase RESTObjectrKrZRESTObjectListrrMrrOrQrSr(r(r(r)r s!  "  r )r sub_parserrc s6jd}ttjj|}xvdD]l}t||s2q |j|jddd |jrzx(|jD]}jd |j d d d d qXW|dkrx(|j D]}jd |j d d dd qWjddd jddd jdddd|dkrj dk rj j d d }jd |d d |dkrt tj jsTj dk rTj j d d }jd |d d x*|jD] }jd |j d d dd q\W|dkrx,|jjD] }jd |j d d d d qWx,|jjD] }jd |j d d dd qW|dkr j dk rj j d d }jd |d d x8|jjD],}|j kr$jd |j d d d d q$Wx8|jjD],}|j kr^jd |j d d dd q^Wq Wjtjkrj}xtj|D]}|j||jrx*|jD] }jd |j d d d d qWjddd t tj js>j dk r>j j d d }jd |d d tj||\}} } fdd|Dfdd| DqW|jtjkr2|j}xtj|D]}|j||jrx*|jD] }jd |j d d d d qWjddd tj||\}} } fdd|Dfdd| DqWdS)NrrLr$rIrRrPz--sudoF)requiredz--%srrTz--pagez --per-pagez--all store_true)rZr cs0g|](}|jkrjd|jddddqS)z--%srrT)rZ)r6 add_argumentr).0x)rsub_parser_actionr(r) sz1_populate_sub_parser_by_class..cs0g|](}|jkrjd|jddddqS)z--%srrF)rZ)r6r\r)r]r^)rr_r(r)r`scs0g|](}|jkrjd|jddddqS)z--%srrT)rZ)r6r\r)r]r^)rr_r(r)r`$scs0g|](}|jkrjd|jddddqS)z--%srrF)rZ)r6r\r)r]r^)rr_r(r)r`+s)rLr$rIrRrP)rrrrrr+ add_parserr\r1rZ _list_filtersr6r2r3r4Z_optional_get_attrsZ _create_attrsrZoptionalZ _update_attrsr r0) rrYZ mgr_cls_namer action_namer^Zid_attrnamerZrbdummyr()rr_r)_populate_sub_parser_by_classs                        rf)parserrcCs|jdddd}d|_g}xFtjjjjD]4}t|ts:q*t |tj j r*|j dk r*|j |j q*W|jtjddx@|D]8}tj|}|j|}|jdd d d}t||d|_qzW|S) Nobjectr zObject to manipulate.)titledesthelpTr)keyr ZwhactionzAction to execute.)add_subparsersrZrrr__dict__valuesr5typer2rWZ RESTManagerZ_obj_clsappendsortoperator attrgetterr Z cls_to_whatrarf)rgZ subparsersclassesrZarg_nameZ object_groupZobject_subparsersr(r(r) extend_parser3s&         rv)r'fieldsrcs0t|tr|Sr*fdd|jjDS|jS)Ncsi|]\}}|kr||qSr(r()r]r:v)rwr(r) Wszget_dict..)r5r7 attributesr")r'rwr()rwr)get_dictPs  r{c@sVeZdZeeeeeffeddddZeeee j j feeeddddZ dS) JSONPrinterN)dkwargsrcKsddl}t|j|dS)Nr)jsonprintdumps)r%r}r~rr(r(r)display\szJSONPrinter.display)r9rwr~rc s(ddl}t|jfdd|DdS)Nrcsg|]}t|qSr()r{)r]r')rwr(r)r`isz,JSONPrinter.display_list..)rrr)r%r9rwr~rr()rwr) display_listaszJSONPrinter.display_list) rrTrUrr7rrrrrrWrXrr(r(r(r)r|[s "r|c@sVeZdZeeeeeffeddddZeeee j j feeeddddZ dS) YAMLPrinterN)r}r~rc Ks@yddl}t|j|ddWntk r:tdYnXdS)NrF)default_flow_stylez\PyYaml is not installed. Install it with `pip install PyYaml` to use the yaml output feature)yamlr safe_dump ImportErrorexit)r%r}r~rr(r(r)rms zYAMLPrinter.display)r9rwr~rc sNy,ddl}t|jfdd|DddWntk rHtdYnXdS)Nrcsg|]}t|qSr()r{)r]r')rwr(r)r`sz,YAMLPrinter.display_list..F)rz\PyYaml is not installed. Install it with `pip install PyYaml` to use the yaml output feature)rrrrr)r%r9rwr~rr()rwr)ryszYAMLPrinter.display_list) rrTrUrr7rrrrrrWrXrr(r(r(r)rls "rc@sVeZdZeeeeeffeddddZeeee j j feeeddddZ dS) LegacyPrinterN)r}r~rc  s^|jdd}|jdd}|jd}tr2|dk s2ttttftddfdd }|rt|trl|||dS|j rt ||j d}t d |j |f|j }|j r|j |j |||ntrt|tjjst|j rt ||j }t d |j jd d |f|jrZt ||jpd } | jd djdd} d |j| f} t| dkrR| ddd} t | dS)NverboseFpaddingrr')r}rrcsx|t|jD]l}||}t|tr\tdd||jddf|d}j|d||dqtdd||jdd|fqWdS) Nz%s%s: rrr/T)rrr'z%s%s: %s)sortedr#r5dictrrr)r}rr:rxZ new_padding)r%r(r) display_dicts z+LegacyPrinter.display..display_dictz%s: %srrNone  rOLz...)r$rrrr7rr=r5rr6rrrzr8rrWrXrZ_short_print_attrlen) r%r}r~rrr'rrNattrsvalueliner()r%r)rs:          zLegacyPrinter.display)r9rwr~rcKsT|jdd}xB|D]:}t|tjjr<|jt||||dnt|tdqWdS)NrF)rr'r)r$r5rrWrXrr{r)r%r9rwr~rr'r(r(r)rs   zLegacyPrinter.display_list) rrTrUrr7rrrrrrWrXrr(r(r(r)rs "2r)rlegacyr)r r r rroutputrwrc Cst||||d}|}t|} t|tr<| j|d|dnt|trX| j|||dnjt|tjj r~| jt ||||dnDt|t rt |n0t|t rtjjj|nt|drt |jdS)N)r r r rT)rr')rdecode)r PRINTERSr5rrrLrrrWrXr{r7rbytesr@rArBrCr+r) r r r rrrrwZg_clir9printerr(r(r)runs        r) argparsersr@typingrrrrrrrrZ gitlab.baseZgitlab.v4.objectsr rhr rWrX_SubParsersActionrfArgumentParserrvr7r{r|rrrrVboolrr(r(r(r)s<$  #C*