OwlCyberSecurity - MANAGER
Edit File: api.cpython-312.pyc
� ֓�g�V � �< � d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z d d lm Z d d lmZ d dlmZ d dl mZ d dlmZ d dlmZ ddlmZ ddlmZ ddlmZ erld dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlmZ ddl m!Z! ddl m"Z" ddl m#Z# ddl$m%Z% ddl$m&Z& dd l$m'Z' dd!l$m(Z( dd"l)m*Z* dd#l+m,Z, dd$l+m-Z- dd%l.m/Z/ d.d&�Z0 d/d'�Z1 d0 d1d(�Z2 d2d)�Z3 G d*� d+� Z4 G d,� d-� Z5y)3� )�annotationsN)�Any)�Dict)�Iterator)�List)�Optional)�Sequence)�Set)� TYPE_CHECKING)�Union)�inspect� )�compare)�render� )�util)�ops)�sqla_compat)� Connection)�Dialect)� Inspector)�MetaData)� SchemaItem)�Table)�Config)�DowngradeOps)�MigrationScript)� UpgradeOps)�NameFilterParentNames)�NameFilterType)�ProcessRevisionDirectiveFn)�RenderItemFn��MigrationContext)�Script)�ScriptDirectory)� _GetRevArgc �j � t | |� }|j �J �|j j � S )aB Compare a database schema to that given in a :class:`~sqlalchemy.schema.MetaData` instance. The database connection is presented in the context of a :class:`.MigrationContext` object, which provides database connectivity as well as optional comparison functions to use for datatypes and server defaults - see the "autogenerate" arguments at :meth:`.EnvironmentContext.configure` for details on these. The return format is a list of "diff" directives, each representing individual differences:: from alembic.migration import MigrationContext from alembic.autogenerate import compare_metadata from sqlalchemy import ( create_engine, MetaData, Column, Integer, String, Table, text, ) import pprint engine = create_engine("sqlite://") with engine.begin() as conn: conn.execute( text( ''' create table foo ( id integer not null primary key, old_data varchar, x integer ) ''' ) ) conn.execute(text("create table bar (data varchar)")) metadata = MetaData() Table( "foo", metadata, Column("id", Integer, primary_key=True), Column("data", Integer), Column("x", Integer, nullable=False), ) Table("bat", metadata, Column("info", String)) mc = MigrationContext.configure(engine.connect()) diff = compare_metadata(mc, metadata) pprint.pprint(diff, indent=2, width=20) Output:: [ ( "add_table", Table( "bat", MetaData(), Column("info", String(), table=<bat>), schema=None, ), ), ( "remove_table", Table( "bar", MetaData(), Column("data", VARCHAR(), table=<bar>), schema=None, ), ), ( "add_column", None, "foo", Column("data", Integer(), table=<foo>), ), [ ( "modify_nullable", None, "foo", "x", { "existing_comment": None, "existing_server_default": False, "existing_type": INTEGER(), }, True, False, ) ], ( "remove_column", None, "foo", Column("old_data", VARCHAR(), table=<foo>), ), ] :param context: a :class:`.MigrationContext` instance. :param metadata: a :class:`~sqlalchemy.schema.MetaData` instance. .. seealso:: :func:`.produce_migrations` - produces a :class:`.MigrationScript` structure based on metadata comparison. )�produce_migrations�upgrade_ops�as_diffs)�context�metadata�migration_scripts �G/opt/hc_python/lib/python3.12/site-packages/alembic/autogenerate/api.py�compare_metadatar0 / s9 � �r *�'�8�<���'�'�3�3�3��'�'�0�0�2�2� c �� � t | |�� }t j dt j g � t j g � �� }t j ||� |S )a� Produce a :class:`.MigrationScript` structure based on schema comparison. This function does essentially what :func:`.compare_metadata` does, but then runs the resulting list of diffs to produce the full :class:`.MigrationScript` object. For an example of what this looks like, see the example in :ref:`customizing_revision`. .. seealso:: :func:`.compare_metadata` - returns more fundamental "diff" data from comparing a schema. )r- N��rev_idr* � downgrade_ops)�AutogenContextr r r r r �_populate_migration_script)r, r- �autogen_contextr. s r/ r) r) � sW � �$ %�W�x�@�O��*�*���N�N�2�&��&�&�r�*��� �&�&��8H�I��r1 c �� � |||||d�}|�$ddl m} ddlm} | j | � �� }t ||�� }t |� |_ t j t j | |� � S )a* Render Python code given an :class:`.UpgradeOps` or :class:`.DowngradeOps` object. This is a convenience function that can be used to test the autogenerate output of a user-defined :class:`.MigrationScript` structure. :param up_or_down_op: :class:`.UpgradeOps` or :class:`.DowngradeOps` object :param sqlalchemy_module_prefix: module prefix for SQLAlchemy objects :param alembic_module_prefix: module prefix for Alembic constructs :param render_as_batch: use "batch operations" style for rendering :param imports: sequence of import symbols to add :param render_item: callable to render items :param migration_context: optional :class:`.MigrationContext` :param user_module_prefix: optional string prefix for user-defined types .. versionadded:: 1.11.0 )�sqlalchemy_module_prefix�alembic_module_prefix�render_item�render_as_batch�user_module_prefixr r# r )�DefaultDialect)�dialect)�opts)�runtime.migrationr$ �sqlalchemy.engine.defaultr? � configurer6 �set�importsr �_indent�_render_cmd_body)� up_or_down_opr: r; r= rF r<