
    +h5'                     ^   d dl Z d dlm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  e e
j$                  d      d d	 D  cg c]
  }  e|        c}       Z ej*                  e      Z G d
 de      Z G d de      Z G d de      Zd Zed        Zed d       Ze	 	 	 d!d       Ze	 	 d"d       Zed#d       Z e	 	 d$d       Z!ed%d       Z"ed&d       Z#ed'd       Z$e	 	 d(d       Z%ed)d       Z&ed*d       Z'ed*d       Z(ed+d       Z)ed,d       Z*yc c} w )-    Nwraps)current_app)__version__)Config)command)CommandError.   c                   "    e Zd Zd Zed        Zy)_MigrateConfigc                 P    || _         || _        |j                  | _        || _        y N)migratedb	directoryconfigure_args)selfr   r   kwargss       I/var/www/html/venv/lib/python3.12/site-packages/flask_migrate/__init__.py__init__z_MigrateConfig.__init__   s%     **$    c                 .    | j                   j                  S )z
        Backwards compatibility, in old releases app.extensions['migrate']
        was set to db, and env.py accessed app.extensions['migrate'].metadata
        )r   metadata)r   s    r   r   z_MigrateConfig.metadata   s     wwr   N)__name__
__module____qualname__r   propertyr    r   r   r   r      s    %    r   r   c                   $     e Zd Z fdZd Z xZS )r   c                 R    |j                  dd       | _        t        |   |i | y )Ntemplate_directory)popr"   superr   )r   argsr   	__class__s      r   r   zConfig.__init__!   s)    "(**-A4"H$)&)r   c                     | j                   r| j                   S t        j                  j                  t        j                  j	                  t
                    }t        j                  j                  |d      S )N	templates)r"   ospathabspathdirname__file__join)r   package_dirs     r   get_template_directoryzConfig.get_template_directory%   sK    ""***ggoobggooh&?@ww||K55r   )r   r   r   r   r0   __classcell__)r&   s   @r   r   r       s    *6r   r   c                   8    e Zd Z	 	 ddZ	 	 ddZd Zd Zd	dZy)
MigrateNc                     g | _         || _        || _        t        |      | _        || _        || j
                  d<   || j
                  d<   ||| j                  |||       y y y )Ncompare_typerender_as_batch)configure_callbacksr   r   strr   alembic_ctx_kwargsinit_app)r   appr   r   r   r5   r6   r   s           r   r   zMigrate.__init__-   sl    #% Y"(2>/5D 12?r~MM#r9-  .?r   c                    |xs | j                   | _         |xs | j                  | _        t        |xs | j                        | _        | j                  j                  |       ||| j                  d<   ||| j                  d<   t        |d      si |_        t        | | j                   fi | j                  |j                  d<   ddl	m } |j                  j                  || j                         y )Nr5   r6   
extensionsr   r   )r   )name)r   r   r8   r   r9   updatehasattrr=   r   flask_migrate.clicliadd_command)	r   r;   r   r   r   r5   r6   r   db_cli_groups	            r   r:   zMigrate.init_app9   s    -.$,,Y8$..9&&v.#6BD##N3&9HD##$56sL)CN$2$''%6!44%6y! 	9Lt||<r   c                 <    | j                   j                  |       |S r   )r7   append)r   fs     r   	configurezMigrate.configureK   s      ''*r   c                 8    | j                   D ]
  } ||      } |S r   )r7   )r   configrG   s      r   call_configure_callbacksz Migrate.call_configure_callbacksO   s%    )) 	AvYF	r   c                    || j                   }t        |      }t        t        j                  j                  |d            }|j                  d|       |j                  t        j                         |_        |xs g D ]  }t        |j                  |d        t        |j                  d      s|t        |j                  dg        t        |t              st        |t              r-|D ]'  }|j                  j                  j!                  |       ) n=|j                  j                  j!                  |       nt        |j                  dd        | j#                  |      S )Nalembic.iniscript_locationTx)r   r8   r   r)   r*   r.   set_main_optioncmd_optsargparse	Namespacesetattrr@   
isinstancelisttuplerO   rF   rK   )r   r   x_argoptsrJ   optrO   s          r   
get_configzMigrate.get_configT   s   I	N	Y>?0)<??"&002FO:2 	0CFOOS$/	0v, b1eT*j.F" 4))0034 OO%%,,U3d3,,V44r   )NN
migrationsr   TT)NNNNN)NNN)r   r   r   r   r:   rH   rK   r[   r   r   r   r3   r3   ,   s*    JN48
. >B48=$
5r   r3   c                 .     t                fd       }|S )Nc                      	  | i | y # t         t        f$ r@}t        j                  dt	        |      z          t        j                  d       Y d }~y d }~ww xY w)NzError:    )r	   RuntimeErrorlogerrorr8   sysexit)r%   r   excrG   s      r   wrappedzcatch_errors.<locals>.wrappedl   sL    	tvl+ 	IIi#c(*+HHQKK	s    A6AAr   )rG   rf   s   ` r   catch_errorsrg   k   s     
1X  Nr   c                     t               } | j                  d       t        t        j                  | j                                     D ]o  }t        t        j                  j                  | j                         |d            5 }t        |      j                         }ddd       | j                  d|       q y# 1 sw Y   xY w)zList available templates.zAvailable templates:
READMENz%s - %s)r   print_stdoutsortedr)   listdirr0   openr*   r.   nextstrip)rJ   tempnamereadmesynopsiss       r   list_templatesrs   v   s     XF
012::f&C&C&EFG ;GGLL668(HM
 	,F|))+H	, 	Ix:;	, 	,s   B;;C	c                    | t         j                  d   j                  } d}|*d|v sd|v r"t        j                  j                  |      \  }}t        |      }|j                  d|        t        j                  j                  | d      |_	        t         j                  d   j                  j                  |      }|r|d}n|d	}t        j                  || ||
       y)z"Creates a new migration repositoryNr   /\)r"   rN   rM   zflask-multidbflask)templatepackage)r   r=   r   r)   r*   splitr   rP   r.   config_file_namer   rK   r   init)r   multidbrx   ry   r"   rJ   s         r   r|   r|      s     **95??	DH4D')ww}}X'>$H'9:F
,i8 ggll9mDF##I.((0 8#"		LLXwGr   c	                     |rdgnd}	t         j                  d   j                  j                  | |	      }
t	        j
                  |
||||||||	       y)zCreate a new revision file.autogenerateNr   )rY   r   sqlheadsplicebranch_labelversion_pathrev_idr   r=   r   r[   r   revision)r   messager   r   r   r   r   r   r   rY   rJ   s              r   r   r      s^    
  ,ND##I.66AA B FVW<SvL".v?r   c	                     t         j                  d   j                  j                  | dg|      }	t	        j
                  |	|d||||||	       y)z#Alias for 'revision --autogenerate'r   r   )rY   rX   Tr   Nr   )
r   r   r   r   r   r   r   r   rX   rJ   s
             r   r   r      sW     ##I.66AA( B 7FVW4SvL".v?r   c                     t         dk\  rCt        j                  d   j                  j	                  |       }t        j                  ||       yt        d      )zEdit current revision.)r      r   r   z$Alembic 0.8.0 or greater is requiredN)alembic_versionr   r=   r   r[   r   editr`   r   r   rJ   s      r   r   r      sJ     )#''	2::EEVX&ABBr   c                     t         j                  d   j                  j                  |       }t	        j
                  |||||       y)z;Merge two revisions together.  Creates a new migration filer   )r   r   r   N)r   r=   r   r[   r   merge)r   	revisionsr   r   r   rJ   s         r   r   r      s<     ##I.66AA)LFMM&)W+F<r   c                     t         j                  d   j                  j                  | |      }t	        j
                  ||||       y)zUpgrade to a later versionr   rX   r   tagN)r   r=   r   r[   r   upgrader   r   r   r   rX   rJ   s         r   r   r      sC     ##I.66AA)HM B OFOOFH#37r   c                     t         j                  d   j                  j                  | |      }|r|dk(  rd}t	        j
                  ||||       y)zRevert to a previous versionr   r   -1zhead:-1r   N)r   r=   r   r[   r   	downgrader   s         r   r   r      sT     ##I.66AA)HM B OF
x4fhCS9r   c                     t         j                  d   j                  j                  |       }t	        j
                  ||       y)z.Show the revision denoted by the given symbol.r   N)r   r=   r   r[   r   showr   s      r   r   r      s3     ##I.66AA)LFLL"r   c                     t         j                  d   j                  j                  |       }t        dk\  rt        j                  ||||       yt        j                  |||       y)z.List changeset scripts in chronological order.r   )r   	   r   )verboseindicate_currentr   N)r   r=   r   r[   r   r   history)r   	rev_ranger   r   rJ   s        r   r   r      sT     ##I.66AA)LF)#	7)9	; 		7;r   c                     t         j                  d   j                  j                  |       }t	        j
                  |||       y)z4Show current available heads in the script directoryr   )r   resolve_dependenciesN)r   r=   r   r[   r   heads)r   r   r   rJ   s       r   r   r      s8     ##I.66AA)LFMM&'';=r   c                     t         j                  d   j                  j                  |       }t	        j
                  ||       y)zShow current branch pointsr   r   N)r   r=   r   r[   r   branchesr   r   rJ   s      r   r   r      s5     ##I.66AA)LFVW-r   c                     t         j                  d   j                  j                  |       }t	        j
                  ||       y)z/Display the current revision for each database.r   r   N)r   r=   r   r[   r   currentr   s      r   r   r      s3     ##I.66AA)LFOOFG,r   c                     t         j                  d   j                  j                  |       }t	        j
                  ||||       y)zP'stamp' the revision table with the given revision; don't run any
    migrationsr   r   N)r   r=   r   r[   r   stamp)r   r   r   r   rJ   s        r   r   r      s7     ##I.66AA)LFMM&(5r   c                     t         j                  d   j                  j                  |       }t	        j
                  |       y)z0Check if there are any new operations to migrater   N)r   r=   r   r[   r   check)r   rJ   s     r   r   r     s1     ##I.66AA)LFMM&r   )NFNF)	NNFFr   FNNN)	NNFr   FNNNN)Nr   )N NNN)Nr   FNN)Nr   FNN)Nr   )NNFF)NFF)NF)Nr   FNr   )+rR   	functoolsr   loggingr)   rc   rw   r   alembicr   __alembic_version__alembic.configr   AlembicConfigr   alembic.utilr	   rW   rz   intr   	getLoggerr   ra   objectr   r3   rg   rs   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   )vs   0r   <module>r      s      	 
  6 2  %)B)<)B)B3)G!)LMAQMNg! V   	6] 	6<5f <5~ 	; 	; H H& CHHL	? 	? INEI? ? C C CG< < 8 8 : : # # 49"< < = = . . - - 6 6  w Ns   D*