ó
H`¾Tc           @   sO  d  Z  d d l m Z m Z m Z d d l m Z d d l m Z m	 Z	 d d l
 m Z d d l
 m Z d d l
 m Z d d	 l Z e ƒ  Z d
 „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e j e ƒ d „  ƒ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d „  Z d „  Z d	 S(   s­   Routines to handle the string class registry used by declarative.

This system allows specification of classes and expressions used in
:func:`.relationship` using strings.

i   (   t   ColumnPropertyt   RelationshipPropertyt   SynonymProperty(   t   _get_table_key(   t   class_mappert
   interfaces(   t   util(   t
   inspection(   t   exciÿÿÿÿNc         C   s  |  | j  k rN | j  |  } t | t ƒ s[ t | | g ƒ } | j  |  <q[ n | | j  |  <y | j  d } Wn+ t k
 r™ t d d ƒ | j  d <} n X| j j d ƒ } xX | r| j d ƒ } | j	 | ƒ } x | D] } | j	 | ƒ } qÚ W| j
 |  | ƒ q¯ Wd S(   s^   Add a class to the _decl_class_registry associated with the
    given declarative class.

    t   _sa_module_registryt   .i    N(   t   _decl_class_registryt
   isinstancet   _MultipleClassMarkert   KeyErrort   _ModuleMarkert   Nonet
   __module__t   splitt   popt
   get_modulet	   add_class(   t	   classnamet   clst   existingt   root_modulet   tokenst   tokent   module(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR      s     #
	R   c           B   s>   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   sR   refers to multiple classes of the same name
    within _decl_class_registry.

    c         C   sK   | |  _  t g  | D] } t j | |  j ƒ ^ q ƒ |  _ t j |  ƒ d  S(   N(   t	   on_removet   sett   weakreft   reft   _remove_itemt   contentst   _registriest   add(   t   selft   classesR   t   item(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   __init__J   s    	.c         C   s   d „  |  j  Dƒ S(   Nc         s   s   |  ] } | ƒ  Vq d  S(   N(    (   t   .0R    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pys	   <genexpr>Q   s    (   R"   (   R%   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   __iter__P   s    c         C   sz   t  |  j ƒ d k r; t j d d j | | g ƒ ƒ ‚ n; t |  j ƒ d } | ƒ  } | d  k rr t | ƒ ‚ n  | Sd  S(   Ni   sx   Multiple classes found for path "%s" in the registry of this declarative base. Please use a fully module-qualified path.R
   i    (   t   lenR"   R   t   InvalidRequestErrort   joint   listR   t	   NameError(   R%   t   patht   keyR    R   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   attempt_getS   s    	c         C   sC   |  j  j | ƒ |  j  s? t j |  ƒ |  j r? |  j ƒ  q? n  d  S(   N(   R"   t   removeR#   t   discardR   (   R%   R    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR!   b   s
    		c         C   s™   t  g  g  |  j D] } | ƒ  ^ q D] } | d  k	 r# | j ^ q# ƒ } | j | k rv t j d | j | j f ƒ n  |  j j t j	 | |  j
 ƒ ƒ d  S(   Ns’   This declarative base already contains a class with the same class name and module name as %s.%s, and will be replaced in the string-lookup table.(   R   R"   R   R   R   t   warnt   __name__R$   R   R    R!   (   R%   R'   R    R   t   modules(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   add_itemi   s    AN(	   R6   R   t   __doc__R   R(   R*   R2   R!   R8   (    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR   D   s   			R   c           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s?   "refers to a module name within
    _decl_class_registry.

    c         C   si   | |  _  | |  _ i  |  _ t |  ƒ |  _ |  j  rO |  j  j |  j g |  _ n	 g  |  _ t j |  ƒ d  S(   N(   t   parentt   nameR"   t   _ModNSt   mod_nsR0   R#   R$   (   R%   R;   R:   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR(   ‚   s    					c         C   s   | |  j  k S(   N(   R"   (   R%   R;   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   __contains__   s    c         C   s   |  j  | S(   N(   R"   (   R%   R;   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   __getitem__   s    c         C   sS   |  j  j | d  ƒ |  j  rO |  j d  k	 rO |  j j |  j ƒ t j |  ƒ n  d  S(   N(   R"   R   R   R:   R!   R;   R#   R4   (   R%   R;   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR!   “   s    c         C   s   t  |  j | ƒ S(   N(   t   getattrR=   (   R%   R1   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   resolve_attr™   s    c         C   s?   | |  j  k r. t | |  ƒ } | |  j  | <n |  j  | } | S(   N(   R"   R   (   R%   R;   t   marker(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR   œ   s
    c            s\   ˆ ˆ  j  k r, ˆ  j  ˆ } | j | ƒ n, t | g d ‡  ‡ f d †  ƒ} ˆ  j  ˆ <d  S(   NR   c              s   ˆ  j  ˆ ƒ S(   N(   R!   (    (   R%   R;   (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   <lambda>«   s    (   R"   R8   R   (   R%   R;   R   R   (    (   R%   R;   sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR   ¤   s
    (
   R6   R   R9   R(   R>   R?   R!   RA   R   R   (    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR   |   s   						R<   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t   _ModNS__parent(   R%   R:   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR(   ¯   s    c         C   s˜   y |  j  j | } Wn t k
 r' nQ X| d  k	 rx t | t ƒ rJ | j St | t ƒ s_ t ‚ | j	 |  j  j
 | ƒ Sn  t d |  j  j | f ƒ ‚ d  S(   Ns<   Module %r has no mapped classes registered under the name %r(   RD   R"   R   R   R   R   R=   R   t   AssertionErrorR2   R0   t   AttributeErrorR;   (   R%   R1   t   value(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   __getattr__²   s    (   R6   R   R(   RH   (    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR<   ®   s   	t   _GetColumnsc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R%   R   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR(   Ä   s    c         C   sÇ   t  |  j d t ƒ} | r· | | j k rI t j d |  j | f ƒ ‚ n  | j | } | j t j k r· | j	 } t
 | t ƒ rŒ | j } q´ t
 | t ƒ s´ t j d | ƒ ‚ q´ q· n  t |  j | ƒ S(   Nt	   configures/   Class %r does not have a mapped column named %rsa   Property %r is not an instance of ColumnProperty (i.e. does not correspond directly to a Column).(   R   R   t   Falset   all_orm_descriptorsR   R,   t   extension_typeR   t   NOT_EXTENSIONt   propertyR   R   R;   R    R@   (   R%   R1   t   mpt   desct   prop(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyRH   Ç   s     	(   R6   R   R(   RH   (    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyRI   Ã   s   	c         C   s   t  j |  j ƒ S(   N(   R   t   inspectR   (   t   target(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyRC   Ü   s    t	   _GetTablec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R1   t   metadata(   R%   R1   RV   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR(   à   s    	c         C   s   |  j  j t | |  j ƒ S(   N(   RV   t   tablesR   R1   (   R%   R1   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyRH   ä   s    	(   R6   R   R(   RH   (    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyRU   ß   s   	c         C   s.   t  | t ƒ r$ | j g  |  ƒ } n  t | ƒ S(   N(   R   R   R2   RI   (   R1   RG   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   _determine_containerê   s    t   _class_resolverc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sM   | |  _  | |  _ | |  _ |  _ | |  _ t j |  j ƒ |  _ d |  _	 d  S(   N(    (
   R   RR   t   argt   _declarative_argt   fallbackR   t   PopulateDictt   _access_clst   _dictt
   _resolvers(   R%   R   RR   R\   RZ   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR(   ñ   s    			c         C   sñ   |  j  } | | j k r, t | | j | ƒ S| | j j k rL | j j | S| | j j k rn t | | j ƒ Sd | j k rª | | j d k rª | j d } | j | ƒ S|  j ræ x0 |  j D]" } | | ƒ } | d  k	 r½ | Sq½ Wn  |  j
 | S(   NR	   (   R   R   RX   RV   RW   t   _schemasRU   RA   R`   R   R\   (   R%   R1   R   t   registryt   resolvRG   (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyR^   ù   s"    		c         C   s…   y9 t  |  j t ƒ  |  j ƒ } t | t ƒ r4 | j S| SWnE t k
 r€ } t j	 d |  j
 j |  j | j d |  j f ƒ ‚ n Xd  S(   NsÅ   When initializing mapper %s, expression %r failed to locate a name (%r). If this is a class name, consider adding this relationship() to the %r class after both dependent classes have been defined.i    (   t   evalRZ   t   globalsR_   R   RI   R   R/   R   R,   RR   R:   t   args(   R%   t   xt   n(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   __call__  s    (   R6   R   R(   R^   Ri   (    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyRY   ð   s   		c            se   d d  l  } d d l m } m } | j j ƒ  ‰  ˆ  j i | d 6| d 6ƒ ‡  ‡ ‡ f d †  } | S(   Niÿÿÿÿ(   t   foreignt   remoteRj   Rk   c            s   t  ˆ ˆ ˆ  |  ƒ S(   N(   RY   (   RZ   (   R\   R   RR   (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   resolve_arg&  s    (   t
   sqlalchemyt   sqlalchemy.ormRj   Rk   t   __dict__t   copyt   update(   R   RR   Rm   Rj   Rk   Rl   (    (   R\   RR   R   sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt	   _resolver  s    c         C   sä   t  | t ƒ rà t |  | ƒ } xH d	 D]@ } t | | ƒ } t  | t j ƒ r% t | | | | ƒ ƒ q% q% W| j rà t  | j t ƒ rà | j \ } } xG d
 D]< } | | k rš t  | | t	 ƒ rš | | | ƒ | | <qš qš Wqà n  | S(   Nt   argumentt   order_byt   primaryjoint   secondaryjoint	   secondaryt   _user_defined_foreign_keyst   remote_sidet   foreign_keys(   Rs   Rt   Ru   Rv   s	   secondaryRx   Ry   (   Ru   Rv   s	   secondaryRz   Ry   Rt   (
   R   R   Rr   R@   R   t   string_typest   setattrt   backreft   tuplet   str(   R   RR   Rl   t   attrt   vR1   t   kwargs(    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   _deferred_relationship+  s    

!(   R9   t   orm.propertiesR    R   R   t   schemaR   t   ormR   R   t    R   R   R   R   R   R#   R   t   objectR   R   R<   RI   t	   _inspectsRU   RX   RY   Rr   Rƒ   (    (    (    sl   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.pyt   <module>   s(   		'82
	/	