� K�gk*���ddlmZddlZddlmZmZddlmZddlm Z ddl m Z ddl m Z mZmZejrddlZddlmZmZmZn2 ddlZdd lmZn#e$r ddlZdd lmZYnwxYwn#e$rdZdZYnwxYwGd �d e��ZeGd �d ����Zdd�ZGd�de��ZGd�d��ZGd�d��ZdS)�)� annotationsN)� dataclass�field)�Enum)�SpooledTemporaryFile)� unquote_plus)�FormData�Headers� UploadFile)�MultipartCallbacks�QuerystringCallbacks�parse_options_header)rc�"�eZdZdZdZdZdZdZdS)� FormMessage�����N)�__name__� __module__� __qualname__� FIELD_START� FIELD_NAME� FIELD_DATA� FIELD_END�END���e/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/starlette/formparsers.pyrrs'�������K��J��J��I� �C�C�Crrc�~�eZdZUdZded<dZded<ee���Zded <dZ d ed <ee ���Z d ed <dS)� MultipartPartNz bytes | None�content_disposition��str� field_name)�default_factory� bytearray�datazUploadFile | None�filezlist[tuple[bytes, bytes]]� item_headers) rrrr#�__annotations__r&rr(r)r*�listr+rrr r"r"#s��������(,��,�,�,�,��J������e�I�6�6�6�D�6�6�6�6�"�D�"�"�"�"�.3�e�D�.I�.I�.I�L�I�I�I�I�I�Irr"�src�bytes | bytearray�codecr%�returnc�� |�|��S#ttf$r|�d��cYSwxYw)N�latin-1)�decode�UnicodeDecodeError� LookupError)r.r0s r �_user_safe_decoder7,sQ��%��z�z�%� � � �� � � ,�%�%�%��z�z�)�$�$�$�$�$�%���s��&A�Ac��eZdZdd�ZdS)�MultiPartException�messager%r1�Nonec��||_dS�N)r:��selfr:s r �__init__zMultiPartException.__init__4s ���� � � rN)r:r%r1r;)rrrr@rrr r9r93s(�����������rr9c�F�eZdZdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z dS)� FormParser�headersr �stream�"typing.AsyncGenerator[bytes, None]r1r;c�R�t� Jd���||_||_g|_dS)N�EThe `python-multipart` library must be installed to use form parsing.)� multipartrCrD�messages)r?rCrDs r r@zFormParser.__init__9s0���$�$�&m�$�$�$��� ��� �9;�� � � rc�V�tjdf}|j�|��dS�Nr)rrrI�appendr>s r �on_field_startzFormParser.on_field_start?s+���*�C�0�� � ���W�%�%�%�%�%rr)�bytes�start�int�endc�f�tj|||�f}|j�|��dSr=)rrrIrL�r?r)rOrQr:s r � on_field_namezFormParser.on_field_nameC�3���)�4��c� �?�;�� � ���W�%�%�%�%�%rc�f�tj|||�f}|j�|��dSr=)rrrIrLrSs r � on_field_datazFormParser.on_field_dataGrUrc�V�tjdf}|j�|��dSrK)rrrIrLr>s r � on_field_endzFormParser.on_field_endKs+���(�#�.�� � ���W�%�%�%�%�%rc�V�tjdf}|j�|��dSrK)rrrIrLr>s r �on_endzFormParser.on_endOs*���?�C�(�� � ���W�%�%�%�%�%rr c���K�|j|j|j|j|jd�}t j|��}d}d}g}|j23d{V��}|r|�|��n|� ��t|j ��}|j � ��|D]�\}} |tjkrd}d}�|tjkr|| z }�0|tjkr|| z }�F|tjkr[t%|�d����} t%|�d����} |�| | f������6t+|��S)N)rMrTrWrYr[rr3)rMrTrWrYr[rH�QuerystringParserrD�write�finalizer-rI�clearrrrrrrr4rLr ) r?� callbacks�parserr&� field_value�items�chunkrI� message_type� message_bytes�name�values r �parsezFormParser.parseSs�����#�1�!�/�!�/� �-��k� + �+ � ��,�Y�7�7��� �� �46�� �;� 0� 0� 0� 0� 0� 0� 0�%�� "�� � �U�#�#�#�#����!�!�!��D�M�*�*�H� �M� � � !� !� !�/7� 0� 0�+� �m��;�#:�:�:�!$�J�"%�K�K�!�[�%;�;�;��-�/�J�J�!�[�%;�;�;��=�0�K�K�!�[�%:�:�:�'� �(9�(9�)�(D�(D�E�E�D�(��);�);�I�)F�)F�G�G�E��L�L�$���/�/�/�� 0�'�(����s�EN)rCr rDrEr1r;�r1r;�r)rNrOrPrQrPr1r;�r1r ) rrrr@rMrTrWrYr[rjrrr rBrB8s�������<�<�<�<� &�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&�&rrBc�l�eZdZdZdddd�dd�Zd d�Zd!d�Zd d�Zd!d�Zd!d�Z d d�Z d d�Z d d�Z d"d�Z dS)#�MultiPartParserii�)� max_files� max_fields� max_part_sizerCr rDrErp� int | floatrqrrrPr1r;c��t� Jd���||_||_||_||_g|_d|_d|_d|_d|_ t��|_ d|_ g|_ g|_g|_||_dS)NrGrrr$)rHrCrDrprqrd�_current_files�_current_fields�_current_partial_header_name�_current_partial_header_valuer"� _current_part�_charset�_file_parts_to_write�_file_parts_to_finish�_files_to_close_on_errorrr)r?rCrDrprqrrs r r@zMultiPartParser.__init__s����$�$�&m�$�$�$��� ��� �"���$���9;�� ���� ���36��)�47��*�*�_�_����� �GI��!�:<��"�KM��%�*����rc�,�t��|_dSr=)r"ry�r?s r � on_part_beginzMultiPartParser.on_part_begin�s��*�_�_����rr)rNrOrQc�j�|||�}|jj�{t|jj��t|��z|jkr(t dt |jdz ���d����|jj�|��dS|j� |j|f��dS)NzPart exceeded maximum size of izKB.) ryr*�lenr)rrr9rP�extendr{rL)r?r)rOrQrgs r � on_part_datazMultiPartParser.on_part_data�s����U�3�Y�� � � � "� *��4�%�*�+�+�c�-�.@�.@�@�4�CU�U�U�(�)m�#�d�N`�cg�Ng�Jh�Jh�)m�)m�)m�n�n�n� � � #� *� *�=� 9� 9� 9� 9� 9� � %� ,� ,�d�.@�-�-P� Q� Q� Q� Q� Qrc�F�|jj�E|j�|jjt |jj|j��f��dS|j�|j��|j�|jj|jjf��dSr=) ryr*rdrLr&r7r)rzr|rs r � on_part_endzMultiPartParser.on_part_end�s��� � � "� *� �J� � ��&�1�%�d�&8�&=�t�}�M�M�� � � � � � � &� -� -�d�.@� A� A� A� �J� � �t�1�<�d�>P�>U�V� W� W� W� W� Wrc�6�|xj|||�z c_dSr=)rw�r?r)rOrQs r �on_header_fieldzMultiPartParser.on_header_field�s$�� �)�)�T�%��)�_�<�)�)�)�)rc�6�|xj|||�z c_dSr=)rxr�s r �on_header_valuezMultiPartParser.on_header_value�s$�� �*�*�d�5��9�o�=�*�*�*�*rc���|j���}|dkr|j|j_|jj�||jf��d|_d|_dS)Nscontent-dispositionr)rw�lowerrxryr#r+rL)r?rs r � on_header_endzMultiPartParser.on_header_end�sh���1�7�7�9�9�� �*� *� *�59�5W�D� � 2� ��'�.�.��t�7Y�/Z�[�[�[�,/��)�-0��*�*�*rc���t|jj��\}} t|d|j��|j_n#t $rtd���wxYwd|vr�|xjdz c_|j|j krtd|j �d����t|d|j��}t|j ���}|j � |��t|d|t|jj� ��� ��|j_dS|xjdz c_|j|jkrtd |j�d����d|j_dS) Nsnamez=The Content-Disposition header field "name" must be provided.sfilenamerz+Too many files. Maximum number of files is �.)�max_sizer)�raw)r*�size�filenamerCz-Too many fields. Maximum number of fields is )rryr#r7rzr&�KeyErrorr9rurpr� max_file_sizer}rLr r r+r*rvrq)r?� disposition�optionsr��tempfiles r �on_headers_finishedz#MultiPartParser.on_headers_finished�s���3�D�4F�4Z�[�[�� �W� f�,=�g�g�>N�PT�P]�,^�,^�D� � )� )��� f� f� f�$�%d�e�e� e� f���� �'� !� !� � � �1� $� � ��"�T�^�3�3�(�)h�W[�We�)h�)h�)h�i�i�i�(���)=�t�}�M�M�H�+�T�5G�H�H�H�H� � )� 0� 0�� :� :� :�&0���!��D�$6�$C�D�D�D� '�'�'�D� � #� #� #� � � �A� %� � ��#�d�o�5�5�(�)k�Y]�Yh�)k�)k�)k�l�l�l�&*�D� � #� #� #s �%A�Ac��dSr=rrs r r[zMultiPartParser.on_end�s�� �rr c ���K�t|jd��\}}|�dd��}t|t��r|�d��}||_ |d}n#t$rtd���wxYw|j |j |j |j |j |j|j|jd�}t#j||��} |j23d{V��}|�|��|jD].\}} |jsJ�|j�| ���d{V���/|jD]+}|jsJ�|j�d���d{V���,|j���|j�����6n2#t$r%} |jD]} | ����| �d} ~ wwxYw|���t;|j��S) Nz Content-Typescharsetzutf-8r3sboundaryzMissing boundary in multipart.)r�r�r�r�r�r�r�r[r)rrC�get� isinstancerNr4rzr�r9r�r�r�r�r�r�r�r[rH�MultipartParserrDr^r{r*r|�seekr`r}�closer_r rd) r?�_�params�charset�boundaryrarbre�partr)�excr*s r rjzMultiPartParser.parse�s`����(���n�)E�F�F� ��6��*�*�Z��1�1�� �g�u� %� %� 0��n�n�Y�/�/�G��� � G��k�*�H�H��� G� G� G�$�%E�F�F� F� G���� "�/� �-��+�#�3�#�3�!�/�#'�#;��k� ) � ) � ��*�8�Y�?�?�� �#�{� 3� 3� 3� 3� 3� 3� 3�e�� � �U�#�#�#� #'�";�0�0�J�D�$��9�$�$�9��)�/�/�$�/�/�/�/�/�/�/�/�/�/� �6�,�,�D��9�$�$�9��)�.�.��+�+�+�+�+�+�+�+�+�+��)�/�/�1�1�1��*�0�0�2�2�2�2� +�{��"� � � ��5� � ��� � � � � � ��I�����  ���� �������� �#�#�#s1�(A1�1B �F�F�$B3F� G�" G�GN) rCr rDrErprsrqrsrrrPr1r;rkrlrm)rrrr�r@r�r�r�r�r�r�r�r[rjrrr roro|s��������M�"&�"&�(�+�+�+�+�+�+�4-�-�-�-�R�R�R�R� X� X� X� X�=�=�=�=�>�>�>�>�1�1�1�1�+�+�+�+�2 � � � �2$�2$�2$�2$�2$�2$rro)r.r/r0r%r1r%) � __future__r�typing� dataclassesrr�enumrr�r� urllib.parser�starlette.datastructuresr r r � TYPE_CHECKING�python_multipartrH�python_multipart.multipartr r r�ModuleNotFoundError�multipart.multipartrr"r7� Exceptionr9rBrorrr �<module>r�ss��"�"�"�"�"�"� � � � �(�(�(�(�(�(�(�(�������)�)�)�)�)�)�%�%�%�%�%�%�B�B�B�B�B�B�B�B�B�B� �� $�(�(�(�(�i�i�i�i�i�i�i�i�i�i�i� $� A� 0� 0� 0� 0� G� G� G� G� G� G� G��"� A� A� A� � � � � @� @� @� @� @� @� @� @� A������ �$�$�$�� �#����$����  � � � � �$� � � � �J�J�J�J�J�J�J� ��J�%�%�%�%���������� A�A�A�A�A�A�A�A�HT$�T$�T$�T$�T$�T$�T$�T$�T$�T$s0� A�A(�A$�!A(�#A$�$A(�( A4�3A4
Memory