Fa@sdZddlZddddddgZGd ddZd dZd dZd d dZddZddZddddddddddddddddij Z ddZ dS)z$Miscellaneous WSGI-related UtilitiesN FileWrapper guess_schemeapplication_uri request_urishift_path_infosetup_testing_defaultsc@sIeZdZdZdddZddZddZd d Zd S) rz1Wrapper to convert file-like objects to iterablesi cCs1||_||_t|dr-|j|_dS)Nclose)filelikeblksizehasattrr)selfr r r "/usr/lib/python3.5/wsgiref/util.py__init__s  zFileWrapper.__init__cCs)|jj|j}|r|StdS)N)r readr IndexError)r keydatar r r __getitem__szFileWrapper.__getitem__cCs|S)Nr )r r r r__iter__szFileWrapper.__iter__cCs)|jj|j}|r|StdS)N)r rr StopIteration)r rr r r__next__szFileWrapper.__next__N)__name__ __module__ __qualname____doc__rrrrr r r rr s   cCs!|jddkrdSdSdS) zMReturn a guess for whether 'wsgi.url_scheme' should be 'http' or 'https' ZHTTPSyeson1httpshttpN)rrr)get)environr r rr#scCs|dd}ddlm}|jdr>||d7}ne||d7}|ddkr|dd kr|d |d7}n"|dd kr|d |d7}|||jd pd dd7}|S)z@Return the application's base URI (no PATH_INFO or QUERY_STRING)zwsgi.url_schemez://r)quote HTTP_HOST SERVER_NAMEr SERVER_PORT443:80 SCRIPT_NAME/encodinglatin1) urllib.parser#r!)r"urlr#r r rr+s%TcCst|}ddlm}||jdddddd}|jd sf||d d 7}n ||7}|r|jd r|d |d 7}|S)zBReturn the full request URI, optionally including the query stringr)r# PATH_INFOZsafez/;=,r,r-r*NZ QUERY_STRING?)rr.r#r!)r"Z include_queryr/r# path_infor r rr?s $ cCs|jdd}|sdS|jd}dd|dd D|dd <|d}|d=|jdd}tj|d|}|jdr|dd }| r|jd r|d7}||d^s z#shift_path_info..r2r*r5r9r9)r!split posixpathnormpathendswithjoin)r"r4 path_partsnameZ script_namer r rrLs$ '    cCsU|jdd|jdd|jd|d|jddd|kr|d |kr||jdd |jd d |jd d|jdd|jdd|jddddlm}m}|jd||jd||jdt||ddkr1|jddn |ddkrQ|jdddS)a:Update 'environ' with trivial defaults for testing purposes This adds various parameters required for WSGI, including HTTP_HOST, SERVER_NAME, SERVER_PORT, REQUEST_METHOD, SCRIPT_NAME, PATH_INFO, and all of the wsgi.* variables. It only supplies default values, and does not replace any existing settings for these variables. This routine is intended to make it easier for unit tests of WSGI servers and applications to set up dummy environments. It should *not* be used by actual WSGI servers or applications, since the data is fake! r%z 127.0.0.1ZSERVER_PROTOCOLzHTTP/1.0r$ZREQUEST_METHODZGETr*r0r1r+z wsgi.versionr2rz wsgi.run_oncezwsgi.multithreadzwsgi.multiprocess)StringIOBytesIOz wsgi.inputz wsgi.errorszwsgi.url_schemer r&r)rr'N)r2r) setdefaultiorArBr)r"rArBr r rrus& Z connectionr2z keep-alivezproxy-authenticatezproxy-authorizationZteZtrailersztransfer-encodingZupgradecCst|jS)z?Return true if 'header_name' is an HTTP/1.1 "Hop-by-Hop" header)_hoppishlower)Z header_namer r r is_hop_by_hopsrG) rr;__all__rrrrrr __contains__rErGr r r rs      ) )