
    f4                     j    d Z ddlmZ ddlmZ ddlmZ ddlmZ  G d de      Z G d d	e      Z	d
 Z
y)a  
Field accessors
===============

Accessors are used to model methods used to access data defined by fields.
Accessors are fields that work by decorating existing fields.

To define accessors in an interface, use the accessors function::

  class IMyInterface(Interface):

     getFoo, setFoo = accessors(Text(title=u'Foo', ...))

     getBar = accessors(TextLine(title=u'Foo', readonly=True, ...)


Normally a read accessor and a write accessor are defined.  Only a
read accessor is defined for read-only fields.

Read accessors function as access method specifications and as field
specifications.  Write accessors are solely method specifications.
    )implementedBy)
providedBy)Declaration)Methodc                   R    e Zd ZdZd Zed        Zd Zd Zd Z	ddZ
d	 Zd
 Zd Zy)FieldReadAccessorzField read accessor
    c                 f    || _         t        j                  | d       d|j                  z  | _        y )N zget %s)fieldr   __init____doc__selfr   s     m/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/zope/schema/accessors.pyr   zFieldReadAccessor.__init__/   s'    
b!%--/    c                     t        | j                        }t        t              }t	        |      }|D ]  }||v s|j                  |        t        | }	 ||z   S # t        $ r}|cY d }~S d }~ww xY wN)r   r   r   r   listremover   BaseException)r   providedimplementedprovided_listifacees         r   __provides__zFieldReadAccessor.__provides__8   s~    djj)#$56  X  	,E%$$U+	, .	k)) 		 H		s   A 	A0$A+%A0+A0c                      y)Nz() r   s    r   getSignatureStringz$FieldReadAccessor.getSignatureString^   s    r   c                     dddd d dS )Nr   
positionalrequiredoptionalvarargskwargsr   r   s    r   getSignatureInfoz"FieldReadAccessor.getSignatureInfoa   s     	 	r   c                 8     t        || j                               S r   )getattr__name__)r   objects     r   getzFieldReadAccessor.geti   s    -wvt}}-//r   Nc                 `    	 t        || j                        } |       S # t        $ r |cY S w xY wr   )r*   r+   AttributeError)r   r,   defaultfs       r   queryzFieldReadAccessor.queryl   s6    	.A 3J  	N	s    --c                 ~    | j                   rt        d       t        || j                  j                        |       y )Nz$Can't set values on read-only fields)readonly	TypeErrorr*   writerr+   )r   r,   values      r   setzFieldReadAccessor.sett   s0    ==BCC-,,-e4r   c                 .    t        | j                  |      S r   )r*   r   )r   names     r   __getattr__zFieldReadAccessor.__getattr__y   s    tzz4((r   c                     | j                   j                  | j                         }|j                  j                  | j                         | j                  j                  |      |_        |S r   )	__class____new____dict__updater   bind)r   r,   clones      r   rA   zFieldReadAccessor.bind|   sI    &&t~~6dmm,jjoof-r   r   )r+   
__module____qualname__r   r   propertyr   r    r(   r-   r2   r8   r;   rA   r   r   r   r   r   +   sD    0 # #J05
)r   r   c                       e Zd Zd Zd Zd Zy)FieldWriteAccessorc                 f    t        j                  | d       || _        d|j                  z  | _        y )Nr
   zset %s)r   r   r   r   r   s     r   r   zFieldWriteAccessor.__init__   s'    b!
%--/r   c                      y)Nz
(newvalue)r   r   s    r   r    z%FieldWriteAccessor.getSignatureString   s    r   c                     dddd d dS )N)newvaluer   r"   r   r   s    r   r(   z#FieldWriteAccessor.getSignatureInfo   s    +)	 	r   N)r+   rC   rD   r   r    r(   r   r   r   rG   rG      s    0
r   rG   c              #   p   K   t        |       }| | j                  st        |       }||_        | y y wr   )r   r4   rG   r6   )r   readerr6   s      r   	accessorsrN      s7     u%F
L>>#E* s   46N)r   zope.interfacer   r   zope.interface.declarationsr   zope.interface.interfacer   r   rG   rN   r   r   r   <module>rR      s8   . ) % 3 +U Up &r   