
    fC                         d Z ddlZddlm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	  e
       Z ej                  ej                         G d d	e
             Z G d
 de
      Zg fdZ G d de
      Zy)z+Computed attributes based on schema fields
    N)copy)event)	interface)
interfaces)NO_VALUEc                   (    e Zd Zd Z ed d       Zy)FieldUpdatedEventc                 <    || _         || _        || _        || _        y N)objectfield	old_value	new_value)selfobjr   r   r   s        q/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/zope/schema/fieldproperty.py__init__zFieldUpdatedEvent.__init__!   s    
""    c                     | j                   S r   )r   )r   s    r   <lambda>zFieldUpdatedEvent.<lambda>+   s
    T[[ r   c                     t        | d|      S )Nr   )setattr)r   r   s     r   r   zFieldUpdatedEvent.<lambda>,   s    h	 B r   N)__name__
__module____qualname__r   propertyinst r   r   r	   r	      s    #  BDDr   r	   c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	FieldPropertya0  Computed attributes based on schema fields

    Field properties provide default values, data validation and error messages
    based on data found in field meta-data.

    Note that FieldProperties cannot be used with slots. They can only
    be used for attributes stored in instance dictionaries.
    Nc                 <    ||j                   }|| _        || _        y r   )r   _FieldProperty__field_FieldProperty__namer   r   names      r   r   zFieldProperty.__init__9   s    <>>Dr   c                    || S |j                   j                  | j                  t              }|t        u rI| j                  j                  |      }t        |dt              }|t        u rt        | j                        |S Ndefault)__dict__getr#   _markerr"   bindgetattrAttributeError)r   r   klassvaluer   s        r   __get__zFieldProperty.__get__@   sl    <K!!$++w7GLL%%d+EE9g6E$T[[11r   c                     |j                   j                  | j                  |      }||u r(| j                  j	                  |      }t        |d|      }|S r'   )r)   r*   r#   r"   r,   r-   )r   r   r(   r0   r   s        r   
queryValuezFieldProperty.queryValueM   sK    !!$++w7GLL%%d+EE9g6Er   c                 p   | j                   j                  |      }|j                  |       |j                  r.| j                  |j
                  v rt        | j                  d      | j                  |t              }||j
                  | j                  <   t        j                  t        ||||             y )Nfield is readonly)r"   r,   validatereadonlyr#   r)   
ValueErrorr3   r   r   notifyr	   r   r   r0   r   oldvalues        r   __set__zFieldProperty.__set__T   s    !!$'u>>dkkT]]:T[[*=>>??42%*dkk"&tUHeDEr   c                 .    t        | j                  |      S r   )r-   r"   r   r%   s     r   __getattr__zFieldProperty.__getattr__]   s    t||T**r   r   )	r   r   r   __doc__r   r1   r3   r<   r?   r   r   r   r    r    /   s!    F+r   r    c                     t        j                  d      }t        j                  j	                  |       D ]"  }||v rt        | |         |j                  |<   $ y)a.  For each fields in `schema` create a FieldProperty on the class.

    schema ... interface those fields should be added to class
    omit ... list of field names to be omitted in creation

    Usage::

        class A(object):
            zope.schema.fieldproperty.createFieldProperties(IMySchema)
       N)sys	_getframezopeschemagetFieldNamesInOrderr    f_locals)rF   omitframer%   s       r   createFieldPropertiesrK   a   sQ     MM!E008 ;4<,VD\:t;r   c                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
FieldPropertyStoredThroughFieldNc                     ||j                   }t        |      | _        d| j                  j                   z  | j                  _         || _        y )Nz
__st_%s_st)r   r   r   &_FieldPropertyStoredThroughField__namer$   s      r   r   z(FieldPropertyStoredThroughField.__init__u   s=    <>>D%[
*TZZ-@-@@

r   c                 (    |j                  ||       y r   )set)r   r   r   r0   s       r   setValuez(FieldPropertyStoredThroughField.setValue}   s    		$r   c                 .    |j                  |t              S r   )queryr+   )r   r   r   s      r   getValuez(FieldPropertyStoredThroughField.getValue   s    {{4))r   c                 &    |j                  ||      S r   )rT   )r   r   r   r(   s       r   r3   z*FieldPropertyStoredThroughField.queryValue   s    {{4))r   c                 .    t        | j                  |      S r   )r-   r   r>   s     r   r?   z+FieldPropertyStoredThroughField.__getattr__   s    tzz4((r   c                     || S | j                   j                  |      }| j                  ||      }|t        u r.t	        |dt              }|t        u rt        | j                        |S r'   )r   r,   rU   r+   r-   r.   rO   )r   r   r/   r   r0   s        r   r1   z'FieldPropertyStoredThroughField.__get__   s`    <K

%dE*GE9g6E$T[[11r   c                    | j                   j                  |      }|j                  |       |j                  rU| j	                  ||t
              t
        u r"d|_        | j                  |||       d|_        y t        | j                  d      | j	                  ||t              }| j                  |||       t        j                  t        || j                   ||             y )NFTr5   )r   r,   r6   r7   r3   r+   rR   r8   rO   r   r   r9   r	   r:   s        r   r<   z'FieldPropertyStoredThroughField.__set__   s    

%u>>tUG4?!&dE51!% .ABB??49dE5)&tTZZ5IJr   r   )
r   r   r   r   rR   rU   r3   r?   r1   r<   r   r   r   rM   rM   s   s&    **)Kr   rM   )r@   rC   r   zope.schemarE   r   r   r    zope.schema._bootstrapinterfacesr   r   r+   implementerIFieldUpdatedEventr	   r    rK   rM   r   r   r   <module>r^      s         " 5 ( z445D D 6D /+F /+d (* ;$0Kf 0Kr   