ó
    úÞ jä‡  ã                  óÄ  • 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
r
S SKrS SKrS SKJr  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SKJr  SSKJr  SSKJr  SSKJr  \R@                  " \!5      r" " S S5      r#\\$\$4   r% " S S\SS9r& " S S\5      r' " S S5      r(  S!       S"S jjr)\!S :X  a  \)" 5         gg)#é    )Úannotations)ÚArgumentParser)Ú	Namespace)ÚMapping)ÚSequence)ÚConfigParserN)ÚPath)ÚAny)Úcast)Úoverload)ÚProtocol)ÚTextIO)Ú	TypedDicté   )Ú__version__)Úcommand)Úutil)Úcompat)Ú_preserving_path_as_strc                  ó\  • \ rS rSr% SrSSSS\R                  S\R                  " 5       S4                 S+S jjr	Sr
S\S'    SrS	\S
'    SrS	\S'    \S,S j5       r\S,S j5       rSrS\S'    \R$                  S-S j5       rS.S jr\R$                  S/S j5       r\R$                  S0S j5       rS1S jrS2S jr\ S3     S4S jj5       r\      S5S j5       r\      S6S j5       r S7     S8S jjrS9S jrS:S jrS;S jr S7       S<S jjr\S=S j5       r\ S7     S>S jj5       r S7     S>S jjr\S=S  j5       r \ S7     S>S! jj5       r  S7     S?S" jjr S@S# jr! S7     SAS$ jjr"\R$                  SBS% j5       r#SCS& jr$SDS' jr%SDS( jr&SES) jr'S*r(g)FÚConfigé   a?  Represent an Alembic configuration.

Within an ``env.py`` script, this is available
via the :attr:`.EnvironmentContext.config` attribute,
which in turn is available at ``alembic.context``::

    from alembic import context

    some_param = context.config.get_main_option("my option")

When invoking Alembic programmatically, a new
:class:`.Config` can be created by passing
the name of an .ini file to the constructor::

    from alembic.config import Config
    alembic_cfg = Config("/path/to/yourapp/alembic.ini")

With a :class:`.Config` object, you can then
run Alembic commands programmatically using the directives
in :mod:`alembic.command`.

The :class:`.Config` object can also be constructed without
a filename.   Values can be set programmatically, and
new sections will be created as needed::

    from alembic.config import Config
    alembic_cfg = Config()
    alembic_cfg.set_main_option("script_location", "myapp:migrations")
    alembic_cfg.set_main_option("sqlalchemy.url", "postgresql://foo/bar")
    alembic_cfg.set_section_option("mysection", "foo", "bar")

.. warning::

   When using programmatic configuration, make sure the
   ``env.py`` file in use is compatible with the target configuration;
   including that the call to Python ``logging.fileConfig()`` is
   omitted if the programmatic configuration doesn't actually include
   logging directives.

For passing non-string values to environments, such as connections and
engines, use the :attr:`.Config.attributes` dictionary::

    with engine.begin() as connection:
        alembic_cfg.attributes['connection'] = connection
        command.upgrade(alembic_cfg, "head")

:param file\_: name of the .ini file to open if an ``alembic.ini`` is
 to be used.    This should refer to the ``alembic.ini`` file, either as
 a filename or a full path to the file.  This filename if passed must refer
 to an **ini file in ConfigParser format** only.

:param toml\_file: name of the pyproject.toml file to open if a
 ``pyproject.toml`` file is to be used.  This should refer to the
 ``pyproject.toml`` file, either as a filename or a full path to the file.
 This file must be in toml format. Both :paramref:`.Config.file\_` and
 :paramref:`.Config.toml\_file` may be passed simultaneously, or
 exclusively.

 .. versionadded:: 1.16.0

:param ini_section: name of the main Alembic section within the
 .ini file
:param output_buffer: optional file-like input buffer which
 will be passed to the :class:`.MigrationContext` - used to redirect
 the output of "offline generation" when using Alembic programmatically.
:param stdout: buffer where the "print" output of commands will be sent.
 Defaults to ``sys.stdout``.

:param config_args: A dictionary of keys and values that will be used
 for substitution in the alembic config file, as well as the pyproject.toml
 file, depending on which / both are used.  The dictionary as given is
 **copied** to two new, independent dictionaries, stored locally under the
 attributes ``.config_args`` and ``.toml_args``.   Both of these
 dictionaries will also be populated with the replacement variable
 ``%(here)s``, which refers to the location of the .ini and/or .toml file
 as appropriate.

:param attributes: optional dictionary of arbitrary Python keys/values,
 which will be populated into the :attr:`.Config.attributes` dictionary.

 .. seealso::

    :ref:`connection_sharing`

NÚalembicÚstrÚcmd_optsúNamespace | Nonec	                ó  • U(       a  [        U5      OSU l        U(       a  [        U5      OSU l        X0l        X@l        XPl        X`l        [        U5      U l        [        U5      U l	        U(       a  U R                  R                  U5        gg)z Construct a new :class:`.Config`N)r   Úconfig_file_nameÚtoml_file_nameÚconfig_ini_sectionÚoutput_bufferÚstdoutr   ÚdictÚconfig_argsÚ	toml_argsÚ
attributesÚupdate)	ÚselfÚfile_Ú	toml_fileÚini_sectionr!   r"   r   r$   r&   s	            ÚH/var/www/html/gaurav/venv/lib/python3.13/site-packages/alembic/config.pyÚ__init__ÚConfig.__init__v   s{   € ö /4Ô# EÔ*¸ð 	Ôö 3<Ô# IÔ.Àð 	Ôð #.ÔØ*ÔØŒØ ŒÜ Ó,ˆÔÜ˜kÓ*ˆŒÞØ�O‰O×"Ñ" :Õ.ð ó    ú
str | Noner   r   c                óH   • U R                   c  g [        U R                   5      $ ©N)r   r	   ©r(   s    r,   Ú_config_file_pathÚConfig._config_file_path§   s"   € à× Ñ Ñ(ØÜ�D×)Ñ)Ó*Ð*r/   c                óH   • U R                   c  g [        U R                   5      $ r2   )r   r	   r3   s    r,   Ú_toml_file_pathÚConfig._toml_file_path­   s"   € à×ÑÑ&ØÜ�D×'Ñ'Ó(Ð(r/   r    c                ó   • 0 $ )a¶  A Python dictionary for storage of additional state.


This is a utility dictionary which can include not just strings but
engines, connections, schema objects, or anything else.
Use this to pass objects into an env.py script, such as passing
a :class:`sqlalchemy.engine.base.Connection` when calling
commands from :mod:`alembic.command` programmatically.

.. seealso::

    :ref:`connection_sharing`

    :paramref:`.Config.attributes`

© r3   s    r,   r&   ÚConfig.attributes»   s	   € ð$ ˆ	r/   c                ó    • U(       a  [        U5      U-  nO[        U5      n[        R                  " U R                  US40 U R                  D6  g)ad  Render a message to standard out.

When :meth:`.Config.print_stdout` is called with additional args
those arguments will formatted against the provided text,
otherwise we simply output the provided text verbatim.

This is a no-op when the``quiet`` messaging option is enabled.

e.g.::

    >>> config.print_stdout('Some text %s', 'arg')
    Some Text arg

Ú
N)r   r   Úwrite_outstreamr"   Úmessaging_opts)r(   ÚtextÚargÚoutputs       r,   Úprint_stdoutÚConfig.print_stdoutÏ   s>   € ö  Ü˜“Y ‘_‰Fä˜“YˆFä×Ò˜TŸ[™[¨&°$ÑN¸$×:MÑ:MÓNr/   c                ó<  • U R                   (       a%  U R                   R                  5       R                  nO
[        5       nUR	                  5       U R
                  S'   [        U R
                  5      n[        U R                  SS5      nU R                   (       aJ  [        R                  " X R                   /5        U(       a   [        R                  SU R                   5        U$ UR                  U R                  5        U(       a  [        R                  S5        U$ )zÞReturn the underlying ``ConfigParser`` object.

Dir*-ect access to the .ini file is available here,
though the :meth:`.Config.get_section` and
:meth:`.Config.get_main_option`
methods provide a possibly simpler interface.

ÚhereÚverboseFzLoading config from file: %sz7No config file provided; using in-memory default config)r4   ÚabsoluteÚparentr	   Úas_posixr$   r   Úgetattrr   r   Úread_config_parserÚlogÚinfoÚadd_sectionr    )r(   rF   Úfile_configrG   s       r,   rP   ÚConfig.file_configæ   sØ   € ð ×!×!Ø×)Ñ)×2Ñ2Ó4×;Ñ;‰Dä“6ˆDØ#'§=¡=£?ˆ×Ñ˜Ñ Ü" 4×#3Ñ#3Ó4ˆä˜$Ÿ-™-¨°EÓ:ˆØ×!×!Ü×%Ò% k×4JÑ4JÐ3KÔLÞÜ—‘Ø2°D×4JÑ4Jôð Ðð ×#Ñ# D×$;Ñ$;Ô<ÞÜ—‘ØMôð Ðr/   c                ó&  • U R                   (       aî  U R                   R                  5       (       aÏ  U R                   R                  5       R                  nUR	                  5       U R
                  S'   [        U R                   S5       n[        R                  R                  U5      nUR                  S0 5      R                  S0 5      n[        U[        5      (       d  [        R                  " S5      eUsSSS5        $ 0 $ ! , (       d  f       g= f)zEReturn a dictionary of the [tool.alembic] section from
pyproject.tomlrF   ÚrbÚtoolr   zIncorrect TOML formatN)r7   ÚexistsrH   rI   rJ   r%   Úopenr   ÚtomllibÚloadÚgetÚ
isinstancer#   r   ÚCommandError)r(   rF   ÚfÚ	toml_dataÚdatas        r,   Útoml_alembic_configÚConfig.toml_alembic_config  sÌ   € ð
 ×× D×$8Ñ$8×$?Ñ$?×$AÑ$Aà×'Ñ'×0Ñ0Ó2×9Ñ9ˆDØ%)§]¡]£_ˆD�N‰N˜6Ñ"ä�d×*Ñ*¨DÔ1°QÜ"ŸN™N×/Ñ/°Ó2�	Ø —}‘} V¨RÓ0×4Ñ4°YÀÓC�Ü! $¬×-Ñ-Ü×+Ò+Ð,CÓDÐDØ÷ 2Ñ1ð ˆI÷ 2Õ1ús   ÂA.DÄ
Dc                ó€   • SSK n[        UR                  5      R                  5       R                  n[        US-  5      $ )z�Return the directory where Alembic setup templates are found.

This method is used by the alembic ``init`` and ``list_templates``
commands.

r   NÚ	templates)r   r	   Ú__file__rH   rI   r   )r(   r   Úpackage_dirs      r,   Úget_template_directoryÚConfig.get_template_directory  s6   € ó 	ä˜7×+Ñ+Ó,×5Ñ5Ó7×>Ñ>ˆÜ�; Ñ,Ó-Ð-r/   c                ó4   • [        U R                  5       5      $ )z§Return the directory where Alembic setup templates are found.

This method is used by the alembic ``init`` and ``list_templates``
commands.

.. versionadded:: 1.16.0

)r	   re   r3   s    r,   Ú_get_template_pathÚConfig._get_template_path'  s   € ô �D×/Ñ/Ó1Ó2Ð2r/   c                ó   • g r2   r:   ©r(   ÚnameÚdefaults      r,   Úget_sectionÚConfig.get_section2  s   € ð !$r/   c                ó   • g r2   r:   rk   s      r,   rn   ro   :  s   € ð r/   c                ó   • g r2   r:   rk   s      r,   rn   ro   ?  s   € ð .1r/   c                óŽ   • U R                   R                  U5      (       d  U$ [        U R                   R                  U5      5      $ )zÙReturn all the configuration options from a given .ini file section
as a dictionary.

If the given section does not exist, the value of ``default``
is returned, which is expected to be a dictionary or other mapping.

)rP   Úhas_sectionr#   Úitemsrk   s      r,   rn   ro   D  s<   € ð ×Ñ×+Ñ+¨D×1Ñ1ØˆNä�D×$Ñ$×*Ñ*¨4Ó0Ó1Ð1r/   c                ó<   • U R                  U R                  X5        g)aò  Set an option programmatically within the 'main' section.

This overrides whatever was in the .ini file.

:param name: name of the value

:param value: the value.  Note that this value is passed to
 ``ConfigParser.set``, which supports variable interpolation using
 pyformat (e.g. ``%(some_value)s``).   A raw percent sign not part of
 an interpolation symbol must therefore be escaped, e.g. ``%%``.
 The given value may refer to another value already in the file
 using the interpolation format.

N)Úset_section_optionr    ©r(   rl   Úvalues      r,   Úset_main_optionÚConfig.set_main_optionS  s   € ð 	×Ñ × 7Ñ 7¸ÕEr/   c                óP   • U R                   R                  U R                  U5        g r2   )rP   Úremove_optionr    )r(   rl   s     r,   Úremove_main_optionÚConfig.remove_main_optiond  s   € Ø×Ñ×&Ñ& t×'>Ñ'>ÀÕEr/   c                ó²   • U R                   R                  U5      (       d  U R                   R                  U5        U R                   R                  XU5        g)aß  Set an option programmatically within the given section.

The section is created if it doesn't exist already.
The value here will override whatever was in the .ini
file.

Does **NOT** consume from the pyproject.toml file.

.. seealso::

    :meth:`.Config.get_alembic_option` - includes pyproject support

:param section: name of the section

:param name: name of the value

:param value: the value.  Note that this value is passed to
 ``ConfigParser.set``, which supports variable interpolation using
 pyformat (e.g. ``%(some_value)s``).   A raw percent sign not part of
 an interpolation symbol must therefore be escaped, e.g. ``%%``.
 The given value may refer to another value already in the file
 using the interpolation format.

N)rP   rs   rO   Úset)r(   Úsectionrl   rx   s       r,   rv   ÚConfig.set_section_optiong  sE   € ð4 ×Ñ×+Ñ+¨G×4Ñ4Ø×Ñ×(Ñ(¨Ô1Ø×Ñ×Ñ˜W¨EÕ2r/   c                ó  • U R                   R                  U5      (       d)  [        R                  " SU R                  < SU< S35      eU R                   R                  X5      (       a  U R                   R                  X5      $ U$ )z9Return an option from the given section of the .ini file.zNo config file z found, or file has no '[z
]' section)rP   rs   r   r[   r   Ú
has_optionrY   )r(   r�   rl   rm   s       r,   Úget_section_optionÚConfig.get_section_option…  st   € ð ×Ñ×+Ñ+¨G×4Ñ4Ü×#Ó#à$(×$9Ô$9»7ðDóð ð ×Ñ×&Ñ& w×5Ñ5Ø×#Ñ#×'Ñ'¨Ó6Ð6àˆNr/   c                ó   • g r2   r:   rk   s      r,   Úget_main_optionÚConfig.get_main_option“  s   € Ø?Br/   c                ó   • g r2   r:   rk   s      r,   rˆ   r‰   –  ó   € ð r/   c                ó:   • U R                  U R                  X5      $ )aJ  Return an option from the 'main' section of the .ini file.

This defaults to being a key from the ``[alembic]``
section, unless the ``-n/--name`` flag were used to
indicate a different section.

Does **NOT** consume from the pyproject.toml file.

.. seealso::

    :meth:`.Config.get_alembic_option` - includes pyproject support

)r…   r    rk   s      r,   rˆ   r‰   ›  s   € ð  ×&Ñ& t×'>Ñ'>ÀÓNÐNr/   c                ó   • g r2   r:   rk   s      r,   Úget_alembic_optionÚConfig.get_alembic_option­  s   € ØBEr/   c                ó   • g r2   r:   rk   s      r,   rŽ   r�   °  r‹   r/   c                óÂ   • U R                   R                  U R                  U5      (       a&  U R                   R                  U R                  U5      $ U R	                  XS9$ )aI  Return an option from the "[alembic]" or "[tool.alembic]" section
of the configparser-parsed .ini file (e.g. ``alembic.ini``) or
toml-parsed ``pyproject.toml`` file.

The value returned is expected to be None, string, list of strings,
or dictionary of strings.   Within each type of string value, the
``%(here)s`` token is substituted out with the absolute path of the
``pyproject.toml`` file, as are other tokens which are extracted from
the :paramref:`.Config.config_args` dictionary.

Searches always prioritize the configparser namespace first, before
searching in the toml namespace.

If Alembic was run using the ``-n/--name`` flag to indicate an
alternate main section name, this is taken into account **only** for
the configparser-parsed .ini file.  The section name in toml is always
``[tool.alembic]``.


.. versionadded:: 1.16.0

)rm   )rP   r„   r    rY   Ú_get_toml_config_valuerk   s      r,   rŽ   r�   µ  sV   € ð4 ×Ñ×&Ñ& t×'>Ñ'>À×EÑEØ×#Ñ#×'Ñ'¨×(?Ñ(?ÀÓFÐFà×.Ñ.¨tÐ.ÐEÐEr/   c                óD  • U R                   R                  U R                  U5      (       a)  U R                   R                  U R                  U5      S:H  $ U R                  R                  US5      n[        U[        5      (       d  [        R                  " SU< 35      eU$ )NÚtrueFz*boolean value expected for TOML parameter )	rP   r„   r    rY   r_   rZ   Úboolr   r[   rw   s      r,   Úget_alembic_boolean_optionÚ!Config.get_alembic_boolean_optionÔ  s’   € Ø×Ñ×&Ñ& t×'>Ñ'>À×EÑEà× Ñ ×$Ñ$ T×%<Ñ%<¸dÓCÀvÑMðð ×,Ñ,×0Ñ0°°uÓ=ˆEÜ˜e¤T×*Ñ*Ü×'Ò'Ø@ÀÁÐIóð ð ˆLr/   c                ó.  • [        5       nU R                  R                  X5      nXCL a  U$ UGbM  [        U[        5      (       a  X@R
                  -  nU$ [        U[        5      (       a�  U(       a^  [        US   [        5      (       aF  U VVVs/ sH4  nUR                  5        VVs0 sH  u  pgXgU R
                  -  _M     snnPM6     nnnnU$ [        SU Vs/ sH  owU R
                  -  PM     sn5      n U$ [        U[        5      (       a=  [        SUR                  5        VVs0 sH  u  pgXgU R
                  -  _M     snn5      nU$ [        U[        5      (       a  U$ [        R                  " SU< 35      eU$ s  snnf s  snnnf s  snf s  snnf )Nr   ú	list[str]údict[str, str]z%unsupported TOML value type for key: )Úobjectr_   rY   rZ   r   r%   Úlistr#   rt   r   Úintr   r[   )r(   rl   rm   ÚUSE_DEFAULTrx   ÚdvÚkÚvs           r,   r’   ÚConfig._get_toml_config_valueá  sŒ  € ô “hˆà×$Ñ$×(Ñ(¨Ó;ð 	ð ÒØˆNØÒÜ˜%¤×%Ñ%Ø§¡Ñ0�ð, ˆô+ ˜E¤4×(Ñ(ÞœZ¨¨a©´$×7Ñ7ñ #(õá"'˜Bð >@¿X¹X¼ZÔH¹Z±T°Q˜ §¡Ñ0Ò0¹ZÕHÙ"'ð ò ð& ˆô !Ø#ÁEÓ%JÁE¸q¨4¯>©>Ô&:ÁEÑ%Jó‘Eð ˆô ˜E¤4×(Ñ(ÜØ$Ø9>¿¹¼ÔG¹±°�Q˜TŸ^™^Ñ,Ò,¹ÒGó�ð ˆô ˜E¤3×'Ñ'Ø�ä×'Ò'Ø;¸D¹8ÐDóð ð ˆùó% Iùôùò &Kùó
 Hs$   ÂFÂ'E?ÃFÃF
Ä(FÅ?Fc                óx   • [        [        [        R                  " S[	        U R
                  SS5      05      5      $ )zThe messaging options.ÚquietF)r   ÚMessagingOptionsr   ÚimmutabledictrK   r   r3   s    r,   r?   ÚConfig.messaging_opts  s7   € ô ÜÜ×ÒØœ' $§-¡-°¸%Ó@ÐAóó
ð 	
r/   c                ó  • U H  nU R                  U5      nUc  M    O   g SS[        R                  SSS.n XC   nUS:X  a  [        R                  " S5        U$ ! [
         a  n[        SU< S	U< S
35      UeS nAff = f)NÚ r=   Ú:Ú;)ÚspaceÚnewlineÚosrª   r«   Úversion_path_separatorz[The version_path_separator configuration parameter is deprecated; please use path_separatorÚ'z' is not a valid value for z-; expected 'space', 'newline', 'os', ':', ';')rˆ   r®   Úpathsepr   Úwarn_deprecatedÚKeyErrorÚ
ValueError)r(   Únamesrl   Ú	separatorÚsplit_on_pathÚsepÚkes          r,   Ú_get_file_separator_charÚConfig._get_file_separator_char  s¨   € ÛˆDØ×,Ñ,¨TÓ2ˆIØÓ$Ùñ ð
 ð ØÜ—*‘*ØØñ
ˆð	ØÑ*ˆCð Ð/Ó/Ü×$Ò$ð?ôð ˆJøô ó 	Ýó ›dð$óð ð	ûð	ús   ¸A Á
A>Á$A9Á9A>c                ó°  • U R                   R                  U R                  SS S9nU(       aŠ  U R                  SS5      nUc=  [        R
                  " S5        [        R                  " S5      nUR                  U5      $ UR                  U5       Vs/ sH  nU(       d  M  UR                  5       PM     sn$ [        SU R                  SS 5      5      $ s  snf )NÚversion_locations©ÚfallbackÚpath_separatorr¯   z¨No path_separator found in configuration; falling back to legacy splitting on spaces/commas for version_locations.  Consider adding path_separator=os to Alembic config.ú
, *|(?: +)r™   ©rP   rY   r    rº   r   r²   ÚreÚcompileÚsplitÚstripr   r’   )r(   Úversion_locations_strÚ
split_charÚ_split_on_space_commaÚxs        r,   Úget_version_locations_listÚ!Config.get_version_locations_list.  sç   € à $× 0Ñ 0× 4Ñ 4Ø×#Ñ#Ð%8À4ð !5ð !
Ðö !Ø×6Ñ6Ø Ð":óˆJð Ñ!ô ×$Ò$ð;ôô )+¯
ª
°=Ó(AÐ%Ø,×2Ñ2Ð3HÓIÐIð 3×8Ñ8¸ÔDóáD˜Üó �A—G‘G–IÙDñð ô ØØ×+Ñ+Ð,?ÀÓFóð ùòs   Â
CÂ Cc                ó®  • U R                   R                  U R                  SS S9nU(       a‰  U R                  S5      nUc=  [        R
                  " S5        [        R                  " S5      nUR                  U5      $ UR                  U5       Vs/ sH  nU(       d  M  UR                  5       PM     sn$ [        SU R                  SS 5      5      $ s  snf )NÚprepend_sys_pathr¾   rÀ   z´No path_separator found in configuration; falling back to legacy splitting on spaces, commas, and colons for prepend_sys_path.  Consider adding path_separator=os to Alembic config.z, *|(?: +)|\:r™   rÂ   )r(   Úprepend_sys_path_strrÈ   Ú_split_on_space_comma_colonrÊ   s        r,   Úget_prepend_sys_paths_listÚ!Config.get_prepend_sys_paths_listQ  sá   € Ø#×/Ñ/×3Ñ3Ø×#Ñ#Ð%7À$ð  4ð  
Ðö  Ø×6Ñ6Ð7GÓHˆJàÑ!ô ×$Ò$ð;ôô /1¯jªjÐ9IÓ.JÐ+Ø2×8Ñ8Ð9MÓNÐNð 2×7Ñ7¸
ÔCóáC˜Üó �A—G‘G–IÙCñð ô ØØ×+Ñ+Ð,>ÀÓEóð ùòs   Â
CÂCc                ó^  • / nU R                   R                  S5      (       dW  [        SU R                  S/ 5      5      nU H3  n[	        U5      nUR                  S5      US'   UR                  U5        M5     U$ [        R                  " S5      nU R                  S0 5      nUR                  UR                  SS5      5      nU H_  nU(       d  M  U V	s0 sH2  n	U	R                  US-   5      (       d  M  U	[        U5      S	-   S  Xi   _M4     nn	X„S'   UR                  U5        Ma     U$ s  sn	f )
NÚpost_write_hookszlist[dict[str, str]]rl   Ú
_hook_namerÁ   ÚhooksÚ Ú.r   )rP   rs   r   r’   r#   ÚpopÚappendrÃ   rÄ   rn   rÅ   rY   Ú
startswithÚlen)
r(   rÖ   Útoml_hook_configÚcfgÚoptsrÉ   Úini_hook_configrµ   rl   Úkeys
             r,   Úget_hooks_listÚConfig.get_hooks_listq  s<  € à+-ˆà×Ñ×+Ñ+Ð,>×?Ñ?Ü#Ø&Ø×+Ñ+Ð,>ÀÓCó Ðó (�Ü˜C“y�Ø%)§X¡X¨fÓ%5��\Ñ"Ø—‘˜TÖ"ñ (ð0 ˆô% %'§J¢J¨}Ó$=Ð!Ø"×.Ñ.Ð/AÀ2ÓFˆOØ)×/Ñ/Ø×#Ñ# G¨RÓ0óˆEó �ÞÙñ  /óá.˜Ø—~‘~ d¨S¡j×1ó ?�Cœ˜D›	 A™˜Ð(¨/Ñ*>Ò>Ù.ð ð ð &*�\Ñ"Ø—‘˜TÖ"ñ ð ˆùòs   ÃD*Ã5D*)r   r$   r   r    r!   r"   r%   r   )r)   ústr | os.PathLike[str] | Noner*   rä   r+   r   r!   zTextIO | Noner"   r   r   r   r$   úMapping[str, Any]r&   zdict[str, Any] | NoneÚreturnÚNone)ræ   zPath | None)ræ   zdict[str, Any])r@   r   rA   r
   ræ   rç   )ræ   r   )ræ   rå   )ræ   r   )ræ   r	   ).)rl   r   rm   rç   ræ   zdict[str, str] | None)rl   r   rm   rš   ræ   rš   )rl   r   rm   zMapping[str, str]ræ   z"dict[str, str] | Mapping[str, str]r2   )rl   r   rm   úMapping[str, str] | Noneræ   rè   )rl   r   rx   r   ræ   rç   )rl   r   ræ   rç   )r�   r   rl   r   rx   r   ræ   rç   )r�   r   rl   r   rm   r0   ræ   r0   )rl   r   rm   r   ræ   r   )rl   r   rm   r0   ræ   r0   )rl   r   rm   r0   ræ   úDNone | str | list[str] | dict[str, str] | list[dict[str, str]] | int)rl   r   ræ   r•   )rl   r   rm   z
Any | Noneræ   ré   )ræ   r¥   )rµ   r   ræ   r0   )ræ   zlist[str] | None)ræ   zlist[PostWriteHookConfig]))Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úsysr"   r   r¦   r-   r   Ú__annotations__r   r   Úpropertyr4   r7   r    Úmemoized_propertyr&   rC   rP   r_   re   rh   r   rn   ry   r}   rv   r…   rˆ   rŽ   r–   r’   r?   rº   rË   rÑ   râ   Ú__static_attributes__r:   r/   r,   r   r      s\  ‡ ñTðp 04Ø37Ø$Ø'+ØŸ™Ø%)Ø)-×);Ò);Ó)=Ø,0ð/à,ð/ð 1ð/ð ð	/ð
 %ð/ð ð/ð #ð/ð 'ð/ð *ð/ð 
õ/ð6 "&€HÐÓ%ð	ð $(Ð�jÓ'Ø2à!%€N�JÓ%ðð ó+ó ð+ð
 ó)ó ð)ð
 #Ð˜Ó"ðð 
×Ñóó ðô&Oð. 
×Ñóó ðð@ 
×Ñóó ðô&
.ô	3ð à),ð$Øð$Ø"&ð$à	ô$ó ð$ð ðØðØ"0ðà	óó ðð ð1Øð1Ø"3ð1à	+ó1ó ð1ð
 >Bð2Øð2Ø":ð2à	!õ2ôFô"Fô3ð> >BðØðØ"%ðØ0:ðà	õð ÛBó ØBàà/3ðØðØ",ðà	ôó ðð
 04ðOØðOØ",ðOà	õOð$ ÛEó ØEàà/3ðØðØ",ðà	ôó ðð
 04ðFØðFØ",ðFà	MõFô>ð 04ð!Øð!Ø",ð!à	Mõ!ðF 
×Ñó
ó ð
ôô@!ôF÷@!r/   r   c                  ó    • \ rS rSr% S\S'   Srg)r¥   i˜  r•   r¤   r:   N)rê   rë   rì   rí   rð   ró   r:   r/   r,   r¥   r¥   ˜  s   ‡ Ø†Kr/   r¥   F)Útotalc                  ó.   • \ rS rSr% SrS\S'   SS jrSrg)	ÚCommandFunctioniœ  z¿A function that may be registered in the CLI as an alembic command.
It must be a named function and it must accept a :class:`.Config` object
as the first argument.

.. versionadded:: 1.15.3

r   rê   c                ó   • g r2   r:   )r(   ÚconfigÚargsÚkwargss       r,   Ú__call__ÚCommandFunction.__call__§  s   € È#r/   r:   N)rù   r   rú   r
   rû   r
   ræ   r
   )rê   rë   rì   rí   rî   rð   rü   ró   r:   r/   r,   r÷   r÷   œ  s   ‡ ñð ƒMçMr/   r÷   c            
      ó4  • \ rS rSr% SrSZS[S jjr0 SSS\" S\S	S
94_SSS\" \SS94_SS\" SSS94_SS\" \SS94_SS\" \SS94_SS\" SSS94_SS\" S S!S94_S"S#\" \S$S94_S%S&\" \S'S94_S(S)\" \S*S94_S+S,S-\" SS.S94_S/S0\" SS1S94_S2S3\" SS4S94_S5S6S7\" S8S9S94_S:S;S<\" SS=S94_S>S?\" SS@S94_SASB\" SSCS94_SDSESF\" SSGS940Er\" SHSI9\" SJSI9\" SKSLSM9SN.r	\
R                  SOSP00rSQ\SR'   S[SS jrS\ST jrS]SU jrS^SV jrS_SW jrSZS`SX jjrSYrg)aÚCommandLineiª  z/Provides the command line interface to Alembic.Nc                ó&   • U R                  U5        g r2   )Ú_generate_args)r(   Úprogs     r,   r-   ÚCommandLine.__init__­  s   € Ø×Ñ˜DÕ!r/   Útemplatez-tz
--templateÚgenericz"Setup template for use with 'init')rm   ÚtypeÚhelpÚmessagez-mz	--messagez%Message string to use with 'revision')r  r  Úsqlz--sqlÚ
store_truez\Don't emit SQL to database - dump to standard output/file instead. See docs on offline mode.©Úactionr  Útagz--tagz<Arbitrary 'tag' name - can be used by custom env.py scripts.Úheadz--headzCSpecify head revision or <branchname>@head to base new revision on.Úsplicez--splicez6Allow a non-head revision as the 'head' to splice ontoÚ
depends_onz--depends-onrÚ   zNSpecify one or more revision identifiers which this revision should depend on.Úrev_idz--rev-idz9Specify a hardcoded revision id instead of generating oneÚversion_pathz--version-pathz2Specify specific path from config for version fileÚbranch_labelz--branch-labelz3Specify a branch label to apply to the new revisionrG   z-vz	--verbosezUse more verbose outputÚresolve_dependenciesz--resolve-dependenciesz+Treat dependency versions as down revisionsÚautogeneratez--autogeneratezgPopulate revision script with candidate migration operations, based on comparison of database to model.Ú	rev_rangez-rz--rev-rangeÚstorez1Specify a revision range; format is [start]:[end]Úindicate_currentz-iz--indicate-currentzIndicate the current revisionÚpurgez--purgez7Unconditionally erase the version table before stampingÚpackagez	--packagezFWrite empty __init__.py files to the environment and version locationsÚcheck_headsú-cz--check-headsziCheck if all head revisions are applied to the database. Exit with an error code if this is not the case.zlocation of scripts directory©r  zrevision identifierÚ+z/one or more revisions, or 'heads' for all heads)Únargsr  )Ú	directoryÚrevisionÚ	revisionsr!  r"  zdict[Any, dict[str, str]]Ú_POSITIONAL_TRANSLATIONSc                ó¤  • [        US9nUR                  SSS[        -  S9  UR                  SSSS	S
9  UR                  SS[        SSS9  UR                  SSSS
9  UR                  SSSS
9  UR                  SSSSS
9  UR	                  5       U l        S S [        [        5       5        5       nU H  nU R                  U5        M     X l	        g )N©r  z	--versionÚversionz%%(prog)s %s)r  r&  r  z--configrÚ   zÄAlternate config file; defaults to value of ALEMBIC_CONFIG environment variable, or "alembic.ini". May also refer to pyproject.toml file.  May be specified twice to reference both files separatelyr  z-nz--namer   zfName of section in .ini file to use for Alembic config (only applies to configparser config, not toml))r  rm   r  z-xzlAdditional arguments consumed by custom env.py scripts, e.g. -x setting1=somesetting -x setting2=somesettingz
--raiseerrr
  z!Raise a full stack trace on errorz-qz--quietzDo not log to std output.c              3  óÈ   #   • U HY  n[         R                  " U5      (       d  M   UR                  S    S:w  d  M5  UR                  S:X  d  MG  [	        [
        U5      v •  M[     g7f)r   Ú_zalembic.commandN)ÚinspectÚ
isfunctionrê   rë   r   r÷   )Ú.0Úfns     r,   Ú	<genexpr>Ú-CommandLine._generate_args.<locals>.<genexpr>v  s\   é € ð 
áG�ä×"Ò" 2×&ó &ð —K‘K ‘N cÑ)ó	 &ð
 —M‘MÐ%6Ñ6ó &ŒD” "×%Ð%ÚGùs   ‚A"¤A"¹A"ÁA"c              3  ó@   #   • U H  n[        [        U5      v •  M     g 7fr2   )rK   r   )r+  rl   s     r,   r-  r.  x  s   é € ÐG¹,°$”wœw¨×-Ð-º,ùs   ‚)
r   Úadd_argumentr   r   Úadd_subparsersÚ
subparsersÚdirr   Úregister_commandÚparser)r(   r  r5  Úalembic_commandsr,  s        r,   r  ÚCommandLine._generate_argsK  s  € Ü TÑ*ˆà×ÑØ 	°>ÄKÑ3Oð 	ñ 	
ð 	×ÑØØØð1ð	 	ñ 	
ð 	×ÑØØÜØð>ð 	ñ 	
ð 	×ÑØØð;ð 	ñ 	
ð 	×ÑØØØ4ð 	ñ 	
ð
 	×ÑØØØØ,ð	 	ñ 	
ð !×/Ñ/Ó1ˆŒñ
áG¼#¼g¼,ÔGó
Ðó #ˆBØ×!Ñ! "Ö%ñ #ð �r/   c                óŽ  • U R                  U5      u  p#nU R                  R                  UR                  US9nUR	                  XU4S9  U H>  nX`R
                  ;   d  M  U R
                  U   nUSS US   p˜UR                  " U0 U	D6  M@     U H2  nU R                  R                  U0 5      n	UR                  " U40 U	D6  M4     g)zýRegisters a function as a CLI subcommand. The subcommand name
matches the function name, the arguments are extracted from the
signature and the help text is read from the docstring.

.. versionadded:: 1.15.3

.. seealso::

    :ref:`custom_commandline`
r  )Úcmdr   éÿÿÿÿN)	Ú_inspect_functionr2  Ú
add_parserrê   Úset_defaultsÚ_KWARGS_OPTSr0  Ú_POSITIONAL_OPTSrY   )
r(   r,  Ú
positionalÚkwargÚ	help_textÚ	subparserrA   Ú	kwarg_optrú   rß   s
             r,   r4  ÚCommandLine.register_command…  sÍ   € ð (,×'=Ñ'=¸bÓ'AÑ$ˆ
˜9à—O‘O×.Ñ.¨r¯{©{ÀÐ.ÐKˆ	Ø×Ñ B°EÐ#:ÐÑ;ãˆCØ×'Ñ'Õ'Ø ×-Ñ-¨cÑ2�	Ø& q¨˜_¨i¸©m�dØ×&Ò&¨Ð5°Ô5ñ	 ó ˆCØ×(Ñ(×,Ñ,¨S°"Ó5ˆDØ×"Ò" 3Ñ/¨$Ô/ò r/   c                ó  • [         R                  " U5      nUS   b+  US   S[        US   5      *  nUS   [        US   5      * S  nO
US   SS  n/ nXR                  ;   a-  U Vs/ sH!  nU R                  U   R	                  XU5      PM#     nnUR
                  nU(       aQ  / nUR                  S5       H9  nUR                  5       (       d    O&UR                  UR                  5       5        M;     O/ nSR                  U5      n	X4U	4$ s  snf )Né   r   r   r=   r©   )
r   Úinspect_getfullargspecrÜ   r#  rY   rî   rÅ   rÆ   rÚ   Újoin)
r(   r,  Úspecr@  rA  rl   Úhelp_Ú
help_linesÚlinerB  s
             r,   r;  ÚCommandLine._inspect_function   s  € Ü×,Ò,¨RÓ0ˆØ�‰7ÑØ˜a™ ¤c¨$¨q©'£l ]Ð3ˆJØ˜‘GœS  a¡›\˜M˜OÐ,‰Eà˜a™  ˜ˆJØˆEà×.Ñ.Ó.ñ 'óá&�Dð ×-Ñ-¨bÑ1×5Ñ5°dÖAÙ&ð ð ð —
‘
ˆÞØˆJØŸ™ DÖ)�Ø—z‘z—|‘|Ùà×%Ñ% d§j¡j£lÖ3ò	 *ð ˆJà—H‘H˜ZÓ(ˆ	à )Ð+Ð+ùò's   Á%'D	c                ór  • UR                   u  p4n U" U/U Vs/ sH  n[        X&S 5      PM     snQ70 U Vs0 sH  of[        X&S 5      _M     snD6  g s  snf s  snf ! [        R                   aF  nUR                  (       a  e [        R
                  " [        U5      40 UR                  D6   S nAg S nAff = fr2   )r9  rK   r   r[   ÚraiseerrÚerrr   r?   )r(   rù   Úoptionsr,  r@  rA  r    Úes           r,   Úrun_cmdÚCommandLine.run_cmd¿  s¤   € Ø '§¡Ñˆ˜ð
	:ÙØðá5?Ó@±Z°”'˜' dÖ+±ZÑ@òñ :?Ó?¹°A”g˜g¨$Ó/Ò/¹Ñ?óùâ@ùÚ?øä× Ñ ó 	:Ø××Øä—’œ˜Q›Ñ9 6×#8Ñ#8×9ûð		:ús2   ‘A ™A
®	A ·AÁA Á
A ÁB6Á0<B1Â1B6c                óæ  • UR                   n[        R                  R                  S5      nU(       a(  [        R                  R                  U5      S:X  a  UnSnOU(       a  SnUnOSnSnU(       d  XE4$ S =pgU H^  n[        R                  R                  U5      S:X  a  Ub  [        R                  " S5      eUnMC  Ub  [        R                  " S5      eUnM`     U(       a  UOUU(       a  U4$ U4$ )NÚALEMBIC_CONFIGzpyproject.tomlzalembic.iniz'pyproject.toml indicated more than oncez"only one ini file may be indicated)rù   r®   ÚenvironrY   ÚpathÚbasenamer   r[   )	r(   rR  rµ   Úalembic_config_envÚdefault_pyproject_tomlÚdefault_alembic_configÚtomlÚinirl   s	            r,   Ú_inis_from_configÚCommandLine._inis_from_configÎ  s  € Ø—‘ˆäŸZ™ZŸ^™^Ð,<Ó=ÐæÜ—‘× Ñ Ð!3Ó4Ð8HÓHà%7Ð"Ø%2Ñ"ÞØ%5Ð"Ø%7Ñ"à%2Ð"Ø%5Ð"æØ)ÐAÐAàÐˆãˆDÜ�w‰w×Ñ Ó%Ð)9Ó9ØÑ#Ü×+Ò+ØAóð ð ’à‘?Ü×+Ò+Ø<óð ð ’ñ ö ‰tÐ!7ÞˆCð
ð 	
Ø2ð
ð 	
r/   c                ó  • U R                   R                  U5      n[        US5      (       d  U R                   R                  S5        gU R	                  U5      u  p4[        UUUR                  US9nU R                  XR5        g)z6Executes the command line with the provided arguments.r9  ztoo few arguments)r)   r*   r+   r   N)r5  Ú
parse_argsÚhasattrÚerrorr`  r   rl   rT  )r(   ÚargvrR  r^  r_  rÞ   s         r,   ÚmainÚCommandLine.mainö  sr   € à—+‘+×(Ñ(¨Ó.ˆÜ�w ×&Ñ&ð �K‰K×ÑÐ1Õ2à×.Ñ.¨wÓ7‰IˆDÜØØØ#ŸL™LØ ñ	ˆCð �L‰L˜Õ&r/   )r5  r2  r2   )r  r0   ræ   rç   )r,  r÷   ræ   rç   )r,  r÷   ræ   ztuple[Any, Any, str])rù   r   rR  r   ræ   rç   )rR  r   ræ   ztuple[str, str])rf  úSequence[str] | Noneræ   rç   )rê   rë   rì   rí   rî   r-   r#   r   r>  r?  r   Ústampr#  rð   r  r4  r;  rT  r`  rg  ró   r:   r/   r,   rÿ   rÿ   ª  s  ‡ Ù9ö"ðLØØØÙØ!ØØ9ñð
ðLð 	ØØÙ�cÐ GÑHð
ðLð 	ØÙØ#ð ñð
ðLð0 	ØÙØð)ñð
ð1Lð@ 	ØÙØð+ñð
ðALðP 	ØÙØ#ØMñð
ðQLð^ 	ØÙØð8ñð
ð_Lðn 	ØÙØð!ñð
ðoLð~ 	ØÙØØIñð
ðLðL 	ØÙØØJñð
ðMLðZ 	ØØÙ˜Ð+DÑEð
ð[Lðd 	Ø$ÙØ#ØBñð!
ðeLðr 	ØÙØ#ð(ñð
ðsLðD 	ØØÙØØHñð
ðELðT 	ØØ ÙØ#Ø4ñð
ðULðd 	ØÙØ#ØNñð
ðeLðr 	ØÙØ#ð4ñð
ðsLðB 	ØØÙØ#ðGñð

ñCL€Lñ\ Ð>Ñ?ÙØ&ñ
ñ ØØBñ
ñ	Ðð 	�‰˜
 KÐ0ð;ÐÐ7ó ô8ôt0ô6,ô>:ô&
÷P'ñ 'r/   rÿ   c                ó0   • [        US9R                  U S9  g)z(The console runner function for Alembic.r%  )rf  N)rÿ   rg  )rf  r  rû   s      r,   rg  rg    s   € ô �TÑ×Ñ TÐÒ*r/   Ú__main__)NN)rf  ri  r  r0   rû   r
   ræ   rç   )*Ú
__future__r   Úargparser   r   Úcollections.abcr   r   Úconfigparserr   r)  Úloggingr®   Úpathlibr	   rÃ   rï   Útypingr
   r   r   r   r   Útyping_extensionsr   r×   r   r   r   r   Úutil.pyfilesr   Ú	getLoggerrê   rM   r   r   ÚPostWriteHookConfigr¥   r÷   rÿ   rg  r:   r/   r,   Ú<module>rx     sæ   ðÝ "å #Ý Ý #Ý $Ý %Û Û Û 	Ý Û 	Û 
Ý Ý Ý Ý Ý å 'å Ý Ý Ý Ý 1à×Ò˜Ó!€÷s	ñ s	ðl ˜c 3˜hÑ'Ð ô�y¨ò ôN�hô N÷['ñ ['ð~
 "&Øð+Ø
ð+à
ð+ð ð+ð 
õ	+ð ˆzÓÙ…Fð r/   