a y j @ s8 d dl Z e dZe dZd ddZG dd dZdS ) Nz[ \(\)<>@,;:\\"/\[\]\?=]z[\x00-\x1F\x7F] c C sX |d urPt |dkrP|s"t|rB|dddd}d| |f S d| |f S n| S d S )Nr \z\\"z\"z%s="%s"z%s=%s)len tspecialssearchreplace)Zparamvaluequote r '/usr/lib64/python3.9/wsgiref/headers.py_formatparam s r c @ s e Zd Zd$ddZdd Zdd Zdd Zd d Zdd Zdd Z dd Z d%ddZdd Zdd Z dd Zdd Zdd Zdd Zd d! Zd"d# ZdS )&HeadersNc C s. |d ur|ng }t |tur$td|| _d S )Nz+Headers must be a list of name/value tuples)typelist TypeError_headers)selfZheadersr r r __init__ s zHeaders.__init__c C s8 t |tu r"t|rtd|S tdt|d S )Nz)Control characters not allowed in headersz1Header names/values must be of type str (got {0}))r str_control_chars_rer ValueErrorAssertionErrorformatrepr)r r r r r _convert_string_type* s zHeaders._convert_string_typec C s t | jS N)r r r r r r __len__3 s zHeaders.__len__c C s&