
    :Qg]                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	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 d d	lmZmZ d d
lmZmZmZmZmZ ddlmZm Z m!Z!m"Z"  ejF                  e$      jJ                  jM                         Z'dZ( ejR                  dd      jU                         dvZ+ ejR                  dd      jU                         dk7  Z,de de-e   fdZ.de de-e   fdZ/de de-e   de	j`                  fdZ1d Z2d Z3de fdZ4e	jj                  jm                  e+ d      e	jj                  jm                  e,d      d               Z7e	jj                  jm                  e+ d      e	jj                  jm                  e,d      d                Z8e	jj                  jm                  e+ d      e	jj                  jm                  e,d      d!               Z9e	jj                  jm                  e+ d      e	jj                  jm                  e,d      d"               Z:d# Z;d$ Z<d% Z=d& Z>d' Z?de fd(Z@de fd)ZAde fd*ZBde	j`                  de fd+ZCd, ZDde fd-ZEd. ZFd/ ZGd0 ZHd1 ZIe	jj                  jm                  e+ d      e	jj                  jm                  e,d      d2               ZJe	jj                  jm                  e+ d      d3        ZKd4ZL G d5 d6      ZM G d7 d8      ZN G d9 d:      ZO e	j                         d;        ZQy)<    N)Any)Mock)General)shared)PartitionRequest)PartitionParameters)retries)ElementTypeNarrativeText)$DEFAULT_RETRIES_MAX_ELAPSED_TIME_SEC DEFAULT_RETRIES_MAX_INTERVAL_SECget_retries_configpartition_multiple_via_apipartition_via_api   )ANYFixtureRequestexample_doc_pathmethod_mockz1https://api.unstructuredapp.io/general/v0/generalCI >   r   0ffalseGITHUB_REF_NAMEmainrequestexpected_call_c                 `   t        | t        dt        d            }t        t	        d            } |j
                  |  t        |j                  d   j                  d   t              sJ t        |      dk(  sJ |d   t        d	      k(  sJ |d   j                  j                  d
k(  sJ y )N	partition   status_codereturn_valueeml/fake-email.emlfilenamer      +This is a test email to use for unit tests.message/rfc822)r   r   FakeResponser   r   assert_called_once_with
isinstancecall_args_listargslenr   metadatafiletype)r   r   partition_mock_elementss       a/var/www/html/answerous/venv/lib/python3.12/site-packages/test_unstructured/partition/test_api.py8test_partition_via_api_with_filename_correctly_calls_sdkr7   %   s     "+LS4QO !*:;O*PQH+O++^<o44Q7<<Q?IIIx=AA;-(UVVVVA;((,<<<<    c                    t        | t        dt        d            }t        t	        d      d      5 }t        |t	        d            }d d d        |d d  }|d   j                  j                  _         |j                  |  t        |j                  d	   j                  d	   t              sJ t              dk(  sJ |d	   t        d
      k(  sJ |d	   j                  j                   dk(  sJ y # 1 sw Y   xY w)Nr    r!   r"   r$   r&   rb)filemetadata_filenamer)   r   r*   r+   )r   r   r,   openr   r   partition_parametersfilescontentr-   r.   r/   r0   r1   r   r2   r3   )r   r   r4   r   r5   modified_expected_calls         r6   4test_partition_via_api_with_file_correctly_calls_sdkrB   5   s    "+LS4QO 
34d	; 
q$&67K&L

 ,A.CD12288@+O++-CDo44Q7<<Q?IIIx=AA;-(UVVVVA;((,<<<<
 
s   C22C;caplogc                 b   t        | t        dt        d            }t        t	        d      d      5 }t        |t	        d             d d d        |d d  }|d   j                  j                  _         |j                  |  d	|j                  v sJ d
|j                  v sJ y # 1 sw Y   \xY w)Nr    r!   r"   r$   r&   r:   )r;   file_filenamer)   WARNINGz*The file_filename kwarg will be deprecated)r   r   r,   r=   r   r   r>   r?   r@   r-   text)r   r   rC   r4   r   rA   s         r6   Atest_partition_via_api_warns_with_file_and_filename_and_calls_sdkrH   L   s     "+LS4QO 
34d	; Xqq0@AU0VWX ,A.CD12288@+O++-CD###76;;FFFX Xs   B%%B.c                      t        d      } t        | d      5 }t        j                  t              5  t        || |        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr&   r:   )r;   rE   r<   )r   r=   pytestraises
ValueErrorr   )r(   r   s     r6   Ktest_partition_via_api_from_file_raises_with_metadata_and_file_and_filenamerM   _   sb     45H	h	 VFMM*$= VqHUV V V V V Vs"   AAAA	AA'c                      t        t        d      d      5 } t        j                  t              5  t        |        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr&   r:   )r;   )r=   r   rJ   rK   rL   r   )r   s    r6   8test_partition_via_api_from_file_raises_without_filenamerO   f   sS    	34d	; "q&--PZB[ "q!" " " " " "s!   AAAA	AA#c                     t        | t        dt        d            }t        j                  t
              5  t        t        d             d d d        |j                          y # 1 sw Y   xY w)Nr      r"   r$   r&   r'   )	r   r   r,   rJ   rK   rL   r   r   assert_called_once)r   r4   s     r6   /test_partition_via_api_raises_with_bad_responserS   k   s\    !+LS4QO 
z	" K#34H#IJK&&(K Ks   A&&A/zSkipping test run outside of CI)reasonz(Skipping test run outside of main branchc                  b   t        d      } t        | dt               t        dg      }t        | dt               t        dg      }t        | dt               t        dg      }t	        |      t	        |      k(  sJ t	        |      t	        |      k7  sJ |d   j
                  j                  J y )Nzpdf/loremipsum-flat.pdfautopdf)r(   strategyapi_keyapi_urlskip_infer_table_typeshi_resfastr   )r   r   get_api_keyAPI_URLr1   r2   coordinates)	test_fileelements_no_strategyelements_hi_reselements_fast_ress       r6   'test_partition_via_api_with_no_strategyre   u   s     !!:;I, %w ( %wO * %w #$O(<<<<3'8#9999 1&&22:::r8   c                      t        t        d      ddt               t              } | d   j                  j
                  J y )Nzpdf/fake-memo.pdfr\   true)r(   rX   r`   rY   rZ   r   )r   r   r^   r_   r2   r`   r5   s    r6   Ftest_partition_via_api_with_image_hi_res_strategy_includes_coordinatesri      sC     !!"56H A;++777r8   c                     t        t        d      dddgt               t              } | D cg c]"  }|j                  t
        j                  k(  s!|$ }}|D ]m  }|j                  j                  J |j                  j                  J t        j                  |j                  j                        }t        |t              rmJ  y c c}w )Npdf/embedded-images-tables.pdfr\   imagetable)r(   rX   extract_image_block_typesrY   rZ   )r   r   r^   r_   categoryr
   IMAGEr2   image_base64image_mime_typebase64	b64decoder.   bytes)r5   elimage_elements
image_datas       r6   -test_partition_via_api_image_block_extractionry      s     !!"BC#*G"4H $,PRr{{k>O>O/ObPNP -{{''333{{**666%%bkk&>&>?
*e,,,	- Qs   "CCc                  v    t        t        d      dt               t        ddddd	      } t	        |       d	kD  sJ y )
Nrk   r]         d   Tg      ?)	r(   rX   rY   rZ   retries_initial_intervalretries_max_intervalretries_max_elapsed_timeretries_connection_errorsretries_exponentr   )r   r   r^   r_   r1   rh   s    r6   %test_partition_via_api_retries_configr      sE     !!"BC!"!$"&H x=1r8   c                  .   t               } t        ddddd|       }|j                  sJ |j                  j                  dk(  sJ |j                  j
                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ y )NT      ?   i  r}   r   r   r~   r   r   sdk)r   r   retry_connection_errorsbackoffexponentinitial_intervalmax_elapsed_timemax_intervalr   retries_configs     r6   'test_retries_config_with_parameters_setr      s    
&C'"&!#!% N 1111!!**d222!!22b888!!22d:::!!..#555r8   c                  B    t               } t        d d d d d |       }|J y )Nr   )r   r   r   s     r6   7test_retries_config_none_parameters_return_empty_configr      s3    
&C'"&!%!%!N !!!r8   c                  `   t               } d | j                  _        t        dddd d |       }|j                  sJ |j
                  j                  dk(  sJ |j
                  j                  dk(  sJ |j
                  j                  t        k(  sJ |j
                  j                  t        k(  sJ y )NTGz?  r   )r   sdk_configurationretry_configr   r   r   r   r   r   r   r   r   r   s     r6   =test_retry_config_with_empty_sdk_retry_config_returns_defaultr      s    
&C)-C&'"&!%!%!N 1111!!**d222!!22d:::!!226ZZZZ!!..2RRRRr8   c            	         t        j                  dt        j                  dddd      d      } t               }| |j                  _        t        dd d d d |      }|j                  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ y )Nr   r   i
 r   i@w Tr   )r	   RetryConfigBackoffStrategyr   r   r   r   r   r   r   r   r   r   r   r   r   s      r6   *test_retries_config_with_no_parameters_setr     s    &&7**4wGL &C)5C&'"&!%!%!N 1111!!**d222!!22d:::!!22g===!!..&888r8   c            	         t        j                  dt        j                  dddd       d      } t               }| |j                  _        t        dddd d |	      }|j                  rJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  t        k(  sJ |j                  j                  t        k(  sJ y )
Nr   r   r   r   TFr   r   r   )r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s      r6   test_retries_config_cascader   "  s     &&7**4D$?L &C)5C&'"'!#!%!N 5555!!**d222!!22b888!!226ZZZZ!!..2RRRRr8   c           	      :   t        | t        dt        d            }t        d      }t	        |g      }|j                  ddt        d	i d
t        d      t        d ffg       |d   d   t        d      k(  sJ |d   d   j                  j                  dk(  sJ y )Npostr!   r"   r$   r&   	filenames.https://api.unstructured.io/general/v0/generalapplication/jsonACCEPTzUNSTRUCTURED-API-KEYr?   headersdatar?   r   r*   r+   )
r   requestsr,   r   r   r-   r   r   r2   r3   )r   r4   r(   r5   s       r6   4test_partition_multiple_via_api_with_single_filenamer   :  s    !60MO   45H)XJ?H++8-sK*+?@#tLMN	 ,  A;q>]+XYYYYA;q>""++/????r8   c           
         t        | t        dt        d            }t        d      t        d      g}t	        |      }|j                  dd	t        d
i dt        d      t        d ffdt        d      t        d ffg       t        |      dk(  sJ |d   d   t        d      k(  sJ |d   d   j                  j                  dk(  sJ y )Nr   r!   r"   r$   r&   	fake.docxr   r   r   r   r?   r   r   r   r*   r+   )r   r   FakeMultipleResponser   r   r-   r   r1   r   r2   r3   )r   r4   r   r5   s       r6   .test_partition_multiple_via_api_from_filenamesr   L  s    !60DQT0UO ""679I+9VWI)I>H++8-sK'(<=sDIJ'4c4@A
	 ,  x=AA;q>]+XYYYYA;q>""++/????r8   c           
      B   t        | t        dt        d            }t        d      t        d      g}t	        j
                         5 }|D cg c]  }|j                  t        |d             }}t        ||      }d d d        |j                  d	d
t        di dt        d      t        d ffdt        d      t        d ffg       t              dk(  sJ |d   d   t        d      k(  sJ |d   d   j                  j                  dk(  sJ y c c}w # 1 sw Y   xY w)Nr   r!   r"   r$   r&   r   r:   )r?   metadata_filenamesr   r   r   r?   r   r   r   r*   r+   )r   r   r   r   
contextlib	ExitStackenter_contextr=   r   r-   r   r1   r   r2   r3   )r   r4   r   stackr(   r?   r5   s          r6   *test_partition_multiple_via_api_from_filesr   b  s8   !60DQT0UO ""679I+9VWI				 
5KTUx$$T(D%9:UU-(

 ++8-sK'(<=sDIJ'4c4@A
	 ,  x=AA;q>]+XYYYYA;q>""++/????# V
 
s   D"D/DDDc           
         t        |t        dt        d            }t        d      t        d      g}t	        j
                         5 }|D cg c]  }|j                  t        |d             }}t        ||       d d d        |j                  d	d
t        di dt        d      t        d ffdt        d      t        d ffg       d| j                  v sJ d| j                  v sJ y c c}w # 1 sw Y   qxY w)Nr   r!   r"   r$   r&   r   r:   )r?   file_filenamesr   r   r   r?   r   rF   z+The file_filenames kwarg will be deprecated)r   r   r   r   r   r   r   r=   r   r-   r   rG   )rC   r   r4   r   r   r(   r?   s          r6   8test_partition_multiple_via_api_warns_with_file_filenamer   }  s    "60DQT0UO ""679I+9VWI				 
5KTUx$$T(D%9:UU"$	

 ++8-sK'(<=sDIJ'4c4@A
	 ,  ###8FKKGGG! V
 
s   C."C)/C.)C..C7c            
      T   t        d      t        d      g} t        j                         5 }| D cg c]  }|j                  t	        |d             }}t        j                  t              5  t        || |        d d d        d d d        y c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr&   r   r:   )r?   r   r   	r   r   r   r   r=   rJ   rK   rL   r   r   r   r(   r?   s       r6   Ftest_partition_multiple_via_api_raises_with_file_and_metadata_filenamer     s    !"679I+9VWI				 5KTUx$$T(D%9:UU]]:& 	&#,(	 U	 	 s4   B"BB-B<BBB	BB'c           
      b   t        | t        dt        d            }t        d      t        d      g}t	        j
                  t              5  t        |       d d d        |j                  dd	t        d
i dt        d      t        d ffdt        d      t        d ffg       y # 1 sw Y   LxY w)Nr   rQ   r"   r$   r&   r   r   r   r   r   r?   r   )
r   r   r   r   rJ   rK   rL   r   r-   r   )r   r4   r   s      r6   8test_partition_multiple_via_api_raises_with_bad_responser     s    !60DQT0UO ""679I+9VWI	z	" 8"Y78++8-sK'(<=sDIJ'4c4@A
	 , 8 8s   B%%B.c                      t        d      t        d      g} t        j                  t              5  t	        | dg       d d d        y # 1 sw Y   y xY w)Nr&   r   
text/plain)r   content_types)r   rJ   rK   rL   r   r   s    r6   Gtest_partition_multiple_via_api_raises_with_content_types_size_mismatchr     sI    !"679I+9VWI	z	" 
"'.	

 
 
s   AAc            
      V   t        d      t        d      g} t        j                         5 }| D cg c]  }|j                  t	        |d             }}t        j                  t              5  t        || dg       d d d        d d d        y c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr&   r   r:   r   )r?   r   r   r   r   s       r6   Dtest_partition_multiple_via_api_from_files_raises_with_size_mismatchr     s    !"679I+9VWI				 5KTUx$$T(D%9:UU]]:& 	&#,+n	 U	 	 s4   B"BB-B=BBB	BB(c            
      P   t        d      t        d      g} t        j                         5 }| D cg c]  }|j                  t	        |d             }}t        j                  t              5  t        |       d d d        d d d        y c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr&   r   r:   )r?   r   r   s       r6   Ctest_partition_multiple_via_api_from_files_raises_without_filenamesr     s    !"679I+9VWI				 5KTUx$$T(D%9:UU]]:& 	&	 U	 	 s4   B"BB-B:BBB	BB%c                  J    t        j                  d      } | t        d      | S )NUNS_API_KEYz(UNS_API_KEY environment variable not set)osgetenvrL   )rY   s    r6   r^   r^     s&    ii&GCDDNr8   c                      t        d      t        d      g} t        | dt               t              }t	        |      dk(  sJ t        |d   t              sJ t        |d   t              sJ y )Nzfake-text.txtzfake-email.txtr]   r   rX   rY   rZ   r   r   r)   )r   r   r^   r_   r1   r.   list)r   list_of_lists_of_elementss     r6   9test_partition_multiple_via_api_valid_request_data_kwargsr     sy     	))*I
 !;	! ()Q.../2D999/2D999r8   c                      t        d      t        d      g} t        j                  t              5  t	        | dt               t               d d d        y # 1 sw Y   y xY w)Nz pdf/layout-parser-paper-fast.pdfz img/layout-parser-paper-fast.jpgnot_a_strategyr   )r   rJ   rK   rL   r   r^   r_   r   s    r6   ;test_partition_multiple_via_api_invalid_request_data_kwargsr     sV     	;<;<I 
z	" 
"%M	

 
 
s   AAa  [
    {
        "element_id": "f49fbd614ddf5b72e06f59e554e6ae2b",
        "text": "This is a test email to use for unit tests.",
        "type": "NarrativeText",
        "metadata": {
            "sent_from": [
                "Matthew Robinson <mrobinson@unstructured.io>"
            ],
            "sent_to": [
                "Matthew Robinson <mrobinson@unstructured.io>"
            ],
            "subject": "Test Email",
            "filename": "fake-email.eml",
            "filetype": "message/rfc822"
        }
    }
]c                   .    e Zd ZdefdZd Zed        Zy)r,   r#   c                 B    || _         t               | _        ddi| _        y )NzContent-Typer   )r#   FakeRawResponseraw_responser   selfr#   s     r6   __init__zFakeResponse.__init__  s$    & ,-&(:;r8   c                 @    t        j                  | j                        S NjsonloadsrG   r   s    r6   r   zFakeResponse.json#      zz$))$$r8   c                     t         S r   )	MOCK_TEXTr   s    r6   rG   zFakeResponse.text&  s    r8   N__name__
__module____qualname__intr   r   propertyrG    r8   r6   r,   r,     s'    <C <%  r8   r,   c                       e Zd Zd Zy)r   c                     t         | _        y r   )r   rG   r   s    r6   r   zFakeRawResponse.__init__,  s	    	r8   N)r   r   r   r   r   r8   r6   r   r   +  s    r8   r   c                   .    e Zd ZdefdZd Zed        Zy)r   r#   c                     || _         y r   r"   r   s     r6   r   zFakeMultipleResponse.__init__1  s
    &r8   c                 @    t        j                  | j                        S r   r   r   s    r6   r   zFakeMultipleResponse.json4  r   r8   c                      y)Na  [
    [
        {
            "element_id": "f49fbd614ddf5b72e06f59e554e6ae2b",
            "text": "This is a test email to use for unit tests.",
            "type": "NarrativeText",
            "metadata": {
                "sent_from": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "sent_to": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "subject": "Test Email",
                "filename": "fake-email.eml",
                "filetype": "message/rfc822"
            }
        }
    ],
    [
        {
            "element_id": "f49fbd614ddf5b72e06f59e554e6ae2b",
            "text": "This is a test email to use for unit tests.",
            "type": "NarrativeText",
            "metadata": {
                "sent_from": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "sent_to": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "subject": "Test Email",
                "filename": "fake-email.eml",
                "filetype": "message/rfc822"
            }
        }
    ]
]r   r   s    r6   rG   zFakeMultipleResponse.text7  s    %r8   Nr   r   r8   r6   r   r   0  s'    'C '% & &r8   r   c                     t        t        d      d      5 } | j                         }d d d        t        t	        t        d$i dt        j                  t        d            dd dd ddd	d d
d dd dd dd dddd dd dddd dd dt        j                  j                  dddddddd dd dddddd d t        j                  j                  d!dd"d#      d gS # 1 sw Y   xY w)%Nr&   r:   r?   )r@   	file_namechunking_strategycombine_under_n_charsr`   Fencodingrn   gz_uncompressed_content_typehi_res_model_nameinclude_orig_elementsinclude_page_breaks	languagesmax_charactersmultipage_sectionsTnew_after_n_charsocr_languagesoutput_formatoverlapr   overlap_allpdf_infer_table_structuresimilarity_thresholdr[   split_pdf_concurrency_levelr{   split_pdf_pagestarting_page_numberrX   unique_element_idsxml_keep_tags)r>   r   )r=   r   readr   r   r   r   FilesOutputFormatAPPLICATION_JSONStrategyHI_RES)r   
file_bytess     r6   r   r   a  s   	34d	; qVVX
 	!4 "ll&./CD"
 #'" '+" "" " +/" .2" #'" '+" %*" "  $"  $(!"" #'#"$ #%"& %11BB'"( )"* "+", +/-". &*/"0 (,1"2 -.3"4  $5"6 &*7"8  //9": $);"< $="!	
D 	I% % s   C((C1)Rrs   r   r   r   pathlibtypingr   unittest.mockr   rJ   r   unstructured_client.generalr   unstructured_client.modelsr   %unstructured_client.models.operationsr   !unstructured_client.models.sharedr   unstructured_client.utilsr	   unstructured.documents.elementsr
   r   unstructured.partition.apir   r   r   r   r   
unit_utilsr   r   r   r   Path__file__parentresolve	DIRECTORYr_   r   loweris_in_ciskip_not_on_mainr   r7   rB   LogCaptureFixturerH   rM   rO   rS   markskipifre   ri   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r^   r   r   r   r,   r   r   fixturer   r   r8   r6   <module>r)     s      	      / - B A - F  L KGLL"))113	 >299T2$$&.EE299.399;vE ==-1#Y= ==-1#Y=.GG-1#YG@F@X@XG&V"
)^ ) L)JK$-WX#; Y L#;L L)JK$-WX
8 Y L
8 L)JK$-WX- Y L-" L)JK$-WX Y L06$"S&9,S0@. @$@N @,@ @6H$$H/=H8
n &

 L)JK$-WX: Y L:$ L)JK
 L
	( " 
. .b ( (r8   