
    h=                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S	r " S
 S5      rg)    N)StringIO)apps)settings)serializers)router)atomic)import_stringtest_c                       \ rS rSrSrS rS rS r SS jrS r	S r
S	 rS
 rS rSS jrSS jrSS jrS rSS jr SS jrS rS rS rS rS rSrg)BaseDatabaseCreation   zg
Encapsulate backend-specific differences pertaining to creation and
destruction of the test database.
c                     Xl         g N
connection)selfr   s     R/var/www/html/env/lib/python3.13/site-packages/django/db/backends/base/creation.py__init__BaseDatabaseCreation.__init__   s    $    c                 6    U R                   R                  5       $ r   )r   _nodb_cursorr   s    r   r   !BaseDatabaseCreation._nodb_cursor   s    ++--r   c                 d    [         R                  R                  U[        R                  -   5        g r   )sysstderrwriteoslinesep)r   msgs     r   logBaseDatabaseCreation.log   s    

rzz)*r   c                    SSK Jn  U R                  5       nUS:  a3  SnU(       a  SnU R                  U< SU R	                  X5      < S35        U R                  XU5        U R                  R                  5         U[        R                  U R                  R                     S'   X`R                  R                  S'    U R                  R                  S	   S
   SL aI  [        R                  n[        R                  " 5        V	s0 s H  oR                  S_M     sn	[        l        U" S[!        US-
  S5      SU R                  R                  SS9  U R                  R                  S	   S
   SL a  W[        l        U(       a  U R#                  5       U R                  l        U" SU R                  R                  S9  U R                  R'                  5         [(        R*                  R-                  S5      S:X  a  U R/                  5         U$ s  sn	f ! U R                  R                  S	   S
   SL a  W[        l        f f = f)z
Create a test database, prompting the user for confirmation if the
database already exists. Return the name of the test database created.
r   )call_command   CreatingzUsing existing test database for alias ...NAMETESTMIGRATEFNmigrateT)	verbosityinteractivedatabase
run_syncdbcreatecachetable)r0   RUNNING_DJANGOS_TEST_SUITEtrue)django.core.managementr%   _get_test_db_namer"   _get_database_display_str_create_test_dbr   closer   	DATABASESaliassettings_dictMIGRATION_MODULESr   get_app_configslabelmaxserialize_db_to_string_test_serialized_contentsensure_connectionr   environget mark_expected_failures_and_skips)
r   r.   autoclobber	serializekeepdbr%   test_database_nameactionold_migration_modulesapps
             r   create_test_db#BaseDatabaseCreation.create_test_db    s    	8!335>F)HH 229Q 	YV<<N4??001&90B%%f-	C,,V4Y?5H(0(B(B%/3/C/C/E./EIItO/E.* i!mQ/!.. ,,V4Y?5H-B* 8<8S8S8UDOO5'$//2G2GH 	))+::>>676A113!!A. ,,V4Y?5H-B* Is   ?AH H7H H -H>c                 <    US   U R                   R                  S'   g)zh
Set this database up to be used in testing as a mirror of a primary
database whose settings are given.
r*   N)r   r<   )r   primary_settings_dicts     r   set_as_test_mirror'BaseDatabaseCreation.set_as_test_mirrorj   s    
 1Ff0M%%f-r   c                 |   ^  U 4S jn[        5       n[        R                  " SU" 5       SUS9  UR                  5       $ )z
Serialize all data in the database into a JSON string.
Designed only for test runner usage; will not handle large
amounts of data.
c               3     >#    SSK Jn   U " TR                  5      n[        R                  " 5        GHL  nUR
                  c  M  UR                  UR                  ;   d  M/  UR                  [        R                  ;  d  MO  UR                  5        H  nUR                  R                  TR                  5      (       d  M/  [        R                  " TR                  R                   U5      (       d  Ma  UR"                  R%                  TR                  R                   5      R'                  UR                  R(                  R                  5      nUR*                  (       a  SOS nUR-                  US9 S h  vN   M     GMO     g  N7f)Nr   )MigrationLoaderi  )
chunk_size)django.db.migrations.loaderrV   r   r   r>   models_moduler?   migrated_appsnamer   TEST_NON_SERIALIZED_APPS
get_models_metacan_migrater   allow_migrate_modelr;   _base_managerusingorder_bypk_prefetch_related_lookupsiterator)rV   loader
app_configmodelquerysetrW   r   s         r   get_objects@BaseDatabaseCreation.serialize_db_to_string.<locals>.get_objectsy   s    C$T__5F"224
,,8"((F,@,@@"x/P/PP!+!6!6!8 ;;22 OO $889N9NPUVV',':':'@'@ $ 5 5(&hu{{~~':':; % )1(J(JPT ' (0'8'8J'8'OOO "9 5  Ps0   =FF F ;F?.F1BF4F5FjsonN)indentstream)r   r   rH   getvalue)r   rk   outs   `  r   rA   +BaseDatabaseCreation.serialize_db_to_stringq   s4    	P. jfkmDM||~r   c                 (   [        U5      n[        5       n[        U R                  R                  S9   U R                  R                  5          [        R                  " SXR                  R                  S9 HL  nUR                  5         UR                  UR                  R                  R                  R                  5        MN     SSS5        U R                  R                  US9  SSS5        g! , (       d  f       N0= f! , (       d  f       g= f)z_
Reload the database with data from a string generated by
the serialize_db_to_string() method.
)rb   rm   N)table_names)r   setr   r   r;   constraint_checks_disabledr   deserializesaveaddobject	__class__r^   db_tablecheck_constraints)r   datart   objs       r   deserialize_db_from_string/BaseDatabaseCreation.deserialize_db_from_string   s    
 ~e$////0 ;;=&22D(=(=C HHJOOCJJ$8$8$>$>$G$GH	 > OO--+-F 10 >= 10s$   DA:C2!D2
D 	<D
Dc                 Z    SU R                   R                  < SUS:  a  SU-  < 3$ S< 3$ )zB
Return display string for a database for use in various actions.
'   z ('%s') )r   r;   )r   r.   database_names      r   r7   .BaseDatabaseCreation._get_database_display_str   s<    
 OO!!+4>Y&A
 	
?AA
 	
r   c                     U R                   R                  S   S   (       a  U R                   R                  S   S   $ [        U R                   R                  S   -   $ )z
Internal implementation - return the name of the test DB that will be
created. Only useful when called from create_test_db() and
_create_test_db() and when no external munging is done with the 'NAME'
settings.
r+   r*   )r   r<   TEST_DATABASE_PREFIXr   s    r   r6   &BaseDatabaseCreation._get_test_db_name   sO     ??((08??008@@#doo&C&CF&KKKr   c                 ,    UR                  SU-  5        g )Nz%CREATE DATABASE %(dbname)s %(suffix)s)execute)r   cursor
parametersrI   s       r   _execute_create_test_db,BaseDatabaseCreation._execute_create_test_db   s    >KLr   c           	      `   U R                  5       nU R                  R                  R                  U5      U R	                  5       S.nU R                  5        n U R                  XeU5        SSS5        U$ ! [         Ga  nU(       a  Us SnAsSSS5        $ U R                  SU-  5        U(       d  [        SU-  5      nU(       d  WS:X  a   US:  a%  U R                  SU R                  X5      < S35        UR                  S	U-  5        U R                  XeU5         SnAN! [         a8  nU R                  S
U-  5        [        R                  " S5         SnA SnANSnAff = fU R                  S5        [        R                  " S5         SnAGN+SnAff = f! , (       d  f       U$ = f)z6
Internal implementation - create the test db tables.
)dbnamesuffixNz+Got an error creating the test database: %szXType 'yes' if you would like to try deleting the test database '%s', or 'no' to cancel: yesr&   z'Destroying old test database for alias r)   zDROP DATABASE %(dbname)sz-Got an error recreating the test database: %sr   zTests cancelled.)r6   r   ops
quote_namesql_table_creation_suffixr   r   	Exceptionr"   inputr7   r   r   exit)	r   r.   rG   rI   rJ   test_db_paramsr   econfirms	            r   r8   $BaseDatabaseCreation._create_test_db   s    "335oo))445GH446

  F  ,,VVL !F "!A    -- !  FJK"#=?QRG 'U"2$$> HH %)$B$B(1%&!" 'AN'RS44VVTT$ $!PST!TU$ HH/0HHQKK=  ! F "!ss   FA55F FF	F6FAD$F$
E&.*E!FF!E&&*FFFF
F-c                     U R                   R                  S   nUS:  a3  SnU(       a  SnU R                  U< SU R                  X%5      < S35        U R	                  XU5        g)z
Clone a test database.
r*   r&   zCloning test databasezUsing existing clonez for alias r)   N)r   r<   r"   r7   _clone_test_db)r   r   r.   rG   rI   source_database_namerK   s          r   clone_test_db"BaseDatabaseCreation.clone_test_db   sc      $<<VD>,F/HH 229S 	Fv6r   c                 d    U R                   R                  n0 UESSR                  US   U5      0E$ )zH
Return a modified connection settings dict for the n-th clone of a DB.
r*   z{}_{})r   r<   format)r   r   orig_settings_dicts      r   get_test_db_clone_settings/BaseDatabaseCreation.get_test_db_clone_settings  sA     "__::
 
GNN#5f#=vF
 	
r   c                     [        S5      e)z9
Internal implementation - duplicate the test db tables.
znThe database backend doesn't support cloning databases. Disable the option to run tests in parallel processes.)NotImplementedError)r   r   r.   rI   s       r   r   #BaseDatabaseCreation._clone_test_db  s     "E
 	
r   Nc                    U R                   R                  5         Uc  U R                   R                  S   nOU R                  U5      S   nUS:  a3  SnU(       a  SnU R	                  U< SU R                  X%5      < S35        U(       d  U R                  XR5        UbC  U[        R                  U R                   R                     S'   XR                   R                  S'   gg)z^
Destroy a test database, prompting the user for confirmation if the
database already exists.
Nr*   r&   
Destroying
Preservingr(   r)   )
r   r9   r<   r   r"   r7   _destroy_test_dbr   r:   r;   )r   old_database_namer.   rI   r   rJ   rK   s          r   destroy_test_db$BaseDatabaseCreation.destroy_test_db  s     	>!%!>!>v!F!%!@!@!H!P>!F%HH 229Q !!"4@ (@QHt445f=4EOO))&1 )r   c                     U R                  5        nUR                  SU R                  R                  R	                  U5      -  5        SSS5        g! , (       d  f       g= f)z6
Internal implementation - remove the test db tables.
zDROP DATABASE %sN)r   r   r   r   r   )r   rJ   r.   r   s       r   r   %BaseDatabaseCreation._destroy_test_db>  sH      FNN"T__%8%8%C%CDV%WW !  s   8A
A c           	         SSK JnJn  U R                  R                  R
                   Hi  nUR                  S5      u  pEnUR                  S5      S   nU[        R                  ;   d  MA  [        U5      n[        X5      n	[        XU" U	5      5        Mk     U R                  R                  R                  R                  5        Hz  u  pU Ho  nUR                  S5      u  pEnUR                  S5      S   nU[        R                  ;   d  MA  [        U5      n[        X5      n	[        XU" U
5      " U	5      5        Mq     M|     g)z
Mark tests in Django's test suite which are expected failures on this
database and test which should be skipped on this database.
r   )expectedFailureskip.N)unittestr   r   r   featuresdjango_test_expected_failures
rpartitionsplitr   INSTALLED_APPSr	   getattrsetattrdjango_test_skipsitems)r   r   r   	test_nametest_case_name_test_method_nametest_app	test_casetest_methodreasontestss               r   rF   5BaseDatabaseCreation.mark_expected_failures_and_skipsK  s    	311OOI2;2F2Fs2K/N/ s+A.H8222).9	%iB	_[5QR P "__55GGMMOMF"	6?6J6J36O3#3$??3/2x666 -n =I"))"FKIfk9RS # Pr   c                     g)zA
SQL to append to the end of the test table creation statements.
r    r   s    r   r   .BaseDatabaseCreation.sql_table_creation_suffixe  s     r   c                 h    U R                   R                  nUS   US   US   U R                  5       4$ )z
Return a tuple with elements of self.connection.settings_dict (a
DATABASES setting value) that uniquely identify a database
accordingly to the RDBMS particularities.
HOSTPORTENGINE)r   r<   r6   )r   r<   s     r   test_db_signature&BaseDatabaseCreation.test_db_signaturek  sA     55&!&!(#""$	
 	
r   c                     U R                  [        U5      5      nU R                  R                  R	                  U5        U R                  R                  5         g r   )r   strr   r<   updater9   )r   
_worker_idr<   s      r   setup_worker_connection,BaseDatabaseCreation.setup_worker_connectiony  s@    77JH
 	%%,,];r   r   )r&   FTF)F)r&   FF)Nr&   FN)__name__
__module____qualname____firstlineno____doc__r   r   r"   rN   rR   rA   r   r7   r6   r   r8   r   r   r   r   r   rF   r   r   r   __static_attributes__r   r   r   r   r      s    
%.+ FKH"TN!FG*
	LM-"^7,

 IM!FFT4
 r   r   )r   r   ior   django.appsr   django.confr   django.corer   	django.dbr   django.db.transactionr   django.utils.module_loadingr	   r   r   r   r   r   <module>r      s4    	 
     #  ( 5  o  o r   