%PDF- %PDF-
Direktori : /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/ |
Current File : //opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyo |
� �M!Vc @ sM d d l m Z d d l m Z d d l m Z d e j f d � � YZ d S( i ( t Operationsi ( t MigrationContext( t utilt EnvironmentContextc B s" e Z d Z e Z e Z e Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z e d � Z e e e e e e e e e e e e e e e e e e e d d d d e d � Z d � Z e d � Z d � Z d � Z d � Z d � Z d � Z RS( su A configurational facade made available in an ``env.py`` script. The :class:`.EnvironmentContext` acts as a *facade* to the more nuts-and-bolts objects of :class:`.MigrationContext` as well as certain aspects of :class:`.Config`, within the context of the ``env.py`` script that is invoked by most Alembic commands. :class:`.EnvironmentContext` is normally instantiated when a command in :mod:`alembic.command` is run. It then makes itself available in the ``alembic.context`` module for the scope of the command. From within an ``env.py`` script, the current :class:`.EnvironmentContext` is available by importing this module. :class:`.EnvironmentContext` also supports programmatic usage. At this level, it acts as a Python context manager, that is, is intended to be used using the ``with:`` statement. A typical use of :class:`.EnvironmentContext`:: from alembic.config import Config from alembic.script import ScriptDirectory config = Config() config.set_main_option("script_location", "myapp:migrations") script = ScriptDirectory.from_config(config) def my_function(rev, context): '''do something with revision "rev", which will be the current database revision, and "context", which is the MigrationContext that the env.py will create''' with EnvironmentContext( config, script, fn = my_function, as_sql = False, starting_rev = 'base', destination_rev = 'head', tag = "sometag" ): script.run_env() The above script will invoke the ``env.py`` script within the migration environment. If and when ``env.py`` calls :meth:`.MigrationContext.run_migrations`, the ``my_function()`` function above will be called by the :class:`.MigrationContext`, given the context itself as well as the current revision in the database. .. note:: For most API usages other than full blown invocation of migration scripts, the :class:`.MigrationContext` and :class:`.ScriptDirectory` objects can be created and used directly. The :class:`.EnvironmentContext` object is *only* needed when you need to actually invoke the ``env.py`` module present in the migration environment. c K s | | _ | | _ | | _ d S( s^ Construct a new :class:`.EnvironmentContext`. :param config: a :class:`.Config` instance. :param script: a :class:`.ScriptDirectory` instance. :param \**kw: keyword options that will be ultimately passed along to the :class:`.MigrationContext` when :meth:`.EnvironmentContext.configure` is called. N( t configt scriptt context_opts( t selfR R t kw( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt __init__S s c C s | j � | S( s� Establish a context which provides a :class:`.EnvironmentContext` object to env.py scripts. The :class:`.EnvironmentContext` will be made available as ``from alembic import context``. ( t _install_proxy( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt __enter__a s c O s | j � d S( N( t _remove_proxy( R t argR ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt __exit__m s c C s | j j d t � S( s% Return True if the current migrations environment is running in "offline mode". This is ``True`` or ``False`` depending on the the ``--sql`` flag passed. This function does not require that the :class:`.MigrationContext` has been configured. t as_sql( R t gett False( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt is_offline_modep s c C s | j � j j S( s� Return True if the context is configured to expect a transactional DDL capable backend. This defaults to the type of database in use, and can be overridden by the ``transactional_ddl`` argument to :meth:`.configure` This function requires that a :class:`.MigrationContext` has first been made available via :meth:`.configure`. ( t get_contextt implt transactional_ddl( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt is_transactional_ddl} s c C s | j � S( N( R ( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt requires_connection� s c C s | j j d � S( s� Return the hex identifier of the 'head' script revision. If the script directory has multiple heads, this method raises a :class:`.CommandError`; :meth:`.EnvironmentContext.get_head_revisions` should be preferred. This function does not require that the :class:`.MigrationContext` has been configured. .. seealso:: :meth:`.EnvironmentContext.get_head_revisions` t head( R t as_revision_number( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt get_head_revision� s c C s | j j d � S( s: Return the hex identifier of the 'heads' script revision(s). This returns a tuple containing the version number of all heads in the script directory. This function does not require that the :class:`.MigrationContext` has been configured. .. versionadded:: 0.7.0 t heads( R R ( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt get_head_revisions� s c C sa | j d k r( | j j | j � j � Sd | j k rN | j j | j d � St j d � � d S( sT Return the 'starting revision' argument, if the revision was passed using ``start:end``. This is only meaningful in "offline" mode. Returns ``None`` if no value is available or was configured. This function does not require that the :class:`.MigrationContext` has been configured. t starting_revs+ No starting revision argument is available.N( t _migration_contextt NoneR R R t _start_from_revR R t CommandError( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt get_starting_revision_argument� s c C s | j j | j d � S( s� Get the 'destination' revision argument. This is typically the argument passed to the ``upgrade`` or ``downgrade`` command. If it was specified as ``head``, the actual version number is returned; if specified as ``base``, ``None`` is returned. This function does not require that the :class:`.MigrationContext` has been configured. t destination_rev( R R R ( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt get_revision_argument� s c C s | j j d d � S( sg Return the value passed for the ``--tag`` argument, if any. The ``--tag`` argument is not used directly by Alembic, but is available for custom ``env.py`` configurations that wish to use it; particularly for offline generation scripts that wish to generate tagged filenames. This function does not require that the :class:`.MigrationContext` has been configured. .. seealso:: :meth:`.EnvironmentContext.get_x_argument` - a newer and more open ended system of extending ``env.py`` scripts via the command line. t tagN( R R R ( R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt get_tag_argument� s c C sS | j j d k r* | j j j p$ g } n g } | rO t d � | D� � } n | S( s� Return the value(s) passed for the ``-x`` argument, if any. The ``-x`` argument is an open ended flag that allows any user-defined value or values to be passed on the command line, then available here for consumption by a custom ``env.py`` script. The return value is a list, returned directly from the ``argparse`` structure. If ``as_dictionary=True`` is passed, the ``x`` arguments are parsed using ``key=value`` format into a dictionary that is then returned. For example, to support passing a database URL on the command line, the standard ``env.py`` script can be modified like this:: cmd_line_url = context.get_x_argument( as_dictionary=True).get('dbname') if cmd_line_url: engine = create_engine(cmd_line_url) else: engine = engine_from_config( config.get_section(config.config_ini_section), prefix='sqlalchemy.', poolclass=pool.NullPool) This then takes effect by running the ``alembic`` script as:: alembic -x dbname=postgresql://user:pass@host/dbname upgrade head This function does not require that the :class:`.MigrationContext` has been configured. .. versionadded:: 0.6.0 .. seealso:: :meth:`.EnvironmentContext.get_tag_argument` :attr:`.Config.cmd_opts` c s s! | ] } | j d d � Vq d S( t =i N( t split( t .0R ( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pys <genexpr> s N( R t cmd_optsR t xt dict( R t as_dictionaryt value( ( sL /opt/alt/python27/lib/python2.7/site-packages/alembic/runtime/environment.pyt get_x_argument� s )t upgradest downgradess op.s sa.c K s� | j } | t k r"