
    jg[                         d dl 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 d dlmZ d dlmZ d d	lmZ d d
lmZ dZdZ G d de      Zy)    N)
itemgetter)Path)call_command)BaseCommandCommandError)DEFAULT_DB_ALIASconnections)MigrationLoader)MigrationRecorder)timezone)signalcommandzmanagestate.jsondefaultc                       e Zd ZU dZdxZZdZeed<   eed<   e	ed<   e
ed<   d Zed        Zd	e	fd
Zd	e	fdZdefdZdefdZde	de	defdZdefdZdefdZy)Commandz,Manage database state in the convenient way.Nmigrate_argsmigrate_optionsfilename	verbosityc                    |j                  ddd       |j                  ddt        dt         d	       |j                  d
dt        dt         d       |j                  ddt        dt         d       |j                  ddddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  d dd!       |j                  d"dd#d$       y )%Naction)dumploadztAn action to do. Dump action saves applied migrations to a file. Load action applies migrations specified in a file.)choiceshelpstate?z@A name of a state. Usually a name of a git branch. Defaults to "")nargsr   r   z-dz
--databasez6Nominates a database to synchronize. Defaults to the "z" database.)r   r   z-fz
--filenamez!A file to write to. Defaults to "z	--noinputz
--no-inputstore_falseinteractivez^The argument for "migrate" command. Tells Django to NOT prompt the user for input of any kind.)r   destr   z--fake
store_truezYThe argument for "migrate" command. Mark migrations as run without actually running them.)r   r   z--fake-initiala   The argument for "migrate" command. Detect if tables already exist and fake-apply initial migrations if so. Make sure that the current database schema matches your initial migration before using this flag. Django will only check for an existing table name.z--planzaThe argument for "migrate" command. Shows a list of the migration actions that will be performed.z--run-syncdbzOThe argument for "migrate" command. Creates tables for apps without migrations.z--checkcheck_unappliedz_The argument for "migrate" command. Exits with a non-zero status if unapplied migrations exist.)add_argumentDEFAULT_STATEr   DEFAULT_FILENAME)selfparsers     l/var/www/html/Stanley/venv/lib/python3.12/site-packages/django_extensions/management/commands/managestate.pyadd_argumentszCommand.add_arguments   si   .G 	 	
 	3STaSbbcd 	 	
 	,(8IJZI[[fg 	 	
 	,(845E4FaH 	 	
 	m-N 	 	

 	\I 	 	

 	\L 	 	
 	\Q 	 	

 	<? 	 	

 	l1BO 	 	
    c                     || _         || _        |d   | _        t        |   | _        || _        || _         t        | |      |       y )Nr   )r   r   r   r	   conndatabaser   getattr)r'   r   r.   r   r   argsoptionss          r)   handlezCommand.handleR   sI     & -)	  fe$r+   r   c           	         | j                         }|j                  | j                                | j                  ||i       | j                  j                  | j
                  j                  d| d| j                   d             y)z"Save applied migrations to a file.zMigrations for state "z"" have been successfully saved to .N)get_migrated_appsupdateget_applied_migrationswritestdoutstyleSUCCESSr   )r'   r   migrated_appss      r)   r   zCommand.dump\   ss    ..0T88:;

E=)*$**,,$UG+Mdmm_\]^
 	r+   c                 l   | j                         j                  |      }|t        d|       i | j                  | j                  | j
                  dkD  r| j
                  dz
  ndd}|j                         D ]  \  }}| j                  ||      r| j
                  dkD  r8| j                  j                  | j                  j                  d| d             ||g| j                  }t        dg|i |  | j                  j                  | j                  j                  d	| d
             y)zApply migrations from a file.NzNo such state saved:    r   )r.   r   zApplying migrations for "r   migrateMigrations for "z!" have been successfully applied.)readgetr   r   r.   r   items
is_appliedr9   r8   r:   WARNINGr   r   r;   )r'   r   
migrationskwargsapp	migrationr0   s          r)   r   zCommand.loade   s&   YY[__U+
!6ug>??
""
/3~~/A!+q
 )..0NCsI.~~!!!$**"4"47PQTPUUV5W"XY7T%6%67D4T4V4 1 	$**,,ug%FG
 	r+   returnc                     t        | j                        j                  }t        j	                  |d      }| j
                  dkD  r6| j                  j                  ddj                  t        |            z          |S )z!Installed apps having migrations.zeror>   zApps having migrations: z, )
r
   r-   r<   dictfromkeysr   r9   r8   joinsorted)r'   appsr<   s      r)   r5   zCommand.get_migrated_apps~   s^    tyy)77dF3>>AKK8499VMEZ;[[\r+   c                     | j                   r| j                   S t        | j                        j                         }t	        |j                         t        d            }t        |      | _         | j                   S )z,Installed apps with last applied migrations.r>   )key)_applied_migrationsr   r-   applied_migrationsrP   keysr   rM   )r'   rF   last_applieds      r)   r7   zCommand.get_applied_migrations   s^    ##+++&tyy1DDF
joo/Z]C#'#5 '''r+   rH   rI   c                     | j                         j                  |      }||k(  rH| j                  dkD  r8| j                  j	                  | j
                  j                  d| d             yy)z7Check whether a migration for an app is applied or not.r>   r@   z" are already applied.TF)r7   rB   r   r9   r8   r:   rE   )r'   rH   rI   applieds       r)   rD   zCommand.is_applied   sg    --/33C8i~~!!!$**"4"4&se+AB#  r+   c                    t        | j                        }|j                         r|j                         st	        d| j                         t        | j                        5 }t        j                  |      cddd       S # 1 sw Y   yxY w)zGet saved state from the file.zNo such file: N)r   r   existsis_filer   openjsonr   )r'   pathfiles      r)   rA   zCommand.read   s\    DMM"{{}DLLN?@@$-- D99T? !  s   #BBdatac                 ,   	 | j                         }|j                  |t        t	        j
                                      t        | j                  d      5 }t        j                  ||dd       ddd       y# t        $ r i }Y tw xY w# 1 sw Y   yxY w)z.Write new data to the file using existent one.)
updated_atw   T)indent	sort_keysN)
rA   r   r6   strr   nowr]   r   r^   r   )r'   ra   savedr`   s       r)   r8   zCommand.write   sx    	IIKE 	Tc(,,.&9:$--%IIeT!t< &%	  	E	 &%s   A9 B
9BB
B)__name__
__module____qualname__r   r-   r.   rT   rM   __annotations__rh   intr*   r   r2   r   r   r5   r7   boolrD   rA   r8    r+   r)   r   r      s    9DD8MN4
l % %# # 24 	( 	(	c 	c 	d 	#d #	=$ 	=r+   r   )r^   operatorr   pathlibr   django.core.managementr   django.core.management.baser   r   	django.dbr   r	   django.db.migrations.loaderr
   django.db.migrations.recorderr   django.utilsr   "django_extensions.management.utilsr   r&   r%   r   rq   r+   r)   <module>r{      s<       / A 3 7 ; ! <% [=k [=r+   