o
    :Zcb                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d d	lmZ e d
ZG dd dZG dd de
ZG dd dejZdd Zdd Zdd Zdd ZdS )    N)BytesIO)settings)signals)base)HttpRequest	QueryDictparse_cookie)set_script_prefix)repercent_broken_unicode)cached_propertys   /+c                   @   s8   e Zd ZdZdddZdddZddd	Zdd
dZdS )LimitedStreamzBWrap another stream to disallow reading it past a number of bytes.   c                 C   s   || _ || _d| _|| _d S N    )stream	remainingbufferbuf_size)selfr   limitr    r   O/var/www/chikooza/env/lib/python3.10/site-packages/django/core/handlers/wsgi.py__init__   s   
zLimitedStream.__init__Nc                 C   sF   |d u s	|| j kr| j }|dkrdS | j|}|  j t|8  _ |S )Nr   r   )r   r   readlenr   sizeresultr   r   r   _read_limited   s   zLimitedStream._read_limitedc                 C   st   |d u r| j |   }d| _ |S |t| j k r(| j d | }| j |d  | _ |S | j | |t| j   }d| _ |S r   )r   r   r   r   r   r   r   r       s   zLimitedStream.readc                 C   s   d| j vr;|d u st| j |k r;|r| |t| j  }n|  }|s$n|  j |7  _ d| j vr;|d u st| j |k st| j }|rH||}n| }| | _ |S )N   
)r   r   r   r   readliner   )r   r   chunksioliner   r   r   r    ,   s,   




zLimitedStream.readline)r   N)__name__
__module____qualname____doc__r   r   r   r    r   r   r   r   r      s    


	r   c                   @   sZ   e Zd Zdd Zdd Zedd Zdd Zd	d
 Zedd Z	e
dd Ze
eeZdS )WSGIRequestc              	   C   s   t |}t|p	d}|| _|| _d|d|dddf | _|| _|| jd< || jd< |d  | _	| 
| z	t|d}W n ttfyN   d	}Y nw t| jd
 || _d| _d | _d S )N/z%s/%s    	PATH_INFOSCRIPT_NAMEREQUEST_METHODCONTENT_LENGTHr   z
wsgi.inputF)get_script_nameget_path_infoenviron	path_inforstripreplacepathMETAuppermethod_set_content_type_paramsintget
ValueError	TypeErrorr   _stream_read_startedresolver_match)r   r3   script_namer4   content_lengthr   r   r   r   A   s(   




zWSGIRequest.__init__c                 C   s   | j dS )Nzwsgi.url_scheme)r3   r=   r   r   r   r   _get_scheme[   s   zWSGIRequest._get_schemec                 C   s   t | jdd}t|| jdS )NQUERY_STRINGr+   )encoding)get_bytes_from_wsgir3   r   	_encoding)r   raw_query_stringr   r   r   GET^   s   zWSGIRequest.GETc                 C      t | ds	|   | jS )N_post)hasattr_load_post_and_filesrN   rE   r   r   r   	_get_postd   s   
zWSGIRequest._get_postc                 C   s
   || _ d S r$   )rN   )r   postr   r   r   	_set_posti   s   
zWSGIRequest._set_postc                 C   s   t | jdd}t|S )NHTTP_COOKIEr+   )get_str_from_wsgir3   r   )r   
raw_cookier   r   r   COOKIESl   s   zWSGIRequest.COOKIESc                 C   rM   )N_files)rO   rP   rX   rE   r   r   r   FILESq   s   
zWSGIRequest.FILESN)r%   r&   r'   r   rF   r   rL   rQ   rS   rW   propertyrY   POSTr   r   r   r   r)   @   s    


r)   c                       s(   e Zd ZeZ fddZdd Z  ZS )WSGIHandlerc                    s   t  j|i | |   d S r$   )superr   load_middleware)r   argskwargs	__class__r   r   r   }   s   zWSGIHandler.__init__c                 C   s   t t| tjj| j|d | |}| |}| j|_d|j	|j
f }g | dd |j D }||| t|dd d urU|drU|j|j_|d |j|j}|S )N)senderr3   z%d %sc                 s   s     | ]}d |j ddfV  qdS )z
Set-Cookier+   )headerN)output).0cr   r   r   	<genexpr>   s    z'WSGIHandler.__call__.<locals>.<genexpr>file_to_streamzwsgi.file_wrapper)r	   r1   r   request_startedsendrb   request_classget_response_handler_classstatus_codereason_phraseitemscookiesvaluesgetattrr=   closeri   
block_size)r   r3   start_responserequestresponsestatusresponse_headersr   r   r   __call__   s    



zWSGIHandler.__call__)r%   r&   r'   r)   rl   r   r|   __classcell__r   r   ra   r   r\   z   s    r\   c                 C   s   t | dd}t| S )z0Return the HTTP request's PATH_INFO as a string.r-   r*   )rI   r
   decode)r3   r4   r   r   r   r2      s   r2   c                 C   s   t jdurt jS t| ddpt| dd}|r7d|v r td|}t| dd}|r1|dt|  n|}| S t| dd}| S )	aE  
    Return the equivalent of the HTTP request's SCRIPT_NAME environment
    variable. If Apache mod_rewrite is used, return what would have been
    the script name prior to any rewriting (so it's the script name as seen
    from the client's perspective), unless the FORCE_SCRIPT_NAME setting is
    set (to anything).
    N
SCRIPT_URLr+   REDIRECT_URLs   //   /r-   r.   )r   FORCE_SCRIPT_NAMErI   _slashes_resubr   r~   )r3   
script_urlr4   rC   r   r   r   r1      s   
r1   c                 C   s   |  ||}|dS )zh
    Get a value from the WSGI environ dictionary as bytes.

    key and default should be strings.
    z
iso-8859-1)r=   encoder3   keydefaultvaluer   r   r   rI      s   
rI   c                 C   s   t | ||}|jddS )zj
    Get a value from the WSGI environ dictionary as str.

    key and default should be str objects.
    r6   )errors)rI   r~   r   r   r   r   rU      s   rU   )reior   django.confr   django.corer   django.core.handlersr   django.httpr   r   r   django.urlsr	   django.utils.encodingr
   django.utils.functionalr   compiler   r   r)   BaseHandlerr\   r2   r1   rI   rU   r   r   r   r   <module>   s"    
1: