U
    ^g%i$                     @  sh  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	rVd 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d<dddddZd=ddd	d
ddddZd>dddddd
d
dd
d
d
d
ddddZd?ddd	d
ddddZd@dddd
ddddZdAddd
d
ddd d!Zd"d#d$d%Z	dd&d'd(d)Z
dd*d+d,d-d.ZdBd
d
d/d
d0d1d2d3Zdd4d5d6d7Zd"d8dd9d:d;ZdS )CSchemaObjectsNzOptional[MigrationContext]None)migration_contextreturnc                 C  s
   || _ d S N)r"   )selfr"    r&   [/var/www/html/api-medvista/venv/lib/python3.8/site-packages/alembic/operations/schemaobj.py__init__)   s    zSchemaObjects.__init__z,Optional[sqla_compat._ConstraintNameDefined]strzSequence[str]zOptional[str]r   )name
table_namecolsr   r#   c           	        sT   |   }dd |D }tj||f|d|i tj fdd|D d|i|}|S )Nc                 S  s   g | ]}t |tqS r&   	sa_schemar   r   .0nr&   r&   r'   
<listcomp>7   s     z8SchemaObjects.primary_key_constraint.<locals>.<listcomp>r   c                   s   g | ]} j | qS r&   cr/   tr&   r'   r2   <   s     r*   )metadatar.   r   r   )	r%   r*   r+   r,   r   
dialect_kwmcolumnspr&   r5   r'   primary_key_constraint.   s    z$SchemaObjects.primary_key_constraintz	List[str]zOptional[bool]r   )r*   sourcereferent
local_colsremote_colsonupdateondelete
deferrablesource_schemareferent_schema	initiallymatchr#   c                   s   |   }||kr"|	|
kr"|| }n&|}tj||fdd |D d|
i tj||fdd t|D d|	i}|
rd|
|f n| ||d< tj| fdd|D f|||||d|}|| |S )	Nc                 S  s   g | ]}t |tqS r&   r-   r/   r&   r&   r'   r2   X   s     z8SchemaObjects.foreign_key_constraint.<locals>.<listcomp>r   c                 S  s   g | ]}t |tqS r&   r-   r/   r&   r&   r'   r2   _   s   %s.%srG   c                   s   g | ]}d  |f qS )rH   r&   r/   tnamer&   r'   r2   p   s     )r*   rA   rB   rC   rF   )r7   r.   r   r   Zunique_listr   append_constraint)r%   r*   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r8   r9   Zt1_colst1fr&   rI   r'   foreign_key_constraint@   sR    


z$SchemaObjects.foreign_key_constraintr   )r*   r=   r?   r   r#   c                   sV   t j||  fdd |D d|i ||d< t j fdd|D |} | |S )Nc                 S  s   g | ]}t |tqS r&   r-   r/   r&   r&   r'   r2      s     z3SchemaObjects.unique_constraint.<locals>.<listcomp>r   r*   c                   s   g | ]} j | qS r&   r3   r/   r5   r&   r'   r2      s     )r.   r   r7   r   rK   )r%   r*   r=   r?   r   kwZuqr&   r5   r'   unique_constraint|   s    
zSchemaObjects.unique_constraintz*Union[str, TextClause, ColumnElement[Any]]zUnion[CheckConstraint])r*   r=   	conditionr   r#   c                 K  sB   t j||  t dt|d}t j|fd|i|}|| |S )Nxr   r*   )r.   r   r7   r   r   r   rK   )r%   r*   r=   rQ   r   rO   r6   Zckr&   r&   r'   check_constraint   s    

zSchemaObjects.check_constraintr   )r*   r+   type_r   r#   c           
   
   K  s   | j ||d}dd tjtjdd tjd}z|| }W nD tk
r| }	 z&tddtdd	 |D  |	W 5 d }	~	X Y nX ||d
}|	| |S d S )Nr   c                 S  s   t jg g | dS )Nr*   )r.   r   rU   r&   r&   r'   <lambda>   s     z2SchemaObjects.generic_constraint.<locals>.<lambda>c                 S  s   t jd| dS )N rU   )r.   r   rU   r&   r&   r'   rV          )Z
foreignkeyprimaryuniquecheckNz'type' can be one of %sz, c                 s  s   | ]}t |V  qd S r$   )repr)r0   rR   r&   r&   r'   	<genexpr>   s     z3SchemaObjects.generic_constraint.<locals>.<genexpr>rU   )
tabler.   r   r   r   KeyError	TypeErrorjoinsortedrK   )
r%   r*   r+   rT   r   rO   r6   typesconstZker&   r&   r'   generic_constraint   s(    	

z SchemaObjects.generic_constraintr   )r#   c                 C  sF   i }| j d k	r:d| j jkr:| j jd }t|dr:|j|d< tjf |S )NZtarget_metadatanaming_convention)r"   optshasattrrf   r.   r   )r%   rO   mtr&   r&   r'   r7      s    


zSchemaObjects.metadatar   )r*   r#   c                   s   |   }dd |D }|dd}|r<|D ]}d |_|_q*tj||f||  fdd|D }|D ]}	 |	 qf jD ]}
| ||
 q| S )Nc                 S  s.   g | ]&}t |tr|jd k	r&t|n|qS r$   )
isinstancer   r^   r   _copy)r0   r4   r&   r&   r'   r2      s   
z'SchemaObjects.table.<locals>.<listcomp>_constraints_includedFc                   sL   g | ]D}t |ttfrt|d d k	rDt|d ddk	rDtj| dn|qS )parentN)Ztarget_table)rj   r   r   getattrr   rk   )r0   elemr5   r&   r'   r2      s   )	r7   poprZ   indexr.   r   rK   Zforeign_keys_ensure_table_for_fk)r%   r*   r:   rO   r9   r,   rl   r4   constraintsrd   rM   r&   r5   r'   r^      s"    

zSchemaObjects.tabler   r   )r*   rT   r#   c                 K  s   t j||f|S r$   )r.   r   )r%   r*   rT   rO   r&   r&   r'   column   s    zSchemaObjects.columnz4Sequence[Union[str, TextClause, ColumnElement[Any]]]r   )r*   	tablenamer:   r   r#   c                   sD   t j|p
d|  |d  |d< t j|f fdd|D |}|S )NZno_tabler   _tablec                   s   g | ]}t j |qS r&   )r   r   Z_textual_index_columnr/   r5   r&   r'   r2     s     z'SchemaObjects.index.<locals>.<listcomp>)r.   r   r7   r   )r%   r*   ru   r:   r   rO   idxr&   r5   r'   rq      s    zSchemaObjects.indexzTuple[Optional[str], str])	table_keyr#   c                 C  s>   d|kr.| d}d|dd }|d }n|}d }||fS )N.r   )splitra   )r%   rx   tokenssnamerJ   r&   r&   r'   _parse_table_key  s    

zSchemaObjects._parse_table_keyr   )r7   fkr#   c                 C  sr   t |jtrn|jdd\}}| |\}}||jkrHtj|||d}n
|j| }||jkrn|	t
|t dS )zUcreate a placeholder Table object for the referent of a
        ForeignKey.

        ry      r   N)rj   Z_colspecr)   rsplitr~   Ztablesr.   r   r4   append_columnr   r   )r%   r7   r   rx   cnamer}   rJ   Zrel_tr&   r&   r'   rr     s    


z"SchemaObjects._ensure_table_for_fk)N)N)NNNNNNN)N)N)N)N)__name__
__module____qualname__r(   r<   rN   rP   rS   re   r7   r^   rt   rq   r~   rr   r&   r&   r&   r'   r    (   s2    
        (A   ' 
r    N)'
__future__r   typingr   r   r   r   r   r   r	   r
   Z
sqlalchemyr   r.   Zsqlalchemy.sql.schemar   r   r   Zsqlalchemy.typesr   r   rW   r   r   Zsqlalchemy.sql.elementsr   r   r   r   r   r   r   r   r   Zsqlalchemy.sql.type_apir   Zruntime.migrationr   r    r&   r&   r&   r'   <module>   s:   