
    	]ji                        d Z 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m	Z	 ddl
mZ ddlmZ ddlmZ 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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% 	 ddl&Z'ddl+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5  ejl                  dejn                          ejp                  d      d        Z9 ejp                  d      d        Z: ejp                  d      d        Z; ejp                  d      d        Z< ejp                         d        Z= ejp                  d      d         Z> ejp                  d      d!        Z? ejp                  dd"#      d$        Z@ ejp                  d      d%        ZA ejp                  d      d&        ZBd' ZC ejp                  d      d(        ZD ejp                  d      d)        ZE ejp                  d      d*        ZF ejp                  d      d+        ZG ejp                  d      d,        ZH ejp                  d      d-        ZI ejp                  d      d.        ZJd/ ZK ejp                         d0        ZL ejp                         d1        ZM ejp                  d      d2        ZN ejp                  d      d3        ZO ejp                  d      d4        ZPejp                  d5        ZQ ejp                  d      d6        ZR ejp                  d78      d9        ZS ejp                  d      d:        ZTd; ZU G d< d=      ZVd> ZWd? ZXd@ ZYdndAZZejp                  dB        Z[ejp                  dC        Z\ejp                  dD        Z]ejp                  dE        Z^ ejp                         dF        Z_ejp                  dG        Z`ejp                  dH        Zaejp                  dI        Zb ejp                  dJdKgL      dM        Zcejp                  dN        Zd ejp                  dO8      dP        Ze ejp                  dQdR      dS        Zf ejp                  dTdR      dU        Zg ejp                  dd"#      dV        Zh ejp                  dW8      dX        Zi ejp                  dY8      dZ        Zj ejp                  d[8      d\        Zk ejp                  d]8      d^        Zl ejp                  d_8      d`        Zm ejp                  da8      db        Znejp                  dodc       Zo ejp                  dd8      de        Zpdaqdar ejp                  df8      dg        ZsdpdhetdidfdjZudkevdidfdlZwdm Zxy# e($ r  e)d        e*d       Y w xY w)qzThis file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license.
    N)deepcopy)datetime	timedelta)Path)SimpleNamespace)	MagicMockClientErrorsettings)freeze_time)mock_s3)Organization)Project)Task)Userz(

 !!! Please, pip install pytest-env 

i)*   )	azure_client_mockcreate_businessgcs_client_mockimport_from_url_mockmake_projectml_backend_mockredis_client_mockregister_ml_backend_mocksigninzbotocore.credentialsT)autousec                     dg| _         y)zM
    Set the password hasher to less expensive MD5 for testing purposes.
    z-django.contrib.auth.hashers.MD5PasswordHasherN)PASSWORD_HASHERSr   s    E/root/env/lib/python3.12/site-packages/label_studio/tests/conftest.pyset_test_password_hasherr"   4   s    
 "Q QH    Fc                     d| _         y )NT)USE_ENFORCE_CSRF_CHECKSr   s    r!   enable_csrfr&   <   s
    '+H$r#   c                     d| _         y )Nr   )LABEL_STREAM_HISTORY_LIMITr   s    r!   label_stream_history_limitr)   A   s
    *+H'r#   c                      d| _         d | _        y )Nr   )SENTRY_RATE
SENTRY_DSNr   s    r!   disable_sentryr-   F   s    HHr#   c                     d| _         y )NF)DEBUG_MODAL_EXCEPTIONSr   s    r!   debug_modal_exceptions_falser0   L   s
    &+H#r#   function)scopec                  0    dt         _        dt         _        y )Nr   zIhttps://44f7a50de5ab425ca6bc406ef69b2122@o227124.ingest.sentry.io/5820521)r   r+   r,    r#   r!   enable_sentryr5   Q   s    HeHr#   c                      dt         j                  d<   dt         j                  d<   dt         j                  d<   dt         j                  d<   y)z Mocked AWS Credentials for moto.testingAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SECURITY_TOKENAWS_SESSION_TOKENNosenvironr4   r#   r!   aws_credentialsr?   X   s@     '0BJJ"#*3BJJ&''0BJJ#$&/BJJ"#r#   session)r   r2   c                  P    dt         j                  d<   dt         j                  d<   y)zMocked Azure credentialsr7   AZURE_BLOB_ACCOUNT_NAMEAZURE_BLOB_ACCOUNT_KEYNr<   r4   r#   r!   azure_credentialsrD   a   s"     -6BJJ()+4BJJ'(r#   c              #   |   K   t               5  t        j                  dd       d d d        y # 1 sw Y   y xY ww)Ns3	us-east-1region_name)r   boto3client)r?   s    r!   rF   rF   h   s0     	 :ll4[99: : :s   <0	<9<c              #      K   d}| j                  |       | j                  |dd       | j                  |dd       | j                  |dd	       | j                  |d
d       |  yw)z
    Bucket structure:
    s3://pytest-s3-images/image1.jpg
    s3://pytest-s3-images/subdir/image1.jpg
    s3://pytest-s3-images/subdir/image2.jpg
    pytest-s3-imagesBucket
image1.jpg123rO   KeyBodysubdir/image1.jpg456subdir/image2.jpg789subdir/another/image2.jpg0abNcreate_bucket
put_objectrF   bucket_names     r!   s3_with_imagesr`   n   sn      %KK(MM,UMCMM*=EMJMM*=EMJMM*EEMR
Hs   A*A,c                      d} t        j                  dd      }|j                  | d       |j                  | d       |j                  | d       |j                  | d	       |j                  | 
       y)z!
    Remove pytest-s3-images
    rM   rF   rG   rH   rP   )rO   rS   rU   rW   rY   rN    )rJ   rK   delete_objectdelete_bucket)r_   _s3s     r!   s3_remove_bucketrf      s|     %K
,,t
5C[l;[.AB[.AB[.IJ[)r#   c              #      K   d}| j                  |       | j                  |dt        j                  ddi             |  y w)Nzpytest-s3-jsonsrN   	test.json	image_urlzhttp://ggg.com/image.jpgrR   r\   r]   jsondumpsr^   s     r!   s3_with_jsonsrm      sB     #KK(MM+DJJUoGp<qMr
H   AAc              #      K   d}| j                  |       | j                  |dt        j                  ddi             |  y w)Nzpytest-s3-jsons-hypertextrN   rh   textzR<a href="s3://pytest-s3-jsons-hypertext/file with /spaces and' / ' / quotes.jpg"/>rR   rj   r^   s     r!   s3_with_hypertext_s3_linksrq      sO     -KK(MMZZkl
   Hrn   c              #      K   d}| j                  |       | j                  |dt        j                  ddi             |  y w)Nz pytest-s3-json-partially-encodedrN   rh   rp   z_<a href="s3://pytest-s3-json-partially-encoded/file with /spaces and' / ' / %2Bquotes%3D.jpg"/>rR   rj   r^   s     r!   "s3_with_partially_encoded_s3_linksrs      sQ     4KK(MMZZ{
   Hrn   c              #   d   K   d}| j                  |       | j                  |dd       |  y w)Nzpytest-s3-jsons-unexisted_linksrN   zsome-existed-image.jpgqwertyrR   r[   r^   s     r!   s3_with_unexisted_linksrv      s4     3KK(MM*BMR
Hs   .0c              #   <   K   d}| j                  |       |  y w)Nzpytest-export-s3-bucketrN   )r\   r^   s     r!   s3_export_bucketrx      s!     +KK(
Hs   c           
   #   
  K   d}| j                  |       ddddd| d| dgd	d
diiddddd| d| dgdd
diiddddd| d| dgdddiidgd}| j                  |t        j                  |             |  y w)Nz pytest-export-s3-bucket-with-sserN   
2012-10-17Denyr   s3:PutObjectarn:aws:s3:::/*StringNotEqualss3:x-amz-server-side-encryptionAES256Effect	PrincipalActionResource	ConditionNulltrues3:*Boolaws:SecureTransportfalseVersion	StatementrO   Policyr\   put_bucket_policyrk   rl   rF   r_   policys      r!   s3_export_bucket_sser      s     4KK(   ! (,[M:mK=XZ<[\/2SU]1^_ ! (,[M:mK=XZ<[\$'H&&QR !  ,[M:mK=XZ<[\$'<g&FG
F6 DJJv4FG
H   BBc           
   #   
  K   d}| j                  |       ddddd| d| dgd	d
diiddddd| d| dgdd
diiddddd| d| dgdddiidgd}| j                  |t        j                  |             |  y w)Nz pytest-export-s3-bucket-with-kmsrN   rz   r{   r   r|   r}   r~   r   r   aws:kmsr   r   r   r   r   r   r   r   r   r   r   s      r!   s3_export_bucket_kmsr      s     4KK(   ! (,[M:mK=XZ<[\/2SU^1_` ! (,[M:mK=XZ<[\$'H&&QR !  ,[M:mK=XZ<[\$'<g&FG
F6 DJJv4FG
Hr   c                  n    t        ddddid      }|d   dk(  rd|vr|y |d   d	k(  rd|vsd
|vr|y |)NErrorAccessDeniedzAccess Denied)CodeMessage	PutObject)error_responseoperation_nameServerSideEncryptionr   r   SSEKMSKeyIdr	   )argskwargsclient_errors      r!   mock_putr     sp    ._!UVgrL $%1!/ 0	&	'9	4!/=3N 4O r#   c                     t               }t        |_        t               }||_        t               }||_        | j                  d|       y Nzboto3.Session.resource)return_valuer   r   putr   Objectpatchmockermock_objectmock_object_constructormock_s3_resources       r!   mock_s3_resource_aesr     F    +KKO'k+6( {5 LL)8HLIr#   c                     t               }t        |_        t               }||_        t               }||_        | j                  d|       y r   r   r   s       r!   mock_s3_resource_kmsr   ,  r   r#   c               #   R   K   t               5  d  d d d        y # 1 sw Y   y xY wwN)r   r4   r#   r!   
gcs_clientr   ;  s%     
 
	      '	'$'c               #   R   K   t               5  d  d d d        y # 1 sw Y   y xY wwr   )r   r4   r#   r!   azure_clientr   D  #     		   r   c               #   R   K   t               5  d  d d d        y # 1 sw Y   y xY wwr   )r   r4   r#   r!   redis_clientr   J  r   r   c              #      K   t        | dddddddddgid	gd
gi       t        | dddddddddgid	gd
dddddddgid	gd
ggi       |  y w)Nz'http://test.ml.backend.for.sdk.com:9092resultsModelSingleg?labelrp   choiceslabel_A)	from_nameto_nametypevalue)model_versionscoreresulturlpredictionsz'http://test.ml.backend.for.sdk.com:9093ModelAg?ModelBg333333?label_Br   
ml_backends    r!   ml_backend_for_test_predictr   P  s      5%2 &-&)_hktju^vw

  5 *2!$ .5+1(1*3i[)A	# *2!$ .5+1(1*3i[)A	#
!D s   AAc               #   R   K   t               5 } |  d d d        y # 1 sw Y   y xY wwr   )r   ms    r!   r   r     s'     		 a  r   import_from_url)namec               #   R   K   t               5 } |  d d d        y # 1 sw Y   y xY wwr   )r   r   s    r!   r   r     s'     		 1  r   c              #   l   K   t        | dd       t        | dd       t        | ddg i	       |  y w)
Nz'https://test.heartex.mlbackend.com:9090zFri Feb 19 17:10:44 2021)r   setup_model_versionz'https://test.heartex.mlbackend.com:9091T)r   health_connect_timeouthttp://localhost:8999r   r   r   r   s    r!   ml_backend_1r     sA     AWq Z-VostZ-DS\^`Rab
s   24c                      t         j                  j                         D ]  } d| d<   	 	 dd l}dd lm} |j                  |       y # t        $ r Y y w xY w)NFASYNCr   )r   	RQ_QUEUESvalues	importlibdjango_rq.queuesqueuesreloadImportError)qr   dqs      r!   pytest_configurer     sT    &&( '
% s   A 	AAc                       e Zd ZdZd Zd Zy)URLSzThis class keeps urls with apic                      d| _         d | _        y )N/api/projects/)project_create	task_bulk)selfs    r!   __init__zURLS.__init__  s    .r#   c                 0    d| d| _         d| d| _        y )Nr   z/tasks/bulk/z
/projects/z/plots)r   plots)r   pks     r!   set_projectzURLS.set_project  s"    )"\:!"V,
r#   N)__name__
__module____qualname____doc__r   r   r4   r#   r!   r   r     s    (-r#   r   c                      d} | ddS )Nz<View>
         <HyperText name="hypertext_markup" value="$markup"></HyperText>
         <List name="ranker" value="$replies" elementValue="$text" elementTag="Text"
               ranked="true" sortedHighlightColor="#fcfff5"></List>
        </View>testlabel_configtitler4   r   s    r!   project_rankerr    s    E
 "F33r#   c                      d} | ddS )zQSimple project with dialog configs

    :return: config of project with task
    z<View>
      <TextEditor>
        <Text name="dialog" value="$dialog"></Text>
        <Header value="Your answer is:"></Header>
        <TextArea name="answer" toName="dialog"></TextArea>
      </TextEditor>
    </View>r  r  r4   r  s    r!   project_dialogr	    s    
E "F33r#   c                      d} | ddS )NaF  <View>
    <Choices name="animals" toName="xxx" choice="single-radio">
      <Choice value="Cat"></Choice>
      <Choice value="Dog"></Choice>
      <Choice value="Opossum"></Choice>
      <Choice value="Mouse"></Choice>
      <Choice value="Human"/>
    </Choices>

    <Choices name="things" toName="xxx" choice="single-radio">
      <Choice value="Chair"></Choice>
      <Choice value="Car"></Choice>
      <Choice value="Lamp"></Choice>
      <Choice value="Guitar"></Choice>
      <Choice value="None"/>
    </Choices>

    <Image name="xxx" value="$image"></Image>
    </View>r  r  r4   r  s    r!   project_choicesr    s    E& "F33r#   c           	         t        |       } d}d}t               } |       }t        j                  j	                  |      }|j                  |       t        |       t        j                  ||j                        }	|r+d|	j                  _        |	j                  j                          |	|_        |j                          |rdt        | ||      j                  dk(  sJ t!        j"                         5 }
|
j%                  dt'        j(                  d      t+        j,                  d	d
i             |
j%                  dt'        j(                  d      t+        j,                  d	di             | j/                  |j0                  |      }t3        d|j                         |j                  dk(  sJ d       	 ddd       t4        j                  j7                  |d         j9                         }|j;                  |j<                         t3        d|j>                         || _         || _!        || _"        || _#        |	| _$        | S # 1 sw Y   xY w)a  Create new test@gmail.com user, login via client, create test project.
    Project configs are thrown over params and automatically grabs from functions names started with 'project_'

    :param client: fixture with http client (from pytest-django package) and simulation of http server
    :param project_template: dict with project config
    :param do_auth: make authorization for creating user
    ztest@gmail.comr  email
created_byr  T.  POSTzml\.heartex\.net/\d+/validatestatusokrp   GETzml\.heartex\.net/\d+/healthUP)dataz Project create with status code:   z9Create project result should be redirect to the next pageNr  )r  zProject id:)%r   r   r   objectscreateset_passwordr   r   create_organization
first_namejwtlegacy_api_tokens_enabledsaveactive_organizationr   status_coderequests_mockMockerregister_urirecompilerk   rl   postr   printr   filterfirstr   r   idprojectuserurlsproject_configorg)rK   project_templatedo_authr   r  passwordr0  r1  r/  r2  r   rr.  s                r!   setup_projectr7    s    fFEH6D%'N <<U+DhD

*
*d$//
RC ,0)"DIIKfeX.::cAAA!!# 	eqNN62::.N#OVZV`V`bjlpaqVrNsNN5"**-K"LSWS]S]_gim^nSoNpD//nEA4ammD==C'd)dd'	e //((~g/F(GMMO$mWZZ( FKFK*FFJM%	e 	es   5CIIc                 "    t        | t              S r   r7  r	  rK   s    r!   setup_project_dialogr;        00r#   c                 (    t        | t        dd      S )NFT)r4  r   r9  r:  s    r!   setup_project_for_tokenr>  "  s    Z^__r#   c                 "    t        | t              S r   )r7  r  r:  s    r!   setup_project_rankerr@  '  r<  r#   c                 "    t        | t              S r   )r7  r  r:  s    r!   setup_project_choicesrB  ,  s    11r#   c                 <    d| _         d| _        d| _        d| _        y)z
    Configure settings for contextlog tests in CI.
    Be sure that responses is activated in any testcase where this fixture is used.
    TFN)COLLECT_ANALYTICSCONTEXTLOG_SYNCTEST_ENVIRONMENTDEBUG_CONTEXTLOGr   s    r!   contextlog_test_configrH  1  s$     "&H#H %H %Hr#   c                 p   t        |       } d}d}t        j                  j                  |      }|j	                  |       t        |      }|j                          t        j                  ||j                        }d|j                  _        |j                  j                          |r|nt        |      | _        |rd nt        d      | _        || _        || _        || _        |j%                         j&                  | _        || _        t-        | ||      j.                  d	k7  rt1        d
| d       | S )Nbusiness@pytest.netpytestr  r  T)adminr   )r-  r  User  failed to login!)r   r   r  r  r  r   r!  r   r  r  r  r   r   businessteamrL  	annotatorr/  reset_tokenkeyapi_keyorganizationr   r#  r*  )rK   r  r5  r/  rO  r2  s         r!   business_clientrV  >  s    fF!EH<<U+Dht$HIIK

*
*d$//
RC(,CGG%GGLLN"*hd0KFO"$1(=FKFLFFK%%'++FNFfeX&22c9dV,-.Mr#   c                 l   t        |       } d}d}t        j                  j                  |      }|j	                  |       |j                          t        |       t        j                  ||j                         t        | ||      j                  dk7  rt        d| d       || _        || _        | S )Nzannotator@pytest.netrK  r  r  r  rM  rN  r   r   r  r  r  r!  r   r   r  r  r   r#  r*  r/  rQ  rK   r  r5  r/  s       r!   annotator_clientrZ  Y  s     fF"EH<<U+DhIIKD$$DOOLfeX&22c9dV,-.FKFMr#   c                 l   t        |       } d}d}t        j                  j                  |      }|j	                  |       |j                          t        |       t        j                  ||j                         t        | ||      j                  dk7  rt        d| d       || _        || _        | S )Nzannotator2@pytest.netrK  r  r  r  rM  rN  rX  rY  s       r!   annotator2_clientr\  k  s     fF#EH<<U+DhIIKD$$DOOLfeX&22c9dV,-.FKFMr#   rO  rQ  )paramsc                 H    | j                   dk(  r|S | j                   dk(  r|S y )NrO  rQ  )param)requestrV  rZ  s      r!   
any_clientra  }  s+    }}
"	+	% 
&r#   c           	      ^   t        dd      }ddddddg}t        j                  j                  d	
      }t	        ||d         }|j
                  j                         j                  dk(  sJ t        j                  j                  |D cg c]  }t        ||       c}       |S c c}w )NTestab  
            <View>
              <Text name="meta_info" value="$meta_info"></Text>
              <Text name="text" value="$text"></Text>
              <Choices name="text_class" toName="text" choice="single">
                <Choice value="class_A"></Choice>
                <Choice value="class_B"></Choice>
              </Choices>
            </View>)r  r  zmeta info Aztext A)	meta_inforp   zmeta info Bztext BrJ  r  r   r   )r  r.  )
dictr   r  r+  r   ml_backendsr,  r   r   bulk_create)rV  rZ  *_project_for_text_choices_onto_A_B_classes_2_tasks_with_textA_and_textBusersr.  tasks          r!   configured_projectrl    s    152. $X6#X6%! LL&;<EEuQxPG$$&**.EEEELLKhi4dg>ijN js   B*django_live_urlc              #   (   K   | j                    y wr   )r   )live_servers    r!   get_server_urlrp    s     
//s   9ff_front_dev_1682_model_version_dropdown_070622_short_off)r   r   c               #      K   ddl m fd} t        j                  d|       5  d  d d d        y # 1 sw Y   y xY ww)Nr   flag_setc                  &    | d   dk(  ry | i |S )Nr   5ff_front_dev_1682_model_version_dropdown_070622_shortFr4   r   r   rt  s     r!   fake_flag_setzPff_front_dev_1682_model_version_dropdown_070622_short_off.<locals>.fake_flag_set  s#    7MM(((r#   ztasks.serializers.flag_setwrapscore.feature_flagsrt  mockr   rx  rt  s    @r!   rq  rq    s7     +)
 
0	F      #A 4	A =A async_import_offc               #      K   ddl m fd} t        j                  d|       5  d  d d d        y # 1 sw Y   y xY ww)Nr   rs  c                       | i |S r   r4   rw  s     r!   rx  z'async_import_off.<locals>.fake_flag_set  s    (((r#   zdata_import.api.flag_setry  r{  r~  s    @r!   r  r    s7     +) 
.m	D   r  c                  *    dt         j                  d<   y)z[
    Automatically set the environment variable for all tests, including Tavern tests.
    r   1fflag_feat_utc_210_prediction_validation_15082025Nr<   r4   r#   r!   set_feature_flag_envvarr    s    
 GMBJJBCr#   Lfflag_feat_back_lsdv_3958_server_side_encryption_for_target_storage_short_onc               #      K   ddl m fd} t        j                  d|       5  d  d d d        y # 1 sw Y   y xY ww)Nr   rs  c                  &    | d   dk(  ry | i |S )Nr   Ifflag_feat_back_lsdv_3958_server_side_encryption_for_target_storage_shortTr4   rw  s     r!   rx  zcfflag_feat_back_lsdv_3958_server_side_encryption_for_target_storage_short_on.<locals>.fake_flag_set  s#    7aa(((r#   zio_storages.s3.models.flag_setry  r{  r~  s    @r!   r  r    s7     +)
 
4M	J   r  Afflag_fix_all_lsdv_4813_async_export_conversion_22032023_short_onc               #      K   ddl m fd} t        j                  d|       5  d  d d d        y # 1 sw Y   y xY ww)Nr   rs  c                  &    | d   dk(  ry | i |S )Nr   >fflag_fix_all_lsdv_4813_async_export_conversion_22032023_shortTr4   rw  s     r!   rx  zXfflag_fix_all_lsdv_4813_async_export_conversion_22032023_short_on.<locals>.fake_flag_set  s#    7VV(((r#   data_export.api.flag_setry  r{  r~  s    @r!   r  r    7     +)
 
.m	D   r  Gff_back_dev_4664_remove_storage_file_on_export_delete_29032023_short_onc               #      K   ddl m fd} t        j                  d|       5  d  d d d        y # 1 sw Y   y xY ww)Nr   rs  c                  &    | d   dk(  ry | i |S )Nr   Dff_back_dev_4664_remove_storage_file_on_export_delete_29032023_shortTr4   rw  s     r!   rx  z^ff_back_dev_4664_remove_storage_file_on_export_delete_29032023_short_on.<locals>.fake_flag_set  s#    7\\(((r#   r  ry  r{  r~  s    @r!   r  r    r  r  local_files_storagec           	         d| _         t        t        j                               t        d      z  }|t        d      z  }t	        j
                  t        |      d       t        dj                  d       }t        j                  t        |      t        |t        d      z               t        j                  t        |      t        |t        d      z               y )	NTfilessubdir)exist_okz(tests/test_suites/samples/test_image.png/ztest_image1.pngztest_image2.png)
LOCAL_FILES_SERVING_ENABLEDr   tempfile
gettempdirr=   makedirsstrsplitshutilcopyfile)r   tempdirr  
test_images       r!   r  r    s    +/H(8&&()DM9GtH~%FKKFd+AGGLMJ
OOC
OS48I3J)J%KL
OOC
OS$7H2I)I%JKr#   !local_files_document_root_tempdirc                 `    t        t        j                               }|j                  | _        y r   )r   r  r  rootLOCAL_FILES_DOCUMENT_ROOTr   r  s     r!   r  r    s!    8&&()G)0H&r#    local_files_document_root_subdirc                 v    t        t        j                               t        d      z  }t        |      | _        y )Nr  )r   r  r  r  r  r  s     r!   r  r    s*    8&&()DM9G),WH&r#   c              #   6  K   d}t        j                  d      5 }|j                  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
g       |j                  | dt	        j
                  ddi             | d d d        y # 1 sw Y   y xY ww)Nzhttp://localhost:9090T)	real_httpr  z/setupversion1r  r   r     rk   r#  version2version3z/healthr  r  r  )r$  r%  r&  getrk   rl   )r   r   r   s      r!   mock_ml_auto_updater    s     
!C				- 	e6N+5FWZ[+5FWZ[+5FWZ[+5FWZ[+5FWZ[
	
 	
WoDJJ$/?$@A  s   BA)B	BBB$mock_ml_backend_auto_update_disabledc            	   #      K   t        d      5 } | j                  ddddddd	d
dddd	g       |  d d d        y # 1 sw Y   y xY ww)Nr  )r   r  zhttp://localhost:9090/setuprb   r  r  r  r  2)r   r&  r   s    r!   r  r    s]     	Z	8 	A	)+->sS+.$?PST	
 	 	 	s   A
&>	A
AA
freeze_clockc               #      K   t        j                         at        t              at        j	                          d  t        j                          d ad ay wr   )r   nowr   freezerstartstopr4   r#   r!   r  r  *  s>     
 ,,.C#GMMO	 LLNG
Cs   AAsecondsreturnc                     t         j                          t        t        |      z  at	        t              a t         j                          y )N)r  )r  r  r  r   r   r  )_r  s     r!   
tick_clockr  <  s/     LLN9W%%C#GMMOr#   utc_timec                 j    t         j                          t        |      a t         j                          y r   )r  r  r   r  )responser  s     r!   freeze_datetimer  E  s    LLN(#GMMOr#   c                     g }g }|D ]A  }d|j                   v sd|j                   v r|j                  |       1|j                  |       C ||z   |d d  y )Nr   r   )fixturenamesappend)configitems
mock_testsother_testsitems        r!   pytest_collection_modifyitemsr  L  sf     JK %!T%6%66:PTXTeTe:ed#t$	% Z'E!Hr#   )TF)r  )r   )yr   loggingr=   r'  r  r  copyr   r   r   pathlibr   typesr   unittest.mockr   rJ   r}  rK  r$  ujsonrk   botocore.exceptionsr
   django.confr   	freezegunr   motor   organizations.modelsr   projects.modelsr   tasks.modelsr   users.modelsr   pytest_env.plugin
pytest_envr   r*  exitlabel_studio.tests.sdk.fixturesutilsr   r   r   r   r   r   r   r   r   set_stream_loggerDEBUGfixturer"   r&   r)   r-   r0   r5   r?   rD   rF   r`   rf   rm   rq   rs   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r7  r;  r>  r@  rB  rH  rV  rZ  r\  ra  rl  rp  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  intr  r  r  r  r4   r#   r!   <module>r     s    	 	    (  ! #      +   !  - #  
 .
 
 
   . > R R , , , ,  
 , , j!f "f j!0 "0 I.5 /5 j!: ":
      
 
       " "J " "J J J J J    
  
 4 4n  
 &' (
   	- 	-44 4.0f 1 1 ` ` 1 1 2 2 	& 	&  4  "  " 
K01  2   8 &' ( PZ^_	 `	 '6 7 I.M /M cd	 e	 XY	 Z	 ^_	 `	 *+L ,L 896 :6
 786 96
  $ ;<
 =
 
 ^$ %"3 t   ([  	
89Js   <U3 3VV