
    i^                        d dl 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mZ  G d d	e	
          Z G d de          Z G d de          Z G d de	
          Z G d de	
          Z G d de	
          ZdS )    N   )
connection)AnyUnion)errors)BaseMetaClass)DbObjectDbObjectTypec                      e Zd Zed             ZddZedd            Zedd
            Zedd            Z	edd            Z
edd            Zedefd            Zedeedf         fd            Zedeedf         fd            ZdS )	BaseQueuec                     |                      |           }||_        t                              |j                  |_        t                              |j                  |_        d |_	        ||_
        |S N)__new___connection
DeqOptions
_from_impldeq_options_impl_deq_options
EnqOptionsenq_options_impl_enq_options_payload_type_impl)clsr   implqueues       [/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/oracledb/aq.pyr   zBaseQueue._from_impl*   sa    C  &'2243HII'2243HII"    messageMessagePropertiesreturnNc                    t          |t                    st          d          |j        t	          j        t          j                   t          | j        t                    rQt          |j        t                    r|j        j
        | j        k    r t	          j        t          j                   dS dS | j        dk    rCt          |j        t          t          f          s t	          j        t          j                   dS dS t          |j        t          t          f          s t	          j        t          j                   dS dS )z?
        Internal method used for verifying a message.
        z"expecting MessageProperties objectNJSON)
isinstancer    	TypeErrorpayloadr   
_raise_errERR_MESSAGE_HAS_NO_PAYLOADpayload_typer
   r	   typeERR_PAYLOAD_CANNOT_BE_ENQUEUEDdictliststrbytesselfr   s     r   _verify_messagezBaseQueue._verify_message4   s3    '#455 	B@AAA?"f?@@@d'66 	Iw99I?'4+<<<!&"GHHHHH =< &((god|<< I!&"GHHHHHI I goU|<< I!&"GHHHHHI Ir   connection_module.Connectionc                     | j         S )z
        This read-only attribute returns a reference to the connection object
        on which the queue was created.
        )r   r1   s    r   r   zBaseQueue.connectionI   s     r   r   c                     | j         S )z
        This read-only attribute returns a reference to the options that will
        be used when dequeuing messages from the queue.
        )r   r5   s    r   
deqoptionszBaseQueue.deqoptionsQ          r   c                     | j         S )z5
        Deprecated: use deqoptions instead.
        )r7   r5   s    r   
deqOptionszBaseQueue.deqOptionsY       
 r   r   c                     | j         S )z
        This read-only attribute returns a reference to the options that will
        be used when enqueuing messages into the queue.
        )r   r5   s    r   
enqoptionszBaseQueue.enqoptions`   r8   r   c                     | j         S )z7
        Deprecated: use enqoptions() instead.
        )r=   r5   s    r   
enqOptionszBaseQueue.enqOptionsh   r;   r   c                     | j         j        S )zI
        This read-only attribute returns the name of the queue.
        )r   namer5   s    r   rA   zBaseQueue.nameo   s    
 zr   c                     | j         C| j        j        rd| _         n/| j        j        #t	          j        | j        j                  | _         | j         S )z
        This read-only attribute returns the object type for payloads that can
        be enqueued and dequeued. If using a JSON queue, this returns the value
        "JSON". If using a raw queue, this returns the value *None*.
        Nr#   )r   r   is_jsonr)   r
   r   r5   s    r   r)   zBaseQueue.payload_typev   sX     %z! %+""(4%1%<J+& &" !!r   c                     | j         S )z7
        Deprecated: use payload_type instead.
        )r)   r5   s    r   payloadTypezBaseQueue.payloadType   s    
   r   r   r    r!   N)r!   r3   )r!   r   )r!   r   )__name__
__module____qualname__classmethodr   r2   propertyr   r7   r:   r=   r?   r.   rA   r   r
   r)   rE    r   r   r   r   )   sn         [I I I I*       X  ! ! ! X!    X ! ! ! X!    X c    X "eL$$67 " " " X" !U<#56 ! ! ! X! ! !r   r   )	metaclassc                       e Zd Zdeded         fdZdeded         fdZded         fdZded         fdZ	d	ed         dd
fdZ
d	ed         dd
fdZddZddZd
S )Queuemax_num_messagesr!   r    c                 J   | j                             | j        j                   r| j                             |          }nYg }t	          |          |k     rD| j                                         }|n(|                    |           t	          |          |k     Dd |D             S )~
        Dequeues up to the specified number of messages from the queue and
        returns a list of these messages.
        Nc                 B    g | ]}t                               |          S rL   r    r   .0r   s     r   
<listcomp>z!Queue.deqmany.<locals>.<listcomp>   '    MMMt!,,T22MMMr   )r   _supports_deq_manyr   deq_manylendeq_oneappend)r1   rP   message_implsmessage_impls       r   deqmanyzQueue.deqmany   s    
 :(()9)?@@ 	3 J//0@AAMMMm$$'777#z1133'$$\222	 m$$'777
 NM}MMMMr   c                 ,    |                      |          S )z4
        Deprecated: use deqmany() instead.
        )r`   )r1   rP   s     r   deqManyzQueue.deqMany   s     ||,---r   r    Nc                 p    | j                                         }|t                              |          S dS z
        Dequeues at most one message from the queue and returns it. If no
        message is dequeued, None is returned.
        Nr   r\   r    r   r1   r_   s     r   deqonezQueue.deqone   s9    
 z))++#$//=== $#r   c                 *    |                                  S )z3
        Deprecated: use deqone() instead.
        )rh   r5   s    r   deqOnezQueue.deqOne   s     {{}}r   messagesNc                     |D ]}|                      |           d |D             }| j                            |           dS )a3  
        Enqueues multiple messages into the queue. The messages parameter must
        be a sequence containing message property objects which have all had
        their payload attribute set to a value that the queue supports.

        Warning: In python-oracledb Thick mode using Oracle Client libraries
        prior to 21c, calling :meth:`Queue.enqmany()` in parallel on different
        connections acquired from the same connection pool may fail due to
        Oracle bug 29928074. To avoid this, do one of: upgrade the client
        libraries, ensure that :meth:`Queue.enqmany()` is not run in parallel,
        use standalone connections or connections from different pools, or make
        multiple calls to :meth:`Queue.enqone()`. The function
        :meth:`Queue.deqmany()` call is not affected.
        c                     g | ]	}|j         
S rL   r   rV   ms     r   rW   z!Queue.enqmany.<locals>.<listcomp>       333Q333r   Nr2   r   enq_manyr1   rk   r   r^   s       r   enqmanyzQueue.enqmany   sY       	* 	*G  ))))33(333
M*****r   c                 ,    |                      |          S )z4
        Deprecated: use enqmany() instead.
        )ru   )r1   rk   s     r   enqManyzQueue.enqMany   s     ||H%%%r   r   c                 n    |                      |           | j                            |j                   dS z
        Enqueues a single message into the queue. The message must be a message
        property object which has had its payload attribute set to a value that
        the queue supports.
        Nr2   r   enq_oner0   s     r   enqonezQueue.enqone   s6     	W%%%
7=)))))r   c                 ,    |                      |          S )z3
        Deprecated: use enqone() instead.
        )r|   r0   s     r   enqOnezQueue.enqOne   s     {{7###r   rF   )rG   rH   rI   intr-   r`   rb   r   rh   rj   ru   rw   r|   r~   rL   r   r   rO   rO      s$       N N5H0I N N N N . .5H0I . . . .>78 > > > >78    +%8 9 +d + + + +(&%8 9 &d & & & &* * * *$ $ $ $ $ $r   rO   c                   f    e Zd Zdeded         fdZded         fdZded         ddfd	ZddZ	dS )
AsyncQueuerP   r!   r    c                 ^   K   | j                             |           d{V }d |D             S )rR   Nc                 B    g | ]}t                               |          S rL   rT   rU   s     r   rW   z&AsyncQueue.deqmany.<locals>.<listcomp>   rX   r   )r   rZ   )r1   rP   r^   s      r   r`   zAsyncQueue.deqmany   sD       #j112BCCCCCCCCMM}MMMMr   rc   c                    K   | j                                          d{V }|t                              |          S dS re   rf   rg   s     r   rh   zAsyncQueue.deqone   sO      
 "Z//11111111#$//=== $#r   rk   Nc                    K   |D ]}|                      |           d |D             }| j                            |           d{V  dS )al  
        Enqueues multiple messages into the queue. The messages parameter must
        be a sequence containing message property objects which have all had
        their payload attribute set to a value that the queue supports.

        Warning: calling this function in parallel on different connections
        acquired from the same pool may fail due to Oracle bug 29928074. Ensure
        that this function is not run in parallel, use standalone connections
        or connections from different pools, or make multiple calls to
        enqone() instead. The function Queue.deqmany() call is not affected.
        c                     g | ]	}|j         
S rL   rn   ro   s     r   rW   z&AsyncQueue.enqmany.<locals>.<listcomp>  rq   r   Nrr   rt   s       r   ru   zAsyncQueue.enqmany   so         	* 	*G  ))))33(333j!!-00000000000r   r   c                 ~   K   |                      |           | j                            |j                   d{V  dS ry   rz   r0   s     r   r|   zAsyncQueue.enqone  sL       	W%%%j  ///////////r   rF   )
rG   rH   rI   r   r-   r`   r   rh   ru   r|   rL   r   r   r   r      s        N #N	!	"N N N N>e$=> > > > >1d+>&? 1D 1 1 1 1"0 0 0 0 0 0r   r   c                      e Zd Zed             Zedefd            Zej        deddfd            Zedefd            Z	e	j        deddfd            Z	edefd	            Z
e
j        deddfd
            Z
edefd            Zej        deddfd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            ZdS )r   c                 >    |                      |           }||_        |S r   r   r   r   r   optionss      r   r   zDeqOptions._from_impl      ++c""r   r!   c                 4    | j                                         S )a5  
        This read-write attribute specifies a boolean expression similar to the
        where clause of a SQL query. The boolean expression can include
        conditions on message properties, user data properties, and PL/SQL or
        SQL functions. The default is to have no condition specified.
        )r   get_conditionr5   s    r   	conditionzDeqOptions.condition  s     z'')))r   valueNc                 :    | j                             |           d S r   )r   set_conditionr1   r   s     r   r   zDeqOptions.condition   s    
  '''''r   c                 4    | j                                         S )a)  
        This read-write attribute specifies the name of the consumer. Only
        messages matching the consumer name will be accessed. If the queue is
        not set up for multiple consumers this attribute should not be set. The
        default is to have no consumer name specified.
        )r   get_consumer_namer5   s    r   consumernamezDeqOptions.consumername$       z++---r   c                 :    | j                             |           d S r   )r   set_consumer_namer   s     r   r   zDeqOptions.consumername.      
$$U+++++r   c                 4    | j                                         S )az  
        This read-write attribute specifies the correlation identifier of the
        message to be dequeued. Special pattern-matching characters, such as
        the percent sign (%) and the underscore (_), can be used. If multiple
        messages satisfy the pattern, the order of dequeuing is indeterminate.
        The default is to have no correlation specified.
        r   get_correlationr5   s    r   correlationzDeqOptions.correlation2  s     z))+++r   c                 :    | j                             |           d S r   r   set_correlationr   s     r   r   zDeqOptions.correlation=      
""5)))))r   c                      t          d          )az  
        This write-only attribute specifies what types of messages should be
        dequeued. It should be one of the values
        :data:`~oracledb.MSG_PERSISTENT` (default),
        :data:`~oracledb.MSG_BUFFERED`, or
        :data:`~oracledb.MSG_PERSISTENT_OR_BUFFERED`.

        Note that :data:`~oracledb.MSG_BUFFERED` is not supported for JSON
        payloads.
         deliverymode can only be writtenAttributeErrorr5   s    r   deliverymodezDeqOptions.deliverymodeA  s     ?@@@r   c                 :    | j                             |           d S r   r   set_delivery_moder   s     r   r   zDeqOptions.deliverymodeO  r   r   c                 4    | j                                         S )a=  
        This read-write attribute specifies the locking behaviour associated
        with the dequeue operation. It should be one of the values
        :data:`~oracledb.DEQ_BROWSE`, :data:`~oracledb.DEQ_LOCKED`,
        :data:`~oracledb.DEQ_REMOVE` (default), or
        :data:`~oracledb.DEQ_REMOVE_NODATA`.
        )r   get_moder5   s    r   modezDeqOptions.modeS       z""$$$r   c                 :    | j                             |           d S r   )r   set_moder   s     r   r   zDeqOptions.mode^      
E"""""r   c                 4    | j                                         S )z
        This read-write attribute specifies the identifier of the message to
        be dequeued. The default is to have no message identifier specified.
        r   get_message_idr5   s    r   msgidzDeqOptions.msgidb  s     z((***r   c                 :    | j                             |           d S r   )r   set_message_idr   s     r   r   zDeqOptions.msgidj      
!!%(((((r   c                 4    | j                                         S )a  
        This read-write attribute specifies the position of the message that is
        retrieved. It should be one of the values
        :data:`~oracledb.DEQ_FIRST_MSG`, :data:`~oracledb.DEQ_NEXT_MSG`
        (default), or :data:`~oracledb.DEQ_NEXT_TRANSACTION`.
        )r   get_navigationr5   s    r   
navigationzDeqOptions.navigationn  s     z((***r   c                 :    | j                             |           d S r   )r   set_navigationr   s     r   r   zDeqOptions.navigationx  r   r   c                 4    | j                                         S )a\  
        This read-write attribute specifies the name of the transformation that
        must be applied after the message is dequeued from the database but
        before it is returned to the calling application. The transformation
        must be created using dbms_transform. The default is to have no
        transformation specified.
        r   get_transformationr5   s    r   transformationzDeqOptions.transformation|  s     z,,...r   c                 :    | j                             |           d S r   r   set_transformationr   s     r   r   zDeqOptions.transformation      
%%e,,,,,r   c                 4    | j                                         S )a  
        This read-write attribute specifies the transactional behavior of the
        dequeue request. It should be one of the values
        :data:`~oracledb.DEQ_ON_COMMIT` (default) or
        :data:`~oracledb.DEQ_IMMEDIATE`. This attribute is ignored when using
        the :data:`~oracledb.DEQ_BROWSE` mode. Note the value of
        :attr:`~Connection.autocommit` is always ignored.
        r   get_visibilityr5   s    r   
visibilityzDeqOptions.visibility       z((***r   c                 :    | j                             |           d S r   r   set_visibilityr   s     r   r   zDeqOptions.visibility  r   r   c                 4    | j                                         S )a\  
        This read-write attribute specifies the time to wait, in seconds, for a
        message matching the search criteria to become available for dequeuing.
        One of the values :data:`~oracledb.DEQ_NO_WAIT` or
        :data:`~oracledb.DEQ_WAIT_FOREVER` can also be used. The default is
        :data:`~oracledb.DEQ_WAIT_FOREVER`.
        )r   get_waitr5   s    r   waitzDeqOptions.wait  r   r   c                 :    | j                             |           d S r   )r   set_waitr   s     r   r   zDeqOptions.wait  r   r   )rG   rH   rI   rJ   r   rK   r.   r   setterr   r   r   r   r   r/   r   r   r   r   r   rL   r   r   r   r     s         [
 *3 * * * X* (s (t ( ( ( ( .c . . . X. ,# ,$ , , , , ,S , , , X, * * * * * * Ac A A A XA ,# ,$ , , , , %c % % % X% 
[## #$ # # # [# +u + + + X+ \)5 )T ) ) ) \) +C + + + X+ ) ) ) ) ) ) / / / / X/ -C -D - - - - 	+C 	+ 	+ 	+ X	+ ) ) ) ) ) ) %c % % % X% 
[## #$ # # # [# # #r   r   c                       e Zd Zed             Zedefd            Zej        deddfd            Zede	fd            Z
e
j        de	ddfd            Z
edefd	            Zej        deddfd
            ZdS )r   c                 >    |                      |           }||_        |S r   r   r   s      r   r   zEnqOptions._from_impl  r   r   r!   c                      t          d          )aB  
        This write-only attribute specifies what type of messages should be
        enqueued. It should be one of the values
        :data:`~oracledb.MSG_PERSISTENT` (default) or
        :data:`~oracledb.MSG_BUFFERED`.

        Note that :data:`~oracledb.MSG_BUFFERED` is not supported for JSON
        payloads.
        r   r   r5   s    r   r   zEnqOptions.deliverymode  s     ?@@@r   r   Nc                 :    | j                             |           d S r   r   r   s     r   r   zEnqOptions.deliverymode  r   r   c                 4    | j                                         S )a   
        This read-write attribute specifies the name of the transformation that
        must be applied before the message is enqueued into the database. The
        transformation must be created using dbms_transform. The default is to
        have no transformation specified.
        r   r5   s    r   r   zEnqOptions.transformation  s     z,,...r   c                 :    | j                             |           d S r   r   r   s     r   r   zEnqOptions.transformation  r   r   c                 4    | j                                         S )a2  
        This read-write attribute specifies the transactional behavior of the
        enqueue request. It should be one of the values
        :data:`~oracledb.ENQ_ON_COMMIT` (default) or
        :data:`~oracledb.ENQ_IMMEDIATE`. Note the value of
        :attr:`~Connection.autocommit` is ignored.
        r   r5   s    r   r   zEnqOptions.visibility  s     z((***r   c                 :    | j                             |           d S r   r   r   s     r   r   zEnqOptions.visibility  r   r   )rG   rH   rI   rJ   r   rK   r   r   r   r.   r   r   rL   r   r   r   r     s=         [
 
Ac 
A 
A 
A X
A ,# ,$ , , , , / / / / X/ -C -D - - - - +C + + + X+ ) ) ) ) ) ) ) )r   r   c                      e Zd Zg Zed             Zedefd            Zede	fd            Z
e
j        de	ddfd            Z
edefd            Zej        deddfd	            Zedefd
            Zedej        fd            Zede	fd            Zej        de	ddfd            Zedefd            Zej        deddfd            Zedefd            Zedeeef         fd            Zej        deddfd            Zedefd            Zej        deddfd            Zedee	         fd            Zej        deddfd            Zedefd            ZdS )r    c                 >    |                      |           }||_        |S r   r   )r   r   propss      r   r   zMessageProperties._from_impl  s    C  r   r!   c                 4    | j                                         S )z
        This read-only attribute specifies the number of attempts that have
        been made to dequeue the message.
        )r   get_num_attemptsr5   s    r   attemptszMessageProperties.attempts  s     z**,,,r   c                 4    | j                                         S )zq
        This read-write attribute specifies the correlation used when the
        message was enqueued.
        r   r5   s    r   r   zMessageProperties.correlation  s     z))+++r   r   Nc                 :    | j                             |           d S r   r   r   s     r   r   zMessageProperties.correlation  r   r   c                 4    | j                                         S )a  
        This read-write attribute specifies the number of seconds to delay an
        enqueued message. Any integer is acceptable but the constant
        :data:`~oracledb.MSG_NO_DELAY` can also be used indicating that the
        message is available for immediate dequeuing.
        )r   	get_delayr5   s    r   delayzMessageProperties.delay       z##%%%r   c                 :    | j                             |           d S r   )r   	set_delayr   s     r   r   zMessageProperties.delay  s    
U#####r   c                 4    | j                                         S )z
        This read-only attribute specifies the type of message that was
        dequeued. It will be one of the values
        :data:`~oracledb.MSG_PERSISTENT` or
        :data:`~oracledb.MSG_BUFFERED`.
        )r   get_delivery_moder5   s    r   r   zMessageProperties.deliverymode  r   r   c                 4    | j                                         S )zd
        This read-only attribute specifies the time that the message was
        enqueued.
        )r   get_enq_timer5   s    r   enqtimezMessageProperties.enqtime  s     z&&(((r   c                 4    | j                                         S )a  
        This read-write attribute specifies the name of the queue to which the
        message is moved if it cannot be processed successfully. Messages are
        moved if the number of unsuccessful dequeue attempts has exceeded the
        maximum number of retries or if the message has expired. All messages
        in the exception queue are in the :data:`~oracledb.MSG_EXPIRED` state.
        The default value is the name of the exception queue associated with
        the queue table.
        )r   get_exception_queuer5   s    r   
exceptionqzMessageProperties.exceptionq  s     z--///r   c                 :    | j                             |           d S r   )r   set_exception_queuer   s     r   r   zMessageProperties.exceptionq+  s    
&&u-----r   c                 4    | j                                         S )a  
        This read-write attribute specifies, in seconds, how long the message
        is available for dequeuing. This attribute is an offset from the delay
        attribute. Expiration processing requires the queue monitor to be
        running. Any integer is accepted but the constant
        :data:`~oracledb.MSG_NO_EXPIRATION` can also be used indicating that
        the message never expires.
        )r   get_expirationr5   s    r   
expirationzMessageProperties.expiration/  r   r   c                 :    | j                             |           d S r   )r   set_expirationr   s     r   r   zMessageProperties.expiration;  r   r   c                 4    | j                                         S )z
        This read-only attribute specifies the id of the message in the last
        queue that enqueued or dequeued this message. If the message has never
        been dequeued or enqueued, the value will be `None`.
        r   r5   s    r   r   zMessageProperties.msgid?  s     z((***r   c                     | j         j        S )a  
        This read-write attribute specifies the payload that will be enqueued
        or the payload that was dequeued when using a queue. When enqueuing,
        the value is checked to ensure that it conforms to the type expected
        by that queue. For RAW queues, the value can be a bytes object or a
        string. If the value is a string it will be converted to bytes in the
        encoding UTF-8.
        )r   r&   r5   s    r   r&   zMessageProperties.payloadH  s     z!!r   c                    t          |t                    r | j                            |j                   nt          |t          t
          f          s| j                            |           n[t          |t                    r|                                }nt          |t
                    r|}| j                            |           || j        _	        d S r   )
r$   r	   r   set_payload_objectr.   r/   set_payload_jsonencodeset_payload_bytesr&   )r1   r   value_bytess      r   r&   zMessageProperties.payloadT  s    eX&& 		6J))%+6666EC<00 	6J''....%%% $#llnnE5)) $#J((555"
r   c                 4    | j                                         S )z
        This read-write attribute specifies the priority of the message. A
        smaller number indicates a higher priority. The priority can be any
        integer, including negative numbers. The default value is 0.
        )r   get_priorityr5   s    r   priorityzMessageProperties.priorityb  s     z&&(((r   c                 :    | j                             |           d S r   )r   set_priorityr   s     r   r  zMessageProperties.priorityk  s    
&&&&&r   c                     | j         S )a0  
        This read-write attribute specifies a list of recipient names that can
        be associated with a message at the time a message is enqueued. This
        allows a limited set of recipients to dequeue each message. The
        recipient list associated with the message overrides the queue
        subscriber list, if there is one. The recipient names need not be in
        the subscriber list but can be, if desired.

        To dequeue a message, the consumername attribute can be set to one of
        the recipient names. The original message recipient list is not
        available on dequeued messages. All recipients have to dequeue a
        message before it gets removed from the queue.

        Subscribing to a queue is like subscribing to a magazine: each
        subscriber can dequeue all the messages placed into a specific queue,
        just as each magazine subscriber has access to all its articles. Being
        a recipient, however, is like getting a letter: each recipient is a
        designated target of a particular message.
        )_recipientsr5   s    r   
recipientszMessageProperties.recipientso  s    * r   c                 H    | j                             |           || _        d S r   )r   set_recipientsr  r   s     r   r	  zMessageProperties.recipients  s&    
!!%((( r   c                 4    | j                                         S )a  
        This read-only attribute specifies the state of the message at the time
        of the dequeue. It will be one of the values
        :data:`~oracledb.MSG_WAITING`, :data:`~oracledb.MSG_READY`,
        :data:`~oracledb.MSG_PROCESSED`, or :data:`~oracledb.MSG_EXPIRED`.
        )r   	get_stater5   s    r   statezMessageProperties.state  r   r   )rG   rH   rI   r  rJ   r   rK   r   r   r.   r   r   r   r   datetimer   r   r   r/   r   r   r	   r&   r   r  r-   r	  r  rL   r   r   r    r      sn       K  [
 -# - - - X- ,S , , , X, * * * * * * &s & & & X& \$3 $4 $ $ $ \$ .c . . . X. )* ) ) ) X) 
0C 
0 
0 
0 X
0 . . . . . . 	+C 	+ 	+ 	+ X	+ ) ) ) ) ) ) +u + + + X+ 	"uh/ 	" 	" 	" X	" ^#S #T # # # ^# )# ) ) ) X) _'c 'd ' ' ' _'  DI       X , ! ! ! ! ! ! &s & & & X& & &r   r    )r   r   connection_moduletypingr   r   r   baser   dbobjectr	   r
   r   rO   r   r   r   r    rL   r   r   <module>r     s  @  - - - - - -                     , , , , , , , ,b! b! b! b! b!- b! b! b! b!JN$ N$ N$ N$ N$I N$ N$ N$b-0 -0 -0 -0 -0 -0 -0 -0`Y# Y# Y# Y# Y#= Y# Y# Y# Y#x3) 3) 3) 3) 3)= 3) 3) 3) 3)lr& r& r& r& r&- r& r& r& r& r& r&r   