o
    h$                     @  sf  d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d d	lm
Z
 d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ e	rd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dl"m#Z# ddl$m%Z% G dd dZ&d S )!    )annotations)Any)Dict)List)Optional)Sequence)Tuple)TYPE_CHECKING)Unionschema)Column)
Constraint)Index)Integer)NULLTYPE   )util)sqla_compat)ColumnElement)
TextClause)CheckConstraint)
ForeignKey)ForeignKeyConstraint)MetaData)PrimaryKeyConstraint)Table)UniqueConstraint)
TypeEngine)MigrationContextc                   @  s   e Zd Z	dHdIddZ	dHdJddZ							dKdLd!d"Z	dHdMd$d%Z	dHdNd)d*Z	dHdOd-d.ZdPd0d1Z	dQd3d4Z
dRd7d8Z	dHdSd=d>ZdTdAdBZdUdFdGZdS )VSchemaObjectsNmigration_contextOptional[MigrationContext]returnNonec                 C  s
   || _ d S N)r!   )selfr!    r'   p/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/alembic/operations/schemaobj.py__init__)   s   
zSchemaObjects.__init__name,Optional[sqla_compat._ConstraintNameDefined]
table_namestrcolsSequence[str]r   Optional[str]r   c           	        sV   |   }dd |D }tj||g|R d|i tj fdd|D d|i|}|S )Nc                 S     g | ]}t |tqS r'   	sa_schemar   r   .0nr'   r'   r(   
<listcomp>7       z8SchemaObjects.primary_key_constraint.<locals>.<listcomp>r   c                      g | ]} j | qS r'   cr4   tr'   r(   r7   <       r*   )metadatar3   r   r   )	r&   r*   r,   r.   r   
dialect_kwmcolumnspr'   r<   r(   primary_key_constraint.   s   z$SchemaObjects.primary_key_constraintsourcereferent
local_cols	List[str]remote_colsonupdateondelete
deferrableOptional[bool]source_schemareferent_schema	initiallymatchr   c                   s   |   }||kr|	|
kr|| }n|}tj||gdd |D R d|
i tj||gdd t|D R d|	i}|
rBd|
|f n| ||d< tj| fdd|D f|||||d|}|| |S )	Nc                 S  r1   r'   r2   r4   r'   r'   r(   r7   X   r8   z8SchemaObjects.foreign_key_constraint.<locals>.<listcomp>r   c                 S  r1   r'   r2   r4   r'   r'   r(   r7   _   s    
%s.%srQ   c                   s   g | ]}d  |f qS )rR   r'   r4   tnamer'   r(   r7   p   r8   )r*   rJ   rK   rL   rP   )r?   r3   r   r   unique_listr   append_constraint)r&   r*   rE   rF   rG   rI   rJ   rK   rL   rN   rO   rP   rQ   r@   rA   t1_colst1fr'   rS   r(   foreign_key_constraint@   sR   


z$SchemaObjects.foreign_key_constraintr   c                   s\   t j||  gdd |D R d|i ||d< t j fdd|D i |} | |S )Nc                 S  r1   r'   r2   r4   r'   r'   r(   r7      r8   z3SchemaObjects.unique_constraint.<locals>.<listcomp>r   r*   c                   r9   r'   r:   r4   r<   r'   r(   r7      r>   )r3   r   r?   r   rV   )r&   r*   rE   rG   r   kwuqr'   r<   r(   unique_constraint|   s   
zSchemaObjects.unique_constraint	condition*Union[str, TextClause, ColumnElement[Any]]Union[CheckConstraint]c                 K  sB   t j||  t dt|d}t j|fd|i|}|| |S )Nxr   r*   )r3   r   r?   r   r   r   rV   )r&   r*   rE   r^   r   r[   r=   ckr'   r'   r(   check_constraint   s   

zSchemaObjects.check_constrainttype_r   c           
   
   K  s   | j ||d}dd tjtjdd tjd}z|| }W n ty9 }	 ztddtdd	 |D  |	d }	~	ww ||d
}|	| |S )Nr   c                 S  s   t jg g | dS )Nr*   )r3   r   re   r'   r'   r(   <lambda>   s    z2SchemaObjects.generic_constraint.<locals>.<lambda>c                 S  s   t jd| dS )N re   )r3   r   re   r'   r'   r(   rf      s    )
foreignkeyprimaryuniquecheckNz'type' can be one of %sz, c                 s  s    | ]}t |V  qd S r%   )repr)r5   ra   r'   r'   r(   	<genexpr>   s    z3SchemaObjects.generic_constraint.<locals>.<genexpr>re   )
tabler3   r   r   r   KeyError	TypeErrorjoinsortedrV   )
r&   r*   r,   rd   r   r[   r=   typesconstker'   r'   r(   generic_constraint   s,   	

z SchemaObjects.generic_constraintr   c                 C  sJ   i }| j d urd| j jv r| j jd }t|dr|j|d< tjdi |S )Ntarget_metadatanaming_conventionr'   )r!   optshasattrrx   r3   r   )r&   r[   mtr'   r'   r(   r?      s   


zSchemaObjects.metadatar   c                   s   |   }dd |D }|dd}|r|D ]}d |_|_qtj||g|R i |  fdd|D }|D ]}	 |	 q6 jD ]}
| ||
 qA S )Nc                 S  s.   g | ]}t |tr|jd urt|n|qS r%   )
isinstancer   rn   r   _copy)r5   r;   r'   r'   r(   r7      s    z'SchemaObjects.table.<locals>.<listcomp>_constraints_includedFc                   sL   g | ]"}t |ttfrt|d d ur"t|d ddur"tj| dn|qS )parentN)target_table)r|   r   r   getattrr   r}   )r5   elemr<   r'   r(   r7      s    )	r?   poprj   indexr3   r   rV   foreign_keys_ensure_table_for_fk)r&   r*   rB   r[   rA   r.   r~   r;   constraintsrt   rY   r'   r<   r(   rn      s"   

zSchemaObjects.tabler   r   c                 K  s   t j||fi |S r%   )r3   r   )r&   r*   rd   r[   r'   r'   r(   column   s   zSchemaObjects.column	tablenamerB   4Sequence[Union[str, TextClause, ColumnElement[Any]]]r   c                   sJ   t j|pd|  |d  |d< t j|g fdd|D R i |}|S )Nno_tabler   _tablec                   s   g | ]	}t j |qS r'   )r   r   _textual_index_columnr4   r<   r'   r(   r7     s    z'SchemaObjects.index.<locals>.<listcomp>)r3   r   r?   r   )r&   r*   r   rB   r   r[   idxr'   r<   r(   r      s   zSchemaObjects.index	table_keyTuple[Optional[str], str]c                 C  sD   d|v r| d}d|dd }|d }||fS |}d }||fS )N.r   )splitrq   )r&   r   tokenssnamerT   r'   r'   r(   _parse_table_key  s   
zSchemaObjects._parse_table_keyr?   fkr   c                 C  sz   t |jtr9|jdd\}}| |\}}||jvr$tj|||d}n|j| }||jvr;|	t
|t dS dS dS )zUcreate a placeholder Table object for the referent of a
        ForeignKey.

        r      r   N)r|   _colspecr-   rsplitr   tablesr3   r   r;   append_columnr   r   )r&   r?   r   r   cnamer   rT   rel_tr'   r'   r(   r     s   


z"SchemaObjects._ensure_table_for_fkr%   )r!   r"   r#   r$   )
r*   r+   r,   r-   r.   r/   r   r0   r#   r   )NNNNNNN)r*   r+   rE   r-   rF   r-   rG   rH   rI   rH   rJ   r0   rK   r0   rL   rM   rN   r0   rO   r0   rP   r0   rQ   r0   r#   r   )
r*   r+   rE   r-   rG   r/   r   r0   r#   r   )
r*   r+   rE   r-   r^   r_   r   r0   r#   r`   )
r*   r+   r,   r-   rd   r0   r   r0   r#   r   )r#   r   )r*   r-   r#   r   )r*   r-   rd   r   r#   r   )
r*   r0   r   r0   rB   r   r   r0   r#   r   )r   r-   r#   r   )r?   r   r   r   r#   r$   )__name__
__module____qualname__r)   rD   rZ   r]   rc   rv   r?   rn   r   r   r   r   r'   r'   r'   r(   r    (   s4    
A


'

r    N)'
__future__r   typingr   r   r   r   r   r   r	   r
   
sqlalchemyr   r3   sqlalchemy.sql.schemar   r   r   sqlalchemy.typesr   r   rg   r   r   sqlalchemy.sql.elementsr   r   r   r   r   r   r   r   r   sqlalchemy.sql.type_apir   runtime.migrationr   r    r'   r'   r'   r(   <module>   s<   