B `31@szddlZddlZddlZddlZddlZddlZddlZddlZddl Tddl Tddl m Z ddl mZGdddZdS)N)*) __version__)user_agent_extendedcseZdZeeeeeee e e e e eeeffdd ZddZddZddd Zdd d ZdddZdddZddZddZZS)AsyncRestSessioncstt|_t||_t||_||_||_||_ ||_ ||_ | |_ | |_ | |_| |_| |_t||_||_||_d|jkrtd|jdn|jddkr|jdd|_|jdd|jdt|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)NZv1z5If you want to use the Python library with v1 paths (z was configured as the base URL), then install the v1 library. See the "Setup" section @ https://github.com/meraki/dashboard-api-python//zapplication/jsonzpython-meraki/aio- )zX-Cisco-Meraki-API-Keyz 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_callersysexitr_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_idZcaller)ru/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/meraki_v0/aio/rest_session.pyrsN     "      zAsyncRestSession.__init__c s@|j4IdH"|j|||fddi|IdHSQIdHRXdS)Nallow_redirectsF)r#_request)rmetadatamethodurlkwargsr4r4r5request[szAsyncRestSession.requestcs(|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} xDt |D]6} y4|j j||f|IdH} | jr| jnd} | j} Wnbtk rp}zB|jrN|j|d |d |d |dtdIdHwWdd}~XYnX| dkrd|kr|d}|jr|j |d |d|d |d | d| n0|jr|j |d |d |d | d| y|d kr| IdH| Stjjtjjfk r~}z@|jr^|j|d |d |d |dtdIdHWdd}~XYnXqd| krdkrnn>| jd}d}||krd}|d||t|d|_q| dkr^d}d| jkrt| jd}nt d|j!}|jrL|j|d |d |d | d| d|d t|IdHq| dkr|jr|j|d |d |d | d| d tdIdHqy| IdH} WnFtjjk ry| "IdHdd} Wnd} YnXYnXdd gi}| |krj|j#}|jrX|j|d |d |d | d| d|d t|IdHq|j$rt d|j%}|jr|j|d |d |d | d| d|d t|IdHq|jr|j&|d |d |d | d| d | t'|| | qWt'|| d!t| dS)"Ntagsr operationr'proxyr z meraki.comz meraki.cnGETz, z > z - SIMULATEDz - z, retrying in 1 secondpagez; page r i,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)rrrrrr-debugr r2ranger,r<reasonstatus Exceptionwarningr!sleepjsondecoderJSONDecodeErrorr+Zclient_exceptionsZContentTypeErrorr findlenintrandomrandintrtextrrrerrorZ AsyncAPIError)rr8r9r:r;tagr>Zabs_urlretriesresponsemessage_rIrJecounterZ substringwaitZaction_batch_concurrency_errorr4r4r5r7_s    $  0( $$    0 * 00.zAsyncRestSession._requestNcs>d|d<||d<||d<|j|d||dIdH}|IdHS)Nr@r9r:params)r`)r<rN)rr8r:r`rZr4r4r5gets zAsyncRestSession.getrnextc s|t|tkr|dkrd}d|d<|j|d||dIdH}|IdH}x*|dkrv|j}|dkrd|kr|dd7<||d|ddIdH}n@|d krd |kr|dd7<||d|d dIdH}nPt|tkr||IdHnnt|tkrl|IdH} | d } | d } | d } | |d krH| |d <| |d kr^| |d <|d | |d8}qNW|S) NallrrArCr@)r`rbr:prevZ pageStartAtZ pageEndAtevents) typerlowerr<rNlinkslistextenddict) rr8r:r`Z total_pages directionrZresultsrhZ json_responsestartendrer4r4r5 get_pagess8  zAsyncRestSession.get_pagescs>d|d<||d<||d<|j|d||dIdH}|IdHS)NPOSTr9r:rN)rN)r<rN)rr8r:rNrZr4r4r5post s zAsyncRestSession.postcs>d|d<||d<||d<|j|d||dIdH}|IdHS)NPUTr9r:rN)rN)r<rN)rr8r:rNrZr4r4r5puts zAsyncRestSession.putcs(d|d<||d<||d|IdHdS)NDELETEr9r:)r<)rr8r:r4r4r5deleteszAsyncRestSession.deletecs|jIdHdS)N)r,close)rr4r4r5rw szAsyncRestSession.close)N)Nrrb)N)N)__name__ __module__ __qualname__ZDEFAULT_BASE_URLZSINGLE_REQUEST_TIMEOUTZCERTIFICATE_PATHZREQUESTS_PROXYZWAIT_ON_RATE_LIMITZNGINX_429_RETRY_WAIT_TIMEZACTION_BATCH_RETRY_WAIT_TIMEZRETRY_4XX_ERRORZRETRY_4XX_ERROR_WAIT_TIMEZMAXIMUM_RETRIESZSIMULATE_API_CALLSZAIO_MAXIMUM_CONCURRENT_REQUESTSZ BE_GEO_IDZMERAKI_PYTHON_SDK_CALLERrr<r7rarprrrtrvrw __classcell__r4r4)rr5rs,8{  *  r)r!rNplatformrTr'r$ urllib.parseurllibr+config exceptionsrrZ rest_sessionrrr4r4r4r5s