o
    Df                     @   sD   d dl mZ d dlmZ d dlmZ ddlmZ G dd deZdS )	    )Requirements)util)sqla_compat   )
exclusionsc                   @   s  e Z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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/d0 Zed1d2 Zed3d4 Zed5d6 Zed7d8 Zed9d: Z ed;d< Z!ed=d> Z"ed?d@ Z#edAdB Z$edCdD Z%edEdF Z&edGdH Z'edIdJ Z(dKS )LSuiteRequirementsc                 C      t  S )zXTarget database must support external schemas, and have one
        named 'test_schema'.r   openself r   U/home/ubuntu/webapp/venv/lib/python3.10/site-packages/alembic/testing/requirements.pyschemas	      zSuiteRequirements.schemasc                 C   r   )z;target database should support 'AUTOCOMMIT' isolation levelr   closedr   r   r   r   autocommit_isolation   s   z&SuiteRequirements.autocommit_isolationc                 C   r   )zneeded for sqlalchemy compatr   r   r   r   r   materialized_views   s   z$SuiteRequirements.materialized_viewsc                 C   s   dd }t |S )Nc                 S   s`   ddl m} || j}z|d W dS  ty   Y dS  ty&   Y dS  ty/   Y dS w )Nr   )inspectxTF)
sqlalchemyr   dbget_unique_constraintsNotImplementedError	TypeError	Exception)configr   inspr   r   r    doesnt_have_check_uq_constraints   s   
zXSuiteRequirements.unique_constraint_reflection.<locals>.doesnt_have_check_uq_constraintsr   skip_if)r   r   r   r   r   unique_constraint_reflection   s   
z.SuiteRequirements.unique_constraint_reflectionc                 C   s   t dd gdS )z'Target database must support SEQUENCEs.c                 S   
   | j jjS N)r   dialectsupports_sequencesr   r   r   r   <lambda>2      
 z-SuiteRequirements.sequences.<locals>.<lambda>zno sequence supportr   only_ifr   r   r   r   	sequences-   s   zSuiteRequirements.sequencesc                 C   r   r$   r	   r   r   r   r   foreign_key_match6      z#SuiteRequirements.foreign_key_matchc                 C   r   r$   r	   r   r   r   r   !foreign_key_constraint_reflection:   r.   z3SuiteRequirements.foreign_key_constraint_reflectionc                 C   r   )zMTarget database must support check constraints
        and also enforce them.r	   r   r   r   r   check_constraints_w_enforcement>   r   z1SuiteRequirements.check_constraints_w_enforcementc                 C   r   r$   r   r   r   r   r   reflects_pk_namesE   r.   z#SuiteRequirements.reflects_pk_namesc                 C   r   r$   r   r   r   r   r   reflects_fk_optionsI   r.   z%SuiteRequirements.reflects_fk_optionsc                 C      t dd dS )Nc                 S      t j S r$   )r   sqla_14r'   r   r   r   r(   P       z1SuiteRequirements.sqlalchemy_14.<locals>.<lambda>z"SQLAlchemy 1.4 or greater requiredr    r   r   r   r   sqlalchemy_14M      zSuiteRequirements.sqlalchemy_14c                 C   r3   )Nc                 S   s   t jS r$   r   sqla_2r'   r   r   r   r(   W   s    z1SuiteRequirements.sqlalchemy_1x.<locals>.<lambda>zSQLAlchemy 1.x testr    r   r   r   r   sqlalchemy_1xT   r8   zSuiteRequirements.sqlalchemy_1xc                 C   r3   )Nc                 S   r4   r$   r9   r'   r   r   r   r(   ^   r6   z0SuiteRequirements.sqlalchemy_2.<locals>.<lambda>zSQLAlchemy 2.x testr    r   r   r   r   sqlalchemy_2[   r8   zSuiteRequirements.sqlalchemy_2c                 C   s   dd }| j t| S )Nc                 S   s$   zdd l }W dS  ty   Y dS w )Nr   FT)greenletImportError)r   r=   r   r   r   god   s   
z%SuiteRequirements.asyncio.<locals>.go)r7   r   r+   )r   r?   r   r   r   asynciob   s   zSuiteRequirements.asyncioc                 C      t dd S )Nc                 S   r#   r$   )r   r%   supports_commentsr'   r   r   r   r(   q   r)   z,SuiteRequirements.comments.<locals>.<lambda>r*   r   r   r   r   commentsn      zSuiteRequirements.commentsc                 C   r   r$   r	   r   r   r   r   alter_columnt   r.   zSuiteRequirements.alter_columnc                 C   r   r$   r   r   r   r   r   computed_columnsx   r.   z"SuiteRequirements.computed_columnsc                 C      t t tjS r$   )r   r+   BooleanPredicater   has_computedr   r   r   r   computed_columns_api|      
z&SuiteRequirements.computed_columns_apic                 C   rG   r$   )r   r+   rH   r   has_computed_reflectionr   r   r   r   computed_reflects_normally   rK   z,SuiteRequirements.computed_reflects_normallyc                 C   r   r$   r   r   r   r   r   #computed_reflects_as_server_default   r.   z5SuiteRequirements.computed_reflects_as_server_defaultc                 C   r   r$   r   r   r   r   r   )computed_doesnt_reflect_as_server_default   r.   z;SuiteRequirements.computed_doesnt_reflect_as_server_defaultc                 C   r   r$   r   r   r   r   r   autoincrement_on_composite_pk   r.   z/SuiteRequirements.autoincrement_on_composite_pkc                 C   r   r$   r   r   r   r   r   fk_ondelete_is_reflected   r.   z*SuiteRequirements.fk_ondelete_is_reflectedc                 C   r   r$   r   r   r   r   r   fk_onupdate_is_reflected   r.   z*SuiteRequirements.fk_onupdate_is_reflectedc                 C   r   r$   r	   r   r   r   r   fk_onupdate   r.   zSuiteRequirements.fk_onupdatec                 C   r   r$   r	   r   r   r   r   fk_ondelete_restrict   r.   z&SuiteRequirements.fk_ondelete_restrictc                 C   r   r$   r	   r   r   r   r   fk_onupdate_restrict   r.   z&SuiteRequirements.fk_onupdate_restrictc                 C   r   r$   r	   r   r   r   r   fk_ondelete_noaction   r.   z&SuiteRequirements.fk_ondelete_noactionc                 C   r   r$   r   r   r   r   r   fk_initially   r.   zSuiteRequirements.fk_initiallyc                 C   r   r$   r   r   r   r   r   fk_deferrable   r.   zSuiteRequirements.fk_deferrablec                 C   r   r$   r   r   r   r   r   fk_deferrable_is_reflected   r.   z,SuiteRequirements.fk_deferrable_is_reflectedc                 C   r   r$   r	   r   r   r   r   fk_names   r.   zSuiteRequirements.fk_namesc                 C   r   r$   r	   r   r   r   r   integer_subtype_comparisons   r.   z-SuiteRequirements.integer_subtype_comparisonsc                 C   rA   )Nc                 S   r#   r$   )r   r%   requires_name_normalizer'   r   r   r   r(      r)   z5SuiteRequirements.no_name_normalize.<locals>.<lambda>r    r   r   r   r   no_name_normalize   rD   z#SuiteRequirements.no_name_normalizec                 C   r   r$   r   r   r   r   r   identity_columns   r.   z"SuiteRequirements.identity_columnsc                 C   r   r$   r   r   r   r   r   identity_columns_alter   r.   z(SuiteRequirements.identity_columns_alterc                 C   rG   r$   )r   r+   rH   r   has_identityr   r   r   r   identity_columns_api   rK   z&SuiteRequirements.identity_columns_apiN))__name__
__module____qualname__propertyr   r   r   r"   r,   r-   r/   r0   r1   r2   r7   r;   r<   r@   rC   rE   rF   rJ   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r]   r^   r_   ra   r   r   r   r   r      s    



































r   N)	sqlalchemy.testing.requirementsr   alembicr   alembic.utilr   testingr   r   r   r   r   r   <module>   s
    