3 \ ã @ sx d Z ddlZddddddgZG d d„ dƒZd d„ Zdd„ Zdd d„Zdd„ Zdd„ Zdddddddddœj Z dd„ ZdS )z$Miscellaneous WSGI-related Utilitiesé NÚFileWrapperÚguess_schemeÚapplication_uriÚrequest_uriÚshift_path_infoÚsetup_testing_defaultsc @ s2 e Zd ZdZddd„Zdd„ Zdd„ Zd d „ ZdS ) r z1Wrapper to convert file-like objects to iterablesé c C s" || _ || _t|dƒr|j| _d S )NÚclose)ÚfilelikeÚblksizeÚhasattrr )Úselfr r © r ú$/usr/lib64/python3.6/wsgiref/util.pyÚ__init__ s zFileWrapper.__init__c C s | j j| jƒ}|r|S t‚d S )N)r Úreadr Ú IndexError)r ÚkeyÚdatar r r Ú__getitem__ s zFileWrapper.__getitem__c C s | S )Nr )r r r r Ú__iter__ s zFileWrapper.__iter__c C s | j j| jƒ}|r|S t‚d S )N)r r r Ú StopIteration)r r r r r Ú__next__ s zFileWrapper.__next__N)r )Ú__name__Ú __module__Ú__qualname__Ú__doc__r r r r r r r r r s c C s | j dƒdkrdS dS dS ) zMReturn a guess for whether 'wsgi.url_scheme' should be 'http' or 'https' ZHTTPSÚyesÚonÚ1ÚhttpsÚhttpN)r r r )Úget)Úenvironr r r r # s c C s | d d }ddl m} | jdƒr0|| d 7 }nR|| d 7 }| d dkrf| d d kr‚|d | d 7 }n| d dkr‚|d | d 7 }||| jdƒp’d dd�7 }|S )z@Return the application's base URI (no PATH_INFO or QUERY_STRING)zwsgi.url_schemez://r )ÚquoteÚ HTTP_HOSTÚSERVER_NAMEr ÚSERVER_PORTÚ443ú:Ú80ÚSCRIPT_NAMEú/Úlatin1)Úencoding)Úurllib.parser$ r" )r# Úurlr$ r r r r + s Tc C sp t | ƒ}ddlm} || jddƒddd�}| jdƒsF||d d … 7 }n||7 }|rl| jdƒrl|d| d 7 }|S ) zBReturn the full request URI, optionally including the query stringr )r$ Ú PATH_INFOÚ z/;=,r- )Zsafer. r+ é NZQUERY_STRINGú?)r r/ r$ r" )r# Z include_queryr0 r$ Ú path_infor r r r ? s c C s¾ | j ddƒ}|sdS |jdƒ}dd„ |dd … D ƒ|dd…<