|L ibBddlmZddlZddlZddlmZddlmZddlmZddlmZddl m Z dd l m Z dd l mZdd lmZdd l mZerdd lmZddlmZddlmZddl mZd dZ d! d"dZ d# d$dZd%dZ d& d'dZ d( d)dZ d( d)dZd*dZ d+ d,dZ! d- d.dZ"d/d0dZ# d- d1dZ$ d2 d3dZ%d*dZ&d/d4dZ'y)5) annotationsN)List)Optional) TYPE_CHECKING)Union) autogenerate)util)EnvironmentContext)ScriptDirectory)compat)Config)Script) _RevIdType)ProcessRevisionDirectiveFncl|jd|jjD]T}|dz j5}t |j }ddd|jd|j V|jd|jdy#1swYKxYw)zNList available templates. :param config: a :class:`.Config` object. zAvailable templates: READMENz%s - %sz1 Templates are used via the 'init' command, e.g.:z, alembic init --template generic ./scripts) print_stdout_get_template_pathiterdiropennextrstripname)configtempnamereadmesynopsiss U/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/alembic/command.pylist_templatesr s 01--/779@! ' ' ) -VF|**,H -Ix}}h?@  LM GH  - -s B**B3 c tj|}|jr1t|j rt j d|z|j|z }|jst j d|tj|tjsOt jd|jfi|j5tj|ddd|dz }t jd|jfi|j5tj|ddd|js|j [t#j$|j|j jj&d}d|z j)}|j*|t#j$|j|j*jj&d}d|z j)} n |j)}|j)} t-|} d } d} |j D]} | j.}|d k(r|j0Jtj|j0j} | jr%t j2d | d fi|j| j5| |  |dk(rd} |j*J|j*j}|jryt7|d5}t"j8j;|}d|vr+d|dvr$t j2d |d ddd4ddd| j=| | R| j5| | h| j?sz||z }| jA| ||rm|jdz |jdz fD]D}t jd|fi|j5t7|d5 ddddddF| J| r(t j2dd| dfi|jyt j2d| dfi|jy#1swYxYw#1swYxYw#1swY>xYw#1swYxYw#1swYxYw)akInitialize a new scripts directory. :param config: a :class:`.Config` object. :param directory: string path of the target directory. :param template: string name of the migration environment template to use. :param package: when True, write ``__init__.py`` files into the environment location as well as the versions/ location. z,Directory %s already exists and is not emptyzNo such template zCreating directory NversionsT)walk_upz%(here)sFzalembic.ini.makozFile z already exists, skipping)script_locationzpyproject.toml.makorbtoolalembiczB already exists and already has a [tool.alembic] section, skippingz __init__.pyzAdding wz&Please edit configuration settings in z2 and configuration/connection/logging settings in z before proceeding.z9Please edit configuration/connection/logging settings in )!pathlibPathexistslistrr CommandErrorrosaccessF_OKstatusabsolutemessaging_optsmakedirs is_absolute_config_file_pathr path_relative_toparentas_posix_toml_file_pathr rconfig_file_namemsg_generate_templatertomllibload_append_templateis_file _copy_file)r directorytemplatepackagedirectory_path template_pathr"rel_dirini_script_location_directorytoml_script_location_directoryscripthas_toml config_file file_pathfile_ toml_pathf toml_data output_filepaths rinitrU*s(\\),N4(>(>(@#A :^ K  --/(:M    !"3M? CDD 99^RWW - [[!."9"9";!< = ##  ( KK '  (  *H  h//123      H   % % '  # # /--'')((113::G .8'-A,K,K,M )  ! ! ---'')&&//188G /97.B-L-L-N *)7(?(?(A%)7)@)@)B& ^ ,FH'+K"**,/6  & &**6 66!,,v'>'>?HHJK!!#K=(AB++ ))$A* + +H))5 55..779I!)T* !a & 3 3A 6I*yIf.retrieve_migrationss  - -c7 ;Ic,j||gSrc)run_no_autogeneraterfs rrjz%revision..retrieve_migrations"s  0 0g >IrkziUsing --sql with the revision command when revision_environment is not configured does not make any sensefnas_sql template_argsriNrr)r from_configdictautogenRevisionContextr asboolget_alembic_optionr-r rqrun_envgenerate_scriptslen)rrXr rYrZr[r\r]r^r_r`script_directory command_args environmentrjrKscriptsris @rrevisionrsPt'226:!  !! L..$? ++!!"89K ##I      M     "*88-   '  $ $ & '%5$E$E$GH&vHGH 7|qqz' ' 'IsD0 DDc tj|}tddddddddd }tj|||fd}t |||dj 5|jdddjd}g}|jD]!}|j|j#|rtjd || |jd y#1swYyxYw) zCheck if revision command with autogenerate has pending upgrade ops. :param config: a :class:`.Config` object. .. versionadded:: 1.9.0 NTFrZrWc,j||gSrcrdrfs rrjz"check..retrieve_migrations_s))#w7 rkrnz!New upgrade operations detected: )ridiffsz#No new upgrade operations detected.)r rrrsrtrur rqrxgenerated_revisionsupgrade_ops_listextendas_diffsr AutogenerateDiffsDetectedr)rr{r|rjmigration_scriptr upgrade_opsris @rcheckrCs'226:   L..   &44)  #   "#(;;B? E'88-  [))+,- ,,/w 7-  AB1##s "C++C4cLtj|}d|i}tj|j d}|r,d}t |||d|5|j ddd|j|xstj|fd||d|S#1swY7xYw) aMerge two revisions together. Creates a new migration file. :param config: a :class:`.Config` instance :param revisions: The revisions to merge. :param message: string message to apply to the revision. :param branch_label: string label name to apply to the new revision. :param rev_id: hardcoded revision identifier instead of generating a new one. .. seealso:: :ref:`branches` rracgSrcrgrhs rnothingzmerge..nothingsIrkF)rorprqNT)refreshrZ branch_labels) r rrr rvrwr rxgenerate_revisionr^) r revisionsrXr\r^rKrqr}rs rmerger~s4 ( ( 0F&M ++!!"89K   '    NN   $6 # #$++-  "       s BB#c tj|d}dvr,|stjdj dd\}fd}t |||||5j dddy#1swYyxYw)aUpgrade to a later version. :param config: a :class:`.Config` instance. :param revision: string revision target or range for --sql mode. May be ``"heads"`` to target the most recent revision(s). :param sql: if True, use ``--sql`` mode. :param tag: an arbitrary "tag" that can be intercepted by custom ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument` method. N:Range revision not allowedc(j|Src) _upgrade_revsrgrhrrKs rupgradezupgrade..upgrades##Hc22rkrorp starting_revdestination_revtagr rrr r-splitr rx)rrrYrrrrKs ` @rrrs* ( ( 0FL h##$@A A!)Q!7 h3  !       s "A<<Bc @tj|d}dvr-|stjdj dd\}n|rtjdfd}t |||||5j dddy#1swYyxYw)aRevert to a previous version. :param config: a :class:`.Config` instance. :param revision: string revision target or range for --sql mode. May be ``"base"`` to target the first revision. :param sql: if True, use ``--sql`` mode. :param tag: an arbitrary "tag" that can be intercepted by custom ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument` method. Nrrrz/downgrade with --sql requires :c(j|Src)_downgrade_revsrs r downgradezdowngrade..downgrades%%h44rkrr)rrrYrrrrKs ` @rrrs* ( ( 0FL h##$@A A!)Q!7 h  =  5  !       s :BBctj|dk(r.fd}t|5jdddyj |D]}j |j y#1swYyxYw)zShow the revision(s) denoted by the given symbol. :param config: a :class:`.Config` instance. :param rev: string revision target. May be ``"current"`` to show the revision(s) currently applied in the database. currentcjj|D]}j|jgSrc) get_revisionsr log_entry)rgrhscrrKs r show_currentzshow..show_current#s4**3/ 2##BLL1 2IrkroN)r rrr rxrrr)rrgrrrKs` @rshowrs ( ( 0F i   < @  NN   &&s+ .B    - .  s A==Bcf tj|}|._display_historyQsp''dog( B +-;;(+B(    #%) $$(   rkcfd}t|5jdddy#1swYyxYw)Ncldk(r||gSdk(r||gS|gS)Nrr)rgrhrrrrZrKs r_display_current_historyzMhistory.._display_history_w_current.._display_current_historybsZy  sC@ I " dC@I!tSAIrkr)r rx)rrKrrZrrs```` r_display_history_w_currentz+history.._display_history_w_currentas;   3K L  NN    s 7Ar)r)r rrr r-striprrvrw) r rev_rangerrrKrrZr}rrs `` @rhistoryr/s& ( ( 0F i ##N __&,,S1 dt F--.DEF     yDI-"664>t4rkctj|}|r|jd}n|j|j}|D]%}|j |j |dd'y)zShow current available heads in the script directory. :param config: a :class:`.Config` instance. :param verbose: output in verbose mode. :param resolve_dependencies: treat dependency version as down revisions. rTF)rtree_indicatorsN)r rrr get_headsrr)rrresolve_dependenciesrKrrgs rrrtsu ( ( 0F$$W-$$V%5%5%78  NN$    rkc tj|jD]_js|j dj ddj fdfdjDDay)zShow current branch points. :param config: a :class:`.Config` instance. :param verbose: output in verbose mode. z%s %s T)r c3K|]<}dttjzd|jdd>yw) z -> FT)rrN)rzstrrr).0rev_objrrs r zbranches..sM  c#bkk"233**!Dg+ sAAc3@K|]}j|ywrc) get_revision)rrgrKs rrzbranches..s!$58++C0$sN)r rrris_branch_pointrrjoinnextrev)rrrrKs `@@rbranchesrs~ ( ( 0F##%      g = $<>JJ$   rkctjfd}t|d5jdddy#1swYyxYw)aIDisplay the current revision for a database. :param config: a :class:`.Config` instance. :param check_heads: Check if all head revisions are applied to the database. Raises :class:`.DatabaseNotAtHead` if this is not the case. .. versionadded:: 1.17.1 :param verbose: output in verbose mode. crCjdtj|jjj rHt |jt jk7rtjdj|D]"}j|j$gS)NzCurrent revision(s) for %s:z%Database is not on all head revisions) rr obfuscate_url_pw connectionengineurlsetget_current_headsrDatabaseNotAtHeadget_all_currentr)rgrh check_headsrrKrs rdisplay_versionz current..display_versions    -%%g&8&8&?&?&C&CD   ))+ ,F4D4D4F0G G((7 ))#. 9C   w 7 8 9 rkT)ro dont_mutateNr rrr rx)rrrrrKs``` @rrrsN  ( ( 0F" ?  s A  Ac  tj| |rhg d}tj|D]K}d|vr4|j dd\}}||k7r||}ntj d j |Mntj| fd}t| |||rndtj ||5 jdddy#1swYyxYw)a'stamp' the revision table with the given revision; don't run any migrations. :param config: a :class:`.Config` instance. :param revision: target revision or list of revisions. May be a list to indicate stamping of multiple branch heads; may be ``"base"`` to remove all revisions from the table or ``"heads"`` to stamp the most recent revision(s). .. note:: this parameter is called "revisions" in the command line interface. :param sql: use ``--sql`` mode :param tag: an arbitrary "tag" that can be intercepted by custom ``env.py`` scripts via the :class:`.EnvironmentContext.get_tag_argument` method. :param purge: delete all entries in the version table before stamping. NrrzMStamp operation with --sql only supports a single starting revision at a timecNjtj|Src) _stamp_revsr to_tuple)rgrhdestination_revsrKs rdo_stampzstamp..do_stamps !!$--0@"A3GGrk)rorprrrpurge) r rrr to_listrr-appendr rrx) rrrYrrr _revisionsrevrrrKs @@rstamprs< ( ( 0F  h/ /Ii"+//#q"9i4'#+'+ "//A  # #I . / <<1H  %(\d &67       s C!!C*cVtj||dk(r-fd}t||5jdddyj |}|st j d|z|D]%}|sJt j|j'y#1swYyxYw)zEdit revision script(s) using $EDITOR. :param config: a :class:`.Config` instance. :param rev: target revision. rc|stjdj|D]!}tj|j#gS)NzNo current revisions)r r-ropen_in_editorrT)rgrhrrKs r edit_currentzedit..edit_current%sI''(>??**3/ -##BGG, -IrkrNz*No revision files indicated by symbol '%s') r rrr rxrr r-rrT)rrgrrevsrrKs @reditrs ( ( 0F i  < @  NN   ##C(##.do_ensure_versionFs%%' rk)rorpNr)rrYrKrs rensure_versionr9sP ( ( 0F      s AA )rrreturnNone)genericF) rrrCrrDrrEboolrr) NFFrZFNNNNN)rrrX Optional[str]r rrYrrZrr[rr\Optional[_RevIdType]r]z"Union[str, os.PathLike[str], None]r^rr_rr`z$Optional[ProcessRevisionDirectiveFn]rz/Union[Optional[Script], List[Optional[Script]]])rz'Config'rr)NNN) rrrrrXrr\rr^rrzOptional[Script])FN) rrrrrYrrrrr)rrrgrrr)NFF) rrrrrrrrrr)FF)rrrrrrrr)F)rrrrrr)rrrrrrrr)FNF) rrrrrYrrrrrrr)rrrYrrr)( __future__rr.r)typingrrrrr rtr runtime.environmentr rKr r alembic.configralembic.script.baseralembic.script.revisionrrr rUrrrrrrrrrrrrrrrkrr s#  %3#%*2?I( U U U U  U  U t")-7; $HL~ ~ ~~  ~  ~  ~'~5~ ~~"F~5~B8C|")- 9 999' 9  9  9~ ) )) )  )  )^ , ,, ,  ,  ,^.8 $" B5 B5B5B5 B5  B5LIN  ! AE   6<@E& &!%&8<& &X @ @@ @  @  @  @F)Brk