B `M@sddlZddlZddlZddlZddlZddlZddlZddlmZddl Z ddl m Z ddl Tddl TddlmZGdddZdS) N)datetime) __version__)*)user_agent_extendedcseZdZeeeeeee e e e e eeedffdd ZeddZejddZddZd d Zd d d Zd!ddZddZd"ddZd#ddZd$ddZd%ddZddZddZZ S)&AsyncRestSessionFcstt|_t||_t||_||_||_||_ ||_ ||_ | |_ | |_ | |_| |_| |_t||_||_||_||_d|jkrtd|jdn|jddkr|jdd|_d|jdd|jd t|j|jd |_|jrt|_|j|tj |jtj!|d d |_"||_#d |ji|_$|j$%t&|j$'d|j$'d|j$'dd|jdd|j$d<|j#r|j#(d|j$dS)NZv0z5If you want to use the Python library with v0 paths (z was configured as the base URL), then install the v0 library. See the "Setup" section @ https://github.com/meraki/dashboard-api-python//zBearer zapplication/jsonzpython-meraki/aio- ) Authorizationz Content-Typez User-Agent)total)headerstimeoutversionselflogger __class__z$************************************api_keyz@Meraki dashboard API session initialized with these parameters: ))super__init__r_versionstrZ_api_key _base_url_single_request_timeout_certificate_path_requests_proxyZ_wait_on_rate_limit_nginx_429_retry_wait_time_action_batch_retry_wait_time_retry_4xx_error_retry_4xx_error_wait_time_maximum_retries _simulateasyncio Semaphore_concurrent_requests_semaphoreZ _be_geo_idZ_calleruse_iterator_for_get_pagessysexitr_headerssslcreate_default_context _sslcontextload_verify_locationsaiohttpZ ClientSessionZ ClientTimeout _req_session_logger _parametersupdatelocalspopinfo)rrrbase_urlZsingle_request_timeoutZcertificate_pathZrequests_proxyZwait_on_rate_limitZnginx_429_retry_wait_timeZaction_batch_retry_wait_timeZretry_4xx_errorZretry_4xx_error_wait_timeZmaximum_retriesZsimulateZmaximum_concurrent_requestsZ be_geo_idZcallerr&)rr/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/meraki/aio/rest_session.pyrsX           zAsyncRestSession.__init__cCs|jS)N)_use_iterator_for_get_pages)rr7r7r8r&gsz+AsyncRestSession.use_iterator_for_get_pagescCs |r|j|_n|j|_||_dS)N)_get_pages_iterator get_pages_get_pages_legacyr9)rvaluer7r7r8r&ks c s@|j4IdH"|j|||fddi|IdHSQIdHRXdS)Nallow_redirectsF)r%_request)rmetadatamethodurlkwargsr7r7r8requesttszAsyncRestSession.requestcsj|dd}|d}|jr(|d|j|jr<|d|j|d|jt|}d|ksbd|krh|}n |j|}|j}|jr|j ||j r|d kr|jr|j |d |d |d dSd} d} xt |D]x} | r| d} yR|jr |j |d ||jj||f|IdH} | jr0| jnd} | j} Wnbtk r}zB|jr||j|d |d |d|dtdIdHwWdd}~XYnXd| krdkrnnd|kr|d}|jr8|j |d |d|d |d| d | n0|jr8|j |d |d |d| d | y|d krR| IdH| Stjjtjjfk r}z@|jr|j|d |d |d|dtdIdHWdd}~XYnXqd| krdkrnn>| jd}d}||krd}|d||t|d|_q| dkrd}d| jkrHt| jd}nt !d|j"}|jr|j|d |d |d| d | d|d t|IdHq| dkr|jr|j|d |d |d| d | d tdIdHqy| IdH} WnFtjjk rFy| #IdHdd} Wnd} YnXYnXdd gi}| |kr|j$}|jr|j|d |d |d| d | d|d t|IdHq|j%r t !d|j&}|jr|j|d |d |d| d | d|d t|IdHq|jrB|j'|d |d |d| d | d | t(|| | qWt(|| d!t| dS)"Ntagsr operationr*proxyrz meraki.comz meraki.cnGETz, z > z - SIMULATEDr z - z, retrying in 1 secondi,pagez; page iZLocationzmeraki.com/api/vzmeraki.cn/api/viz Retry-Afterz, retrying in z secondsiderrorsz]Too many concurrently executing batches. Maximum is 5 confirmed but not yet executed batches.zReached retry limit: ))r setdefaultr,rrrrr!r0debugr"r5rangereleaser/rDreasonstatus Exceptionwarningr#sleepjsondecoderJSONDecodeErrorr.Zclient_exceptionsZContentTypeErrorr findlenintrandomrandintrtextrrr errorZ AsyncAPIError)rr@rArBrCtagrFZabs_urlretriesresponsemessage_rRrSecounterZ substringwaitZaction_batch_concurrency_errorr7r7r8r?zs     *" $    * $ **(zAsyncRestSession._requestNc sXd|d<||d<||d<|j|d||dIdH4IdH}|IdHSQIdHRXdS)NrHrArBparams)ri)rDrW)rr@rBrircr7r7r8gets "zAsyncRestSession.getrnextcsdS)Nr7)rr@rBri total_pages directionevent_log_end_timer7r7r8r;s zAsyncRestSession.get_pagescs |IdH}|IdH}||fS)N)rW)rrDrcresultr7r7r8_download_page$s zAsyncRestSession._download_pagec Cs(t|tkr|dkrd}nt|tkr:|r:t|}d|d<t||j|d||d}x|dkr"|IdH\}} |j } |dkrd| kr|d d krt j t| dd  d d} tt| dd} | d krPn|r| |krP|dd7<| dd } np|dkrd| kr|d d krjt j t| dd  dd}|dkrjP|dd7<| dd } nP||d}|dkrt|||d| }g}t| tkr| }n4t| tkr |dkr| dddd}n| d}x|D] }|VqWqdWdS)NallrrIrKrH)rirrkrFgetNetworkEventsrBzstartingAfter=i,prevz endingBefore=z 2014-01-01events)typerlower isnumericr\r#Z create_taskrprDlinksurllibparseunquotesplitrutcnow fromisoformat total_secondsrQlistdict)rr@rBrirlrmrnZ request_taskrcresultsrxstarting_afterdeltanextlink ending_beforeZ return_itemsitemr7r7r8r:)sZ         z$AsyncRestSession._get_pages_iteratorc st|tkr|dkrd}nt|tkr:|r:t|}d|d<|j|d||dIdH4IdHP}|IdH}t|tkr|ddkr|d kr|d ddd|d <|j} WdQIdHRXx|dkr|d krld | krl|ddkrNt j t| d d  d d} t t | dd} | d krs