ó
¿b›]c           @   st  d  Z  d d l 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 e f d „  ƒ  YZ i d e 6d e 6d e 6d e 6d e
 6Z d „  Z d „  Z e j e	 d ƒ e j e d ƒ d „  ƒ ƒ Z d S(   s5   Establish constraint and index naming conventions.


iÿÿÿÿNi   (   t   _defer_name(   t   _defer_none_name(   t   conv(   t   CheckConstraint(   t   Column(   t
   Constraint(   t   ForeignKeyConstraint(   t   Index(   t   PrimaryKeyConstraint(   t   Table(   t   UniqueConstrainti   (   t   event(   t   events(   t   exct   ConventionDictc           B   sb   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   c         C   s=   | |  _  t | t ƒ |  _ | |  _ | |  _ | j |  _ d  S(   N(   t   constt
   isinstanceR   t   _is_fkt   tablet
   conventiont   namet   _const_name(   t   selfR   R   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   __init__    s
    			c         C   s
   |  j  j S(   N(   R   R   (   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _key_table_name'   s    c         C   s8   |  j  r  |  j j | } | j St |  j j ƒ | Sd  S(   N(   R   R   t   elementst   parentt   listt   columns(   R   t   idxt   fk(    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt	   _column_X*   s    	c         C   sX   t  |  j t d  ƒ t f ƒ r0 t j d ƒ ‚ n  t  |  j t ƒ sQ d  |  j _	 n  |  j S(   Nsc   Naming convention including %(constraint_name)s token requires that constraint is explicitly named.(
   R   R   t   typet   NoneR   R   t   InvalidRequestErrorR   R   R   (   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _key_constraint_name1   s    c         C   s   |  j  | ƒ j S(   N(   R   t   key(   R   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _key_column_X_key<   s    c         C   s   |  j  | ƒ j S(   N(   R   R   (   R   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _key_column_X_nameB   s    c         C   s   |  j  | ƒ j S(   N(   R   t   _label(   R   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _key_column_X_labelE   s    c         C   sV   |  j  j d } | j j d ƒ } t | ƒ d k rF | \ } } } n | \ } } | S(   Ni    t   .i   (   R   R   t   target_fullnamet   splitt   len(   R   R   t   refst	   refschemat   reftablet   refcol(    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _key_referred_table_nameH   s    c         C   s   |  j  j | } | j j S(   N(   R   R   t   columnR   (   R   R   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _key_referred_column_X_nameQ   s    c   
      C   s²  | |  j  k r) |  j  | |  j |  j ƒ St |  d | ƒ rP t |  d | ƒ ƒ  St j d | ƒ } | r¢| j d ƒ } | j d ƒ } | r[|  j r¤ |  j j	 } n t
 |  j j ƒ } g  } xt t | ƒ D]f \ } } d | j d | d ƒ } y  | j t |  | ƒ | ƒ ƒ WqÉ t k
 r.t | ƒ ‚ qÉ XqÉ W| j d ƒ rHd n d	 }	 |	 j | ƒ Sd | j | d ƒ } t | ƒ } t |  | ƒ r¢t |  | ƒ | ƒ Sn  t | ƒ ‚ d  S(
   Ns   _key_%ss   .*_?column_(\d+)(_?N)?_.+i   i   t   _key_t   0t   Xt   _t    (   R   R   R   t   hasattrt   getattrt   ret   matcht   groupR   R   R   R   t	   enumeratet   replacet   appendt   AttributeErrort   KeyErrort
   startswitht   joint   int(
   R   R$   t   col_templateR   t	   multiplest   elemst   tokenst   elemt   attrt   sep(    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   __getitem__X   s4    	 (   t   __name__t
   __module__R   R   R   R#   R%   R&   R(   R1   R3   RM   (    (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyR      s   										t   ixt   pkt   ckt   uqR   c         C   sX   xQ | j  D]B } | t k r8 t | |  k r8 |  t | S| |  k r
 |  | Sq
 Wd  Sd  S(   N(   t   __mro__t   _prefix_dictR!   (   t   dict_R$   t   super_(    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _get_convention‚   s    c         C   sº   | j  } t | j t |  ƒ ƒ } t |  j t ƒ r: |  j S| d  k	 r£ t |  j t ƒ r£ |  j d  k s† d | k s† t |  j t ƒ r£ t | t	 |  | | j ƒ ƒ St | t
 ƒ r¶ d  Sd  S(   Nt   constraint_name(   t   metadataRX   t   naming_conventionR    R   R   R   R!   R    R   R   (   R   R   RZ   R   (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   _constraint_name_for_table   s    	t   after_parent_attachc            s‡   t  | t ƒ r. t j | d ‡  f d †  ƒ nU t  | t ƒ rƒ t  ˆ  j t t f ƒ rY d  St ˆ  | ƒ } | d  k	 rƒ | ˆ  _ qƒ n  d  S(   NR]   c            s   t  ˆ  | ƒ S(   N(   t   _constraint_name(   t   colR   (   R   (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   <lambda>®   R8   (
   R   R   R   t   listenR	   R   R   R    R\   R!   (   R   R   t   newname(    (   R   s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyR^   ¤   s    (   t   __doc__R;   R   R    R   R   t   schemaR   R   R   R   R   R   R	   R
   R8   R   R   R   t   objectR   RU   RX   R\   t   listens_forR^   (    (    (    s4   lib/python2.7/site-packages/sqlalchemy/sql/naming.pyt   <module>   s4   Z
		