ó
è?F[c           @   s  d  d l  Z  d  d l m Z d  d l m Z d  d l m Z d  d l Z d  d l Z d  d l	 Z d  d l
 m Z d  d l m Z m Z d e f d „  ƒ  YZ d	 „  Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d  e f d! „  ƒ  YZ d" e f d# „  ƒ  YZ d$ e f d% „  ƒ  YZ d& e f d' „  ƒ  YZ  d( e f d) „  ƒ  YZ! d* e f d+ „  ƒ  YZ" d S(,   iÿÿÿÿN(   t   Key(   t   Password(   t   Query(   t   Blob(   t   sixt	   long_typet   Propertyc           B   s˜   e  Z e Z d  Z d  Z d  Z d d d e d d e d „ Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   t    c         C   sh   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ |  j rR d |  j |  _ n	 d |  _ | |  _ d  S(   Nt   _(   t   verbose_namet   namet   defaultt   requiredt	   validatort   choicest	   slot_namet   unique(   t   selfR	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   __init__(   s    								c         C   s(   | r  | j  ƒ  t | |  j ƒ Sd  Sd  S(   N(   t   loadt   getattrR   t   None(   R   t   objt   objtype(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   __get__6   s    
c         C   s—   |  j  | ƒ yH | j rT t | d |  j ƒ rT t | d |  j ƒ } | | ƒ } n  Wn( t k
 r t j j d |  j ƒ n Xt	 | |  j
 | ƒ d  S(   Ns	   on_set_%ss   Exception running on_set_%s(   t   validatet   _loadedt   hasattrR
   R   t	   Exceptiont   botot   logt	   exceptiont   setattrR   (   R   R   t   valuet   fnc(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   __set__=   s    c         C   s&   | |  _  | |  _ d |  j |  _ d  S(   NR   (   t   model_classR
   R   (   R   R$   t   property_name(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   __property_config__J   s    		c         C   so   t  | t j ƒ s$ | |  j ƒ  k r( d  St  | |  j ƒ sk t d |  j j |  j |  j t	 | ƒ f ƒ ‚ n  d  S(   Ns,   Validation Error, %s.%s expecting %s, got %s(
   t
   isinstanceR   t   string_typest   default_valuet	   data_typet	   TypeErrorR$   t   __name__R
   t   type(   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   default_validatorO   s    $c         C   s   |  j  S(   N(   R   (   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR)   U   s    c         C   s˜   |  j  r+ | d  k r+ t d |  j ƒ ‚ n  |  j rn | rn | |  j k rn t d | |  j j |  j f ƒ ‚ n  |  j r‡ |  j | ƒ n |  j | ƒ | S(   Ns   %s is a required propertys   %s not a valid choice for %s.%s(	   R   R   t
   ValueErrorR
   R   R$   R,   R   R.   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   X   s    %	c         C   s   | S(   N(    (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   emptyc   s    c         C   s   t  | |  j ƒ S(   N(   R   R
   (   R   t   model_instance(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   get_value_for_datastoref   s    c         C   s   | S(   N(    (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   make_value_from_datastorei   s    c         C   s    t  |  j ƒ r |  j ƒ  S|  j S(   N(   t   callableR   (   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   get_choicesl   s    
N(   R,   t
   __module__t   strR*   t	   type_nameR
   R	   R   t   FalseR   R   R#   R&   R.   R)   R   R0   R2   R3   R5   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   !   s    										c         C   s`   |  d  k r d  St |  t j ƒ rF t |  ƒ d k r\ t d ƒ ‚ q\ n t d t |  ƒ ƒ ‚ d  S(   Ni   s&   Length of value greater than maxlengths   Expecting String, got %s(   R   R'   R   R(   t   lenR/   R+   R-   (   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   validate_stringr   s    t   StringPropertyc           B   s,   e  Z d  Z d d d e e d e d „ Z RS(   t   StringR   c         C   s,   t  t |  ƒ j | | | | | | | ƒ d  S(   N(   t   superR<   R   (   R   R	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   €   s    N(   R,   R6   R8   R   R9   R;   R   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR<   |   s   	t   TextPropertyc        	   B   s8   e  Z d  Z d d d e d d e d d „ Z d „  Z RS(   t   TextR   c	   	      C   s5   t  t |  ƒ j | | | | | | | ƒ | |  _ d  S(   N(   R>   R?   R   t
   max_length(	   R   R	   R
   R   R   R   R   R   RA   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ‹   s    c         C   s{   t  t |  ƒ j | ƒ } t | t j ƒ sC t d t | ƒ ƒ ‚ n  |  j rw t	 | ƒ |  j k rw t
 d |  j ƒ ‚ n  d  S(   Ns   Expecting Text, got %ss)   Length of value greater than maxlength %s(   R>   R?   R   R'   R   R(   R+   R-   RA   R:   R/   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ’   s
    N(   R,   R6   R8   R   R9   R   R   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR?   ‡   s
   		t   PasswordPropertyc        	   B   sh   e  Z d  Z e Z d Z d	 d	 d e d	 d	 e d	 d „ Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z RS(
   sà  

    Hashed property whose original value can not be
    retrieved, but still can be compared.

    Works by storing a hash of the original value instead
    of the original value.  Once that's done all that
    can be retrieved is the hash.

    The comparison

       obj.password == 'foo'

    generates a hash of 'foo' and compares it to the
    stored hash.

    Underlying data type for hashing, storing, and comparing
    is boto.utils.Password.  The default hash function is
    defined there ( currently sha512 in most cases, md5
    where sha512 is not available )

    It's unlikely you'll ever need to use a different hash
    function, but if you do, you can control the behavior
    in one of two ways:

      1) Specifying hashfunc in PasswordProperty constructor

         import hashlib

         class MyModel(model):
             password = PasswordProperty(hashfunc=hashlib.sha224)

      2) Subclassing Password and PasswordProperty

         class SHA224Password(Password):
             hashfunc=hashlib.sha224

         class SHA224PasswordProperty(PasswordProperty):
             data_type=MyPassword
             type_name="MyPassword"

         class MyModel(Model):
             password = SHA224PasswordProperty()

    R   R   c	   	      C   s5   t  t |  ƒ j | | | | | | | ƒ | |  _ d S(   s¬   
           The hashfunc parameter overrides the default hashfunc in boto.utils.Password.

           The remaining parameters are passed through to StringProperty.__init__N(   R>   RB   R   t   hashfunc(	   R   R	   R
   R   R   R   R   R   RC   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   Ë   s    c         C   s   |  j  | d |  j ƒ} | S(   NRC   (   R*   RC   (   R   R!   t   p(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR3   ×   s    c         C   s<   t  t |  ƒ j | ƒ } | r4 t | ƒ r4 t | ƒ Sd  Sd  S(   N(   R>   RB   R2   R:   R7   R   (   R   R1   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR2   Û   s    
c         C   sZ   t  | |  j ƒ s= |  j d |  j ƒ } | j | ƒ | } n  t t |  ƒ j | | ƒ d  S(   NRC   (   R'   R*   RC   t   setR>   RB   R#   (   R   R   R!   RD   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR#   â   s
    	c         C   s+   |  j  t t |  ƒ j | | ƒ d |  j ƒS(   NRC   (   R*   R>   RB   R   RC   (   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   é   s    c         C   sw   t  t |  ƒ j | ƒ } t | |  j ƒ rN t | ƒ d k rs t d ƒ ‚ qs n% t d t |  j ƒ t | ƒ f ƒ ‚ d  S(   Ni   s&   Length of value greater than maxlengths   Expecting %s, got %s(	   R>   RB   R   R'   R*   R:   R/   R+   R-   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ì   s
    N(   R,   R6   t   __doc__R   R*   R8   R   R9   R   R3   R2   R#   R   R   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRB   š   s   -				t   BlobPropertyc           B   s   e  Z e Z d  Z d „  Z RS(   t   blobc         C   s   | |  j  ƒ  k rr t | t ƒ sr |  j | t | ƒ ƒ } d  } | rQ | j } n  t d | d | ƒ } | } qr n  t t |  ƒ j	 | | ƒ d  S(   NR!   t   id(
   R)   R'   R   R   R-   R   RI   R>   RG   R#   (   R   R   R!   t   oldbRI   t   b(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR#   ù   s    (   R,   R6   R   R*   R8   R#   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRG   õ   s   t   S3KeyPropertyc           B   s\   e  Z e j j j Z d  Z d Z d d d e
 d d e
 d „ Z d „  Z d „  Z d „  Z RS(   t   S3Keys   ^s3:\/\/([^\/]*)\/(.*)$c         C   s,   t  t |  ƒ j | | | | | | | ƒ d  S(   N(   R>   RL   R   (   R   R	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR     s    c         C   s¤   t  t |  ƒ j | ƒ } | |  j ƒ  k sB | t |  j ƒ  ƒ k rL |  j ƒ  St | |  j ƒ rb d  St j |  j	 | ƒ } | r d  St
 d |  j t | ƒ f ƒ ‚ d  S(   Ns&   Validation Error, expecting %s, got %s(   R>   RL   R   R)   R7   R'   R*   t   ret   matcht   validate_regexR+   R-   (   R   R!   RO   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR     s    *
c         C   sÔ   t  t |  ƒ j | | ƒ } | rÌ t | |  j ƒ r7 | St j |  j | ƒ } | rÐ | j j	 ƒ  } | j
 | j d ƒ d t ƒ} | j | j d ƒ ƒ } | sÅ | j | j d ƒ ƒ } | j d ƒ n  | Sn | Sd  S(   Ni   R   i   R   (   R>   RL   R   R'   R*   RN   RO   RP   t   _managert   get_s3_connectiont
   get_buckett   groupR9   t   get_keyt   new_keyt   set_contents_from_string(   R   R   R   R!   RO   t   s3t   buckett   k(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR     s    c         C   s=   t  t |  ƒ j | ƒ } | r5 d | j j | j f Sd  Sd  S(   Ns
   s3://%s/%s(   R>   RL   R2   RY   R
   R   (   R   R1   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR2   ,  s    N(   R,   R6   R   RX   t   keyR    R*   R8   RP   R   R9   R   R   R   R2   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRL     s   			t   IntegerPropertyc        
   B   sS   e  Z e Z d  Z d d d e d d e d d d „	 Z d „  Z d „  Z	 d „  Z
 RS(	   t   Integeri    iÿÿÿi   €c
   
      C   s>   t  t |  ƒ j | | | | | | | ƒ | |  _ |	 |  _ d  S(   N(   R>   R\   R   t   maxt   min(
   R   R	   R
   R   R   R   R   R   R^   R_   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   9  s    (	c         C   sr   t  | ƒ } t t |  ƒ j | ƒ } | |  j k rI t d |  j ƒ ‚ n  | |  j k  rn t d |  j ƒ ‚ n  | S(   Ns   Maximum value is %ds   Minimum value is %d(   t   intR>   R\   R   R^   R/   R_   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ?  s    c         C   s
   | d  k S(   N(   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR0   H  s    c         C   s:   | d k s | d  k r! d } n  t t |  ƒ j | | ƒ S(   NR   i    (   R   R>   R\   R#   (   R   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR#   K  s    	N(   R,   R6   R`   R*   R8   R   R9   R   R   R0   R#   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR\   4  s   			t   LongPropertyc           B   sD   e  Z e Z d  Z d d d e d d e d „ Z d „  Z d „  Z	 RS(   t   Longi    c         C   s,   t  t |  ƒ j | | | | | | | ƒ d  S(   N(   R>   Ra   R   (   R   R	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   V  s    c         C   sr   t  | ƒ } t t |  ƒ j | ƒ } d } d } | | k rO t d | ƒ ‚ n  | | k  rn t d | ƒ ‚ n  | S(   NI       €Iÿÿÿÿÿÿÿs   Maximum value is %ds   Minimum value is %d(   R   R>   Ra   R   R/   (   R   R!   R_   R^   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   Z  s    c         C   s
   | d  k S(   N(   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR0   e  s    N(
   R,   R6   R   R*   R8   R   R9   R   R   R0   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRa   Q  s   	t   BooleanPropertyc           B   s;   e  Z e Z d  Z d d e e d d e d „ Z d „  Z RS(   t   Booleanc         C   s,   t  t |  ƒ j | | | | | | | ƒ d  S(   N(   R>   Rc   R   (   R   R	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   n  s    c         C   s
   | d  k S(   N(   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR0   r  s    N(	   R,   R6   t   boolR*   R8   R   R9   R   R0   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRc   i  s
   t   FloatPropertyc           B   sD   e  Z e Z d  Z d d d e d d e d „ Z d „  Z d „  Z	 RS(   t   Floatg        c         C   s,   t  t |  ƒ j | | | | | | | ƒ d  S(   N(   R>   Rf   R   (   R   R	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   {  s    c         C   s(   t  | ƒ } t t |  ƒ j | ƒ } | S(   N(   t   floatR>   Rf   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR     s    c         C   s
   | d  k S(   N(   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR0   „  s    N(
   R,   R6   Rh   R*   R8   R   R9   R   R   R0   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRf   v  s   	t   DateTimePropertyc        
   B   se   e  Z d  Z e j Z d Z d e e d d e d d e d „	 Z d „  Z	 d „  Z
 d „  Z d „  Z RS(   s£   This class handles both the datetime.datetime object
    And the datetime.date objects. It can return either one,
    depending on the value stored in the databaset   DateTimec
   
      C   s>   t  t |  ƒ j | | | | | | |	 ƒ | |  _ | |  _ d  S(   N(   R>   Ri   R   t   auto_nowt   auto_now_add(
   R   R	   Rk   Rl   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR     s    (	c         C   s/   |  j  s |  j r |  j ƒ  St t |  ƒ j ƒ  S(   N(   Rk   Rl   t   nowR>   Ri   R)   (   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR)   –  s    
c         C   s<   | d  k r d  St | t j ƒ r& | St t |  ƒ j | ƒ S(   N(   R   R'   t   datetimet   dateR>   Ri   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ›  s
    c         C   s;   |  j  r% t | |  j |  j ƒ  ƒ n  t t |  ƒ j | ƒ S(   N(   Rk   R    R
   Rm   R>   Ri   R2   (   R   R1   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR2   ¢  s    	c         C   s   t  j  j ƒ  S(   N(   Rn   t   utcnow(   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRm   §  s    N(   R,   R6   RF   Rn   R*   R8   R   R9   R   R)   R   R2   Rm   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRi   ˆ  s   				t   DatePropertyc        
   B   s_   e  Z e j Z d  Z d e e d d e d d e d „	 Z d „  Z	 d „  Z
 d „  Z d „  Z RS(   t   Datec
   
      C   s>   t  t |  ƒ j | | | | | | |	 ƒ | |  _ | |  _ d  S(   N(   R>   Rq   R   Rk   Rl   (
   R   R	   Rk   Rl   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   °  s    (	c         C   s/   |  j  s |  j r |  j ƒ  St t |  ƒ j ƒ  S(   N(   Rk   Rl   Rm   R>   Rq   R)   (   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR)   ¶  s    
c         C   s`   t  t |  ƒ j | ƒ } | d  k r( d  St | |  j ƒ s\ t d |  j t | ƒ f ƒ ‚ n  d  S(   Ns&   Validation Error, expecting %s, got %s(   R>   Rq   R   R   R'   R*   R+   R-   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   »  s
    c         C   sb   |  j  r% t | |  j |  j ƒ  ƒ n  t t |  ƒ j | ƒ } t | t j ƒ r^ | j	 ƒ  } n  | S(   N(
   Rk   R    R
   Rm   R>   Rq   R2   R'   Rn   Ro   (   R   R1   t   val(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR2   Â  s    	c         C   s   t  j j ƒ  S(   N(   Rn   Ro   t   today(   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRm   Ê  s    N(   R,   R6   Rn   Ro   R*   R8   R   R9   R   R)   R   R2   Rm   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRq   «  s   				t   TimePropertyc           B   s>   e  Z e j Z d  Z d d d e d d e d „ Z d „  Z	 RS(   t   Timec         C   s,   t  t |  ƒ j | | | | | | | ƒ d  S(   N(   R>   Ru   R   (   R   R	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   Ò  s    c         C   s`   t  t |  ƒ j | ƒ } | d  k r( d  St | |  j ƒ s\ t d |  j t | ƒ f ƒ ‚ n  d  S(   Ns&   Validation Error, expecting %s, got %s(   R>   Ru   R   R   R'   R*   R+   R-   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   Ö  s
    N(
   R,   R6   Rn   t   timeR*   R8   R   R9   R   R   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRu   Î  s
   	t   ReferencePropertyc        
   B   sn   e  Z e Z d  Z d d d d d e d d e d „	 Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z RS(	   t	   Referencec
   
      C   s>   t  t |  ƒ j | | | | | | |	 ƒ | |  _ | |  _ d  S(   N(   R>   Rx   R   t   reference_classt   collection_name(
   R   Rz   R{   R	   R
   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ã  s    (	c         C   sm   | ri t  | |  j ƒ } | |  j ƒ  k r. | St | t j ƒ re |  j | ƒ } t | |  j | ƒ n  | Sd  S(   N(	   R   R   R)   R'   R   R(   Rz   R    R
   (   R   R   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   é  s    c         C   sd   | d k	 rK | j | k s< t | d ƒ rK | j | j k rK t d ƒ ‚ n  t t |  ƒ j | | ƒ S(   s[   Don't allow this object to be associated to itself
        This causes bad things to happenRI   s(   Can not associate an object with itself!N(   R   RI   R   R/   R>   Rx   R#   (   R   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR#   ö  s    <c         C   sž   t  t |  ƒ j | | ƒ |  j d  k rJ d | j j ƒ  |  j f |  _ n  t |  j	 |  j ƒ ru t
 d |  j ƒ ‚ n  t |  j	 |  j t | | |  j ƒ ƒ d  S(   Ns	   %s_%s_sets   duplicate property: %s(   R>   Rx   R&   R{   R   R,   t   lowerR
   R   Rz   R/   R    t   _ReverseReferenceProperty(   R   R$   R%   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR&   ý  s    "c         C   s.   | j  d ƒ } t | ƒ d k r* t ‚ n  d  S(   Nt   -i   (   t   splitR:   R/   (   R   R!   t   t(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt
   check_uuid  s    c         C   sf   yH | j  ƒ  } |  j j  ƒ  } | j | ƒ r1 d  St d | | f ƒ ‚ Wn t d | ƒ ‚ n Xd  S(   Ns   %s not instance of %ss   %s is not a Model(   t   get_lineageRz   t
   startswithR+   R/   (   R   R!   t   obj_lineaget   cls_lineage(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   check_instance  s    c         C   s€   |  j  r |  j  | ƒ n  |  j rD | d  k rD t d |  j ƒ ‚ n  | |  j ƒ  k rZ d  St | t j ƒ s| |  j	 | ƒ n  d  S(   Ns   %s is a required property(
   R   R   R   R/   R
   R)   R'   R   R(   R†   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR     s    	N(   R,   R6   R    R*   R8   R   R9   R   R   R#   R&   R   R†   R   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyRx   Þ  s   						
R}   c           B   s/   e  Z e Z d  Z d „  Z d „  Z d „  Z RS(   t   queryc         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   t    _ReverseReferenceProperty__modelt#   _ReverseReferenceProperty__propertyR{   R
   t	   item_type(   R   t   modelt   propR
   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   %  s
    				c         C   sŠ   | d k	 r‚ t |  j ƒ } t |  j t ƒ rh g  } x" |  j D] } | j d | ƒ q= W| j | | ƒ S| j |  j d | ƒ Sn |  Sd S(   sB   Fetches collection of model instances of this collection property.s   %s =s    =N(   R   R   Rˆ   R'   R‰   t   listt   appendt   filter(   R   R1   R$   R‡   t   propsRŒ   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ,  s    c         C   s   t  d ƒ ‚ d S(   s%   Not possible to set a new collection.s   Virtual property is read-onlyN(   R/   (   R   R1   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR#   :  s    (   R,   R6   R   R*   R8   R   R   R#   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR}   !  s
   		t   CalculatedPropertyc        
   B   sP   e  Z d d d e d d e e e d  „	 Z d „  Z d „  Z d „  Z d „  Z	 RS(   c
   
      C   s>   t  t |  ƒ j | | | | | | | ƒ | |  _ |	 |  _ d  S(   N(   R>   R‘   R   t   calculated_typet
   use_method(
   R   R	   R
   R   R   R   R   R’   R   R“   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   A  s    	c         C   sX   |  j  ƒ  } | rT y+ t | |  j ƒ } |  j r< | ƒ  } n  WqT t k
 rP qT Xn  | S(   N(   R)   R   R   R“   t   AttributeError(   R   R   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   I  s    	c         C   s   d S(   s!   Not possible to set a new AutoID.N(    (   R   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR#   T  s    c         C   s#   |  j  s t | |  j | ƒ n  d  S(   N(   R“   R    R   (   R   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   _set_directX  s    	c         C   s9   |  j  t t t g k r1 |  j | | j ƒ } | Sd  Sd  S(   N(   R’   R7   R`   Re   R   t	   __class__R   (   R   R1   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR2   \  s    N(
   R,   R6   R   R9   R`   R   R   R#   R•   R2   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR‘   ?  s   					t   ListPropertyc           B   sJ   e  Z e Z d  Z d d d d „ Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   t   Listc         K   sJ   | d  k r g  } n  | |  _ t t |  ƒ j | | d | d t | d  S(   NR   R   (   R   RŠ   R>   R—   R   t   True(   R   RŠ   R	   R
   R   t   kwds(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   i  s    		c         C   só   |  j  r |  j  | ƒ n  | d  k	 rC t | t ƒ sC | g } qC n  |  j t j k ra t j } n' |  j t j k r t j } n	 |  j } xd | D]\ } t | | ƒ s | t j k rÉ t d |  j	 ƒ ‚ që t d |  j	 |  j j
 f ƒ ‚ q q W| S(   Ns*   Items in the %s list must all be integers.s-   Items in the %s list must all be %s instances(   R   R   R'   R   RŠ   R   t   integer_typesR(   R/   R
   R,   (   R   R!   RŠ   t   item(    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   o  s"    		 c         C   s
   | d  k S(   N(   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR0   †  s    c         C   s   t  t t |  ƒ j ƒ  ƒ S(   N(   R   R>   R—   R)   (   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR)   ‰  s    c         C   sŽ   |  j  t j k r t j } n' |  j  t j k r< t j } n	 |  j  } t | | ƒ r` | g } n | d k ru g  } n  t t |  ƒ j | | ƒ S(   s…   Override the set method to allow them to set the property to an instance of the item_type instead of requiring a list to be passed inN(	   RŠ   R   R›   R(   R'   R   R>   R—   R#   (   R   R   R!   RŠ   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR#   Œ  s    		N(   R,   R6   R   R*   R8   R   R   R   R0   R)   R#   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR—   d  s   			t   MapPropertyc           B   sD   e  Z e Z d  Z e d d d d „ Z d „  Z d „  Z	 d „  Z
 RS(   t   Mapc         K   sJ   | d  k r i  } n  | |  _ t t |  ƒ j | | d | d t | d  S(   NR   R   (   R   RŠ   R>   R   R   R™   (   R   RŠ   R	   R
   R   Rš   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR      s    		c         C   sù   t  t |  ƒ j | ƒ } | d  k	 rE t | t ƒ sE t d ƒ ‚ qE n  |  j t j	 k rc t j	 } n' |  j t j
 k r t j
 } n	 |  j } xh | D]` } t | | | ƒ s‘ | t j	 k rÏ t d |  j ƒ ‚ qñ t d |  j |  j j f ƒ ‚ q‘ q‘ W| S(   Ns   Value must of type dicts*   Values in the %s Map must all be integers.s-   Values in the %s Map must all be %s instances(   R>   R   R   R   R'   t   dictR/   RŠ   R   R›   R(   R
   R,   (   R   R!   RŠ   R[   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ¦  s     	 c         C   s
   | d  k S(   N(   R   (   R   R!   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR0   ¼  s    c         C   s   i  S(   N(    (   R   (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR)   ¿  s    N(   R,   R6   RŸ   R*   R8   R7   R   R   R   R0   R)   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyR   ›  s   		(#   Rn   t   boto.sdb.db.keyR    t
   boto.utilsR   t   boto.sdb.db.queryR   RN   R   t   boto.s3.keyt   boto.sdb.db.blobR   t   boto.compatR   R   t   objectR   R;   R<   R?   RB   RG   RL   R\   Ra   Rc   Rf   Ri   Rq   Ru   Rx   R}   R‘   R—   R   (    (    (    s3   lib/python2.7/site-packages/boto/sdb/db/property.pyt   <module>   s6   Q	
[/##C%7